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(