Los Shaders son Assets que contienen código e instrucciones para que la tarjeta gráfica ejecute. Materials referencia shaders, y configuran sus parámetros (texturas, color, y demás).
Unity contains some built-in shaders that are always available in your project (for example, the Standard shader). You can also write your own shaders and apply post-processing effects.
Para crear un nuevo Shader, utilice Assets->Create->Shader del menú principal o el menú de contexto del Project View. Un Shader es un archivo de texto similar a un script C#, y está escrito en una combinación de lenguajes Cg/HLSL y ShaderLab (ver la página de escribir shaders para detalles).
Esta sección del inspector le permite especificar las texturas por defecto para un shader. Cuando un nuevo Material será creado con este shader, estas texturas serán asignadas automáticamente.
El Inspector Shader muestra información básica acerca del shader (en la mayoría shader tags), y permite la compilación e inspección de código compilado de bajo nivel.
Para Surface Shaders, el “Show generated code ” botón muestra todo el código que Unity genera para manejar la iluminación & sombras. Si usted realmente quiere personalizar el código generado, usted puede copiar & pegar todo nuevamente a su archivo original shader y comenzar a ajustarlo.
Menú popup del botón "Compile and show code permite inspeccionar el código shader compilado final (e.g. assembly en Direct3D9, o un GLSL de bajo nivel optimizado para OpenGL ES) para plataformas seleccionadas. Esto en la mayoría es útil mientras se optimice shaders por rendimiento; a menudo usted quiere saber cómo muchas instrucciones de bajo nivel aquí son generadas al final.
El código de bajo nivel generado es útil para pegar a herramientas de análisis del rendimiento del Shader en el GPU (como AMD GPU ShaderAnalyzer o PVRShaderEditor).
En el tiempo de importación del shader, Unity no compila el shader enter. Esto se debe a que la mayoría de shader tienen muchas variants adentro, y compilar todas de ellas, para todas las plataformas posibles, tomaría mucho tiempo. Mas bien, esto es hecho:
En el tiempo de construcción del reproductor, todas las variantes shader “not yet compiled” (que todavía no se compilan) son compiladas, para que estén en los mismos datos del juego incluso si el editor no las utilizo.
Sin embargo, esto no significa que un shader podría tener un error ahí, el cual no es detectado en el tiempo de importación del shader. Por ejemplo, usted está corriendo el editor utilizando Direct3D 11, pero un shader tiene un error si es compilado para OpenGL. O algunas variantes del shader no encajan a los limites de instrucción del shader model 2.0. Estos errores serán mostrados en el inspector si el editor las necesita; pero también es buena práctica compilar completamente el shader manualmente para todas las plataformas que usted necesite, para revisar por errores. Esto puede ser realizado utilizando el menú emergente "Compile and show code en el inspector del shader.
La compilación del Shader es hecha utilizando un proceso de fondo llamado UnityShaderCompiler
que es comenzado por Unity
cuando necesite compilar shaders. Múltiples proceso del compilador pueden iniciarse (por lo general uno por CPU
core en su maquina), para que la compilación de un shader en el player build time pueda realizarse en paralelo. Mientras el
editor no compila shaders, los proceso del compilador hacen nada y no consumen recursos del computador,
por lo que no hay razón para preocuparse por estos. También están apagados cuando se sale del editor de Unity.
Los resultados de la compilación individual de variantes shaders son almacenados en caché en el proyecto, debajo de la carpeta Library/ShaderCache
.
Esto significa que los shaders 100% idénticos o sus snippets van a re-utilizar resultados previamente compilados. También
significa que la carpeta shader cache puede volver bastante grande, si usted tiene muchos shaders que son cambiados
a menudo. Siempre es más seguro borrarlas; simplemente va a causar variantes shader en ser re-compiladas.