Esta propiedad, compatible tanto en Built-in RP como en Scriptable RP, controla que caras de un polígono serán removidas en el procesamiento de la profundidad del píxel. ¿Qué quiere decir esto? Recordemos que un objeto poligonal posee caras internas y caras externas. Por defecto, las caras externas son visibles (Cull Back), sin embargo, podemos activar las caras internas siguiendo el esquema que se muestra a continuación.
- Cull Off. Ambas caras del objeto son renderizadas.
- Cull Back. Las caras externas del objeto son renderizadas.
- Cull Front. Las caras internas del objeto son renderizadas.
Este comando posee tres valores, los cuales son: Back, Front y Off. Por defecto viene configurada la opción “Back”, sin embargo, generalmente la línea de código asociada al culling no es visible en el shader por motivos de optimización. Si deseamos modificar las opciones de culling, debemos agregar la palabra Cull seguido del modo que queremos aplicar.
Shader “InspectorPath / shaderName”
{
Properties {} ...
SubShader
{
// Cull Off
// Cull Front
Cull Back
}
}
También podemos configurar dinámicamente las opciones de Culling a través del Inspector de Unity, mediante la dependencia “UnityEngine.Rendering.CullMode” la cual se declara desde el drawer Enum y se pasa como argumento en la función.
Shader "InspectorPath/shaderName"
{
Properties
{
[Enum(UnityEngine.Rendering.CullMode)]
_Cull ("Cull", Float) = 0
}
SubShader
{
Cull [_Cull]
}
}
Otra opción bastante útil ocurre por medio de la semántica SV_IsFrontFace, la cual nos permite proyectar distintos colores y/o texturas en ambas caras de un mesh. Para ello, simplemente debemos declarar una variable booleana y asignar tal semántica como argumento en el fragment shader stage.
fixed4 frag (v2f i, bool face : SV_IsFrontFace) : SV_Target
{
fixed4 colFront = tex2D(_FrontTexture, i.uv);
fixed4 colBack = tex2D(_BackTexture, i.uv);
return face ? colFront : colBack;
}
Cabe destacar que esta opción funciona únicamente cuando el comando “Cull” ha sido configurado en “Off” previamente.