使用深度纹理

可以创建深度纹理,其中每个像素包含一个高精度的“深度”值(请参阅 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