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

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(
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值