Los sombreadores(Shaders) en Unity pueden ser escritos en alguna de estas tres maneras:
Los Surface Shaders son su mejor opción si su sombreador(shader) necesitar se afectado por luces y sombras. Los sombreadores(shaders) de superficies hacen que sea fácil de escribir sombreadores complejos en una forma compacta - es un nivel mayor de abstracción para la interacción del canalizado(pipeline) de iluminación de Unity. La mayoría de los sombreadores de superficies automáticamente soportan ambos forward y deferred lighting. Usted escribe los sombreadores de superficie en un par de lineas de Cg/HLSL y un montón más de código es auto-generado a partir de eso.
No utilice el sombreador(shader) de superficies si su sombreador no está haciendo algo con las luces. Para Image Effects o muchos efectos especiales de sombreados(shaders), los sombreadores de superficies son una opción subóptima, ya que ellos van a hacer muchas calculaciones de iluminación por ninguna razón!
Los sombreadores Vertex y Fragment van a ser requeridos, si su sombreador no necesita interactuar con la iluminación, o si usted necesita algunos efectos muy exóticos que el sombreador de superficie no puede manejar. Los programas de sombreado escritos de esta manera son la forma más flexible de crear el efecto que usted necesita (incluso los sombreadores de superficie se convierten automáticamente a un grupo de sombreadores vertex y fragment), pero eso llega con un precio: usted tiene que escribir más código y es más díficl hacerlo interactuar con la iluminación. Estos sombreados están escrito en Cg/HLSL también.
Los Sombreadores con Funciones Fijas necesitan ser escritos para hardware viejo que no soporta sombreadores programables. Usted probablemente querrá escribir sombreadores con funciones fijas como un n-th fallback para su fragmento de lujo o sombreador de superficies, para asegurarse que su juego todavía renderice algo sensible cuando corra en un hardware viejo o en plataformas móviles simples. Los sombreadores con funciones fijas son enteramente escritos en un lenguaje llamado ShaderLab, que es similar al de los archivos .FX de Microsoft o CgFX de NVIDIA.
Sin importar qué tipo escoja usted, el código siempre será envuelto en un ShaderLab, que es usado para organizar la estructura del sombreador. Se ve así:
Shader "MyShader" {
Properties {
_MyTexture ("My Texture", 2D) = "white" { }
// other properties like colors or vectors go here as well
}
SubShader {
// here goes the 'meat' of your
// - surface shader or
// - vertex and fragment shader or
// - fixed function shader
}
SubShader {
// here goes a simpler version of the SubShader above that
// can run on older graphics cards
}
}
Nosotros recomendamos que usted empiece leyendo acerca de algunos conceptos básicos del sintaxis del ShaderLab en ShaderLab reference y luego seguir a los tutoriales listados abajo.
Los tutoriales incluyen muchos ejemplos de diferentes tipos de sombreadores. Para aún más ejemplos de sombreadores de superficie especialmente, se puede obtener la fuente del sombreado integrado de Unity desde Resources section. Los paquetes de Image Effects de Unity contienen muchos interesantes sombreadores vertex y fragment.
Lea para una introducción a los sombreadores, y revise shader reference!