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)

相关推荐
xiaogai_gai4 小时前
BOM 物料清单同步实战:金蝶云星空 → 四化智造 MES 修改场景深度拆解
unity·游戏引擎
淡海水8 小时前
03-03-架构篇-SGen GC架构解析
unity·架构·c#·gc·sgen
萌萌的提莫队长1 天前
Unity相机捕捉,图像识别,抠像+合成
opencv·unity
mxwin2 天前
Unity Shader 光线追踪原理与实战案例
unity·游戏引擎
地狱为王2 天前
Unity使用DPDFNet实现实时语音增强(降噪)
unity·语音增强·降噪·dpdfnet
平行云PVT2 天前
国产信创实时云渲染解决方案:如何实现数字孪生与三维应用云化部署?
unity·webrtc·unreal engine·实时云渲染·国产信创·摩尔线程·砺算科技
夏炎黄2 天前
Terrain地形剪裁
unity
小贺儿开发2 天前
DeepSeek + Codex + MCP:Unity 游戏开发实测
科技·游戏·unity·ai·程序员·编程·deepseek
新的瑞拉公主2 天前
Cocos plist 粒子一键导入 Unity:Editor 工具实现与参数映射
unity·游戏开发·cocos2d-x·粒子系统·editor工具
淡海水2 天前
03-02-架构篇-Boehm GC架构解析
unity·架构·c#·gc·boehm