UnityShader应用——使用深度值实现Fog雾效

本文介绍了如何在Unity中利用深度值创建Fog雾效。通过开启深度、利用_CameraDepthTexture,结合ZBuffer计算片元深度,然后在Shader中计算线性深度,最终使用深度值作为插值依据实现从原色到雾色的平滑过渡。提供Shader代码和FogEffect脚本,便于在项目中应用。
摘要由CSDN通过智能技术生成
1.开启深度
GetComponent<Camera>().depthTextureMode = DepthTextureMode.Depth;   //开启摄像机深度mode
2._CameraDepthTexture

存储深度信息的Tex,需要在Shader中声明;

sampler2D _CameraDepthTexture;
3.ZBuffer (只有ShaderTag是Opaque的才会被写入ZBuffer)

经过光栅化之后,计算每个多边形上每个片元的Z值,并和对应位置上的深度缓冲区中的值作比较。
如果z <= Zbuffer[x][y](即距离观察者更近),将对应位置的深度缓冲区的值修改为该片元的深度。

4.计算深度

vert中:

o.scrPos = ComputeScreenPos(o.vertex); 

ComputeScreenPos用于将裁剪空间坐标范围从[-w,w]映射到[0,w](不做透视除法,直接插值)

接下来对深度纹理进行采样,两种方式都可以:

fixed4 c =  tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.scrPos));    
fixed4 c =  tex2D(_CameraDepthTexture, UNITY_PROJ_COORD(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值