Es posible crear Render Textures donde cada píxel contiene un valor Depth de alta precisión. Esto se usa principalmente cuando algunos efectos necesitan que la Profundidad de la escena esté disponible (por ejemplo, las partículas suaves, la oclusión ambiental del espacio de la pantalla y la translucidez necesitarían la Profundidad de la Escena). Los Image Effects (Efectos de imagen) también usan Texturas de Profundidad .
Los valores de píxeles en la textura de profundidad varían entre 0 y 1, con una distribución no lineal. La precisión es generalmente de 32 o 16 bits, dependiendo de la configuración y la plataforma utilizada. Cuando se lee desde la textura de profundidad, se devuelve un valor de alta precisión en un rango entre 0 y 1. Si necesita obtener la distancia desde la cámara, o un valor lineal de 0–1, calcule esto manualmente con macros de ayuda (ver a continuación).
Las texturas de profundidad se soportan en la mayoría de hardware moderno y APIs gráficas. Los requerimientos especiales se listan abajo:
La mayoría de las veces, las Texturas de Profundidad se utilizan para procesar la profundidad de la cámara. El archivo include UnityCG.cginc contiene algunas macros para tratar la complejidad anterior en este caso:
Por ejemplo, este shader renderizaría la profundidad de sus objetos:
Shader "Render Depth" {
SubShader {
Tags { "RenderType"="Opaque" }
Pass {
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 = UnityObjectToClipPos(v.vertex);
UNITY_TRANSFER_DEPTH(o.depth);
return o;
}
half4 frag(v2f i) : SV_Target {
UNITY_OUTPUT_DEPTH(i.depth);
}
ENDCG
}
}
}