Todos los archivos Shaders en Unity se escriben en un lenguaje declarativo llamado “ShaderLab”. En el archivo, una sintaxis anidada de corchetes
declara varias cosas que describen el shader - por ejemplo, qué propiedades shader deben mostrarse en el inspector de materiales;
qué tipo de hardware fallbacks hacer; qué tipo de modos de blending (mezcla) utilizar etc.; y donde el “código shader” está escrito
snippets CGPROGRAM
en el mismo archivo shader (mirar surface shaders y vertex and fragment shaders).
Esta página y las páginas hijo describen la sintaxis “ShaderLab” anidada en corchetes. Los snippets CGPROGRAM
están escritos en un lenguaje
regular shader HLSL/Cg, mire sus páginas de documentación.
Shader es el comando raíz de un archivo de Shader. Cada archivo debe definir un (y uno solo Shader). Específica cómo cualquier objeto cuyo material utiliza este shader es renderizado.
Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }
Define un shader. Va a aparecer en el inspector del materia listado debajo de name. Los shaders opcionalmente definen una lista de propiedades que se muestran como ajustes del material. Después de esto viene una lista de SubShaders, y opcionalmente un fallback.
Los shaders pueden tener una lista de properties. Cualquier propiedad declarada en un shader es mostrada en el material inspector dentro de Unity. Las propiedades típicas son el color del objeto, texturas, o los valores arbitrarios para ser utilizados por este sombreador.
Cada sombreador es comprendido por una lista de sub-shaders. Usted debe tener al menos uno. Cuando cargue un sombreador, Unity va a ir a través de la lista de subshaders, y coge el primero soportado por la máquina del usuario final. Si ningún subshader es soportado, Unity va a intentar utilizar fallback shader.
Diferentes tarjetas gráficas tiene diferentes capacidades. Esto plantea un problema eterno para desarrolladores de juegos; usted quiere que su juego se vea increíble en el último hardware, pero no quiere que sea disponible para solo el 3% de la población. En este momento es cuándo los subshaders entran. Cree un subshader para tarjetas más viejas. Estos subshaders pueden implementar el efecto que usted quiere de una manera más lenta, o pueden escoger no implementar algunos detalles.
Shader “nivel de detalle” (LOD) y “shader replacement” son dos técnicas que también construyen sobre subshaders, ver Shader LOD y Shader Replacemement para más detalles.
He aquí uno de los sombreadores más simples posibles:
// colored vertex lighting
Shader "Simple colored lighting"
{
// a single color property
Properties {
_Color ("Main Color", Color) = (1,.5,.5,1)
}
// define one subshader
SubShader
{
// a single pass in our subshader
Pass
{
// use fixed function per-vertex lighting
Material
{
Diffuse [_Color]
}
Lighting On
}
}
}
Este sombreador define una propiedad de color __ \ _ Color__ (que se muestra en el inspector de materiales como Main Color) con un valor predeterminado de __ (1,0.5,0.5,1) __. Entonces se define un solo subshader. El subshader consiste en un Pass que enciende la iluminación de vértices de función fija y configura material básico para ella.
Mire más ejemplos complejos en Ejemplos Surface Shader o Ejemplos Vertex and Fragment Shader.