Shader入门笔记2

反射 (reflection)

float3 refleDir=reflection(-viewDir,worldNormal)

float3 refleColor=texCUBE(_Cube,refleDir)

折射(refraction)

float3 refraDir=refraction(-viewDir,worldNormal,_RefractionRate)

float3 refraColor=texCUBE(_Cube,refraDir)

菲涅尔反射(随着观察角度变化而变化的反射)

公式:float fresnel=_FresnelScale+(1-_FresnelScale)*Pow(1-dot(viewDir,worldNormal),_FresnelPower)

变体:float fresnel=max(0,min(1,refraction+_FresnelScale*pow(1-dot(viewDir,worldNormal),_FresnelPower))) 用于风格化渲染

float3 finColor=lerp(ambientColor,reflection,fresnel)

渲染纹理

1.镜面效果

renderTextrue + camera + 主纹理(rendertextrue)uv.x取反

2.玻璃效果

需要半透

tag("Queue"="Transparent" RenderType="TrnasParent")

ZWrite=Off

Blend ScrAlpha OneMinuxScrAlpha

_Distortion("Distortion",Range(0,100))=10

使用GrabPass("_RefractionTex") 抓取屏幕图片做折射 名字固定的

sampler2D _RefractionTex

float3 _RefractionTex_TexelSize

v2f vert(appdate i)

{

o.pos=UnityObjectToClipPos(i.vertex)

o.scrPos=ComputeGrabScreenPos(o.pos)

}

需要法线纹理,以纹理来做折射偏移

float2 offset=normal.xy*_RefractionTex_TexelSize.xy*_Distortion

scrPos.xy+=offset

float3 refractionColor = tex2D(_RefractionTex,scrPos.xy/scrPos.w)

lerp(diff,refractionColor,_Refraction)

纹理动画

_FrameTex("FrameTex",2d)="white"

_PlaySpeed("PlaySpeed",float)=1

循环纹理动画

frac(float2(xSpeed,ySpeed)*_Time,y)

frac取数据小数部分 = x-floor(x)

相关推荐
魔士于安3 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
小贺儿开发4 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水4 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
小小数媒成员4 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
林川~015 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发5 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
林川~016 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
yi碗汤园6 天前
MQTT消息队列遥测传输协议
网络·网络协议·unity
林川~016 天前
Unity 常用 API 与核心类全解:从生命周期到协程,附性能避坑清单(Unity 6 适配)
unity·游戏引擎·常用api
sensen_kiss6 天前
CPT306 Coursework 1 个人游戏作业——坦克大战
unity·游戏程序·游戏策划