Los sombreadores ShaderLab abarcan más que simplemente “hardware shaders”. Ellos hacen muchas cosas. Ellos describen propiedades que son mostradas en el Inspector del Material, contiene múltiples implementaciones de sombreador para diferente hardware de gráficas, configura el estado de hardware de funciones fijas y así. Los sombreadores programables actuales - como los programas vertex y fragment - son simplemente una parte de todo el concepto “sombreador” del ShaderLab. Eche un vistazo a shader tutorial para una introducción básica. Aquí nosotros llamaremos los sombreadores de baja gama de hardware shader programs.
Si usted quiere escribir sombreadores que interactuén con la iluminación, eche un vistazo a la documentación Surface Shaders. Para algunos ejemplos, eche un vistazo a Vertex and Fragment Shader Examples. El resto de esta página va a asumir los sombreadores que no interactuán con las luces de Unity (e.g. efectos especiales, Image Effects etc.)
Los programas del Sombreador están escritos en el lenguaje Cg / HLSL, al incorporar “snippets” en el texto del sombreador, algún lado dentro del comando Pass. Ellos en verdad se ven así:
Pass {
// ... the usual pass state setup ...
CGPROGRAM
// compilation directives for this snippet, e.g.:
#pragma vertex vert
#pragma fragment frag
// the Cg/HLSL code itself
ENDCG
// ... the rest of pass setup ...
}
Los snippets del programa Cg están escritos entre CGPROGRAM y ENDCG.
Al comienzo de las directivas de compilación snippet pueden ser dadas como declaraciones #pragma. Las directivas indican qué funciones del sombreador van a ser compiladas:
Otras directivas de compilación;
Cada snippet debe contener al menos un programa vertex y un programa fragment. Por lo tanto, las directivas #pragma vertex y #pragma fragment son requeridas.
Compilation directives that don’t do anything starting with Unity 5.0 and can be safely removed: #pragma glsl
, #pragma glsl_no_auto_normalization
, #pragma profileoption
, #pragma fragmentoption
.
Plataformas de Renderizado
Unity soporta varios APIs de renderizado (e.g. Direct3D 9 y OpenGL),y por defecto todos los programas del sombreador son compilados para los renderizadores soportados. Usted puede indicar qué rennderizados quiere al compilar utilizando las directivas #pragma only_renderers o #pragma exclude_renderers. Esto es útil si usted sabe que solo va a tener como objetivo a Mac OS X(dónde no hay Direct3D), o solamente Windows (dónde Unity por determinado se va a D3D), o si algún sombreador en particular es solamente posible en un renderizado y no en otros. Actualmente los nombres de los renderizados soportados son:
Por ejemplo, esta linea solo compilaría el sombreador a un modo D3D9:
#pragma only_renderers d3d9