All Shader files in Unity are written in a declarative language called ShaderLab. In the file, a nested-braces
syntax declares various things that describe the shader – for example, which shader properties to show in the Material Inspector, what kind of hardware fallbacks to perform, and what kind of blending modes to use. Actual shader code is written in
CGPROGRAM
snippets inside the same shader file. For more information, see Writing Surface Shaders and Writing 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.