可以创建深度纹理,其中每个像素包含一个高精度的“深度”值(请参阅 RenderTextureFormat.Depth)。这主要在一些效果需要有场景深度时使用(例如,软粒子、屏幕空间环境光遮蔽和半透明均需要场景深度)。
深度纹理中的像素值范围是 0 到 1,同时呈非线性分布。精度通常是 24 位或 16 位,具体取决于所使用的深度缓冲区。从深度纹理读取时,会返回一个 0..1 范围内的高精度值。如果需要获取与相机的距离或者线性值,则需手动计算。
Unity 中的深度纹理在不同平台上的执行是不同的。
大多数时候,深度纹理用于渲染从相机的深度。在此情况下,UnityCG.cginc
include file 包含一些宏以处理上述难题:
例如,这个着色器渲染其对象的深度:
Shader "Render Depth" { SubShader { Tags { "RenderType"="Opaque" } Pass { Fog { Mode Off } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f { float4 pos : SV_POSITION; float2 depth : TEXCOORD0; }; v2f vert (appdata_base v) { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); UNITY_TRANSFER_DEPTH(o.depth); return o; } half4 frag(v2f i) : COLOR { UNITY_OUTPUT_DEPTH(i.depth); } ENDCG } } }
Page last updated: 2013-06-28