Los Sombreadores en Unity son usados a través de Materials, que esencialmente combina el código del sombreador con parámetros como texturas. Una explicación en profundidad de la relación Sombreador/Material se puede leer aquí.
Las propiedades del Material van a aparecer en el Inspector cuando ya sea el Material en sí mismo o un GameObject que utilice el Material seleccionado. El Inspector de Material se ve así:
Cada Material se verá un poco diferente en el Inspector, dependiendo del sombreador específico que esté utilizando. El sombreador en sí mismo determina qué tipo de propiedades serán disponibles para ajustar en el inspector. El Inspector del Material es descrito en detalle en Material reference page. Recuerde que un sombreador es implementado a través de un Material. Entonces mientras que el sombreador define las propiedades que serán mostradas en el Inspector, cada material en realidad contiene la información ajustada de los deslizadores, colores, y texturas. La cosa más importante que hay que acordarse acerca de esto es que un sombreador sencillo puede ser usado en múltiples materiales, pero un Material sencillo no puede ser usado en múltiplos sombreadores.
Hay un número de factores que pueden afectar el rendimiento en general de su juego. Esta página va a hablar específicamente acerca de las consideraciones de rendimiento para Built-in Shaders. El rendimiento de un sombreador en su mayoría depende en dos cosas: el sombreador en sí mismo y qué Rendering Path es usado por el proyecto o cámara específica. Para recomendaciones de rendimiento cuando escriba sus propios sombreadores, vea la página ShaderLab Shader Performance.
De los rendering paths que Unity soporta, Deferred Lighting y Vertex Lit paths tienen el rendimiento más predecible. En Deferred Lighting, cada objeto por lo general es dibujado dos veces, sin importar qué luces lo estén afectando. Similarmente, en Vertex Lit cada objeto por lo general es dibujado una vez. Entonces, las diferencias de rendimiento en los sombreadores en su mayoría dependen en cuántas texturas ellos usan y qué calculaciones hacen.
En Forward rendering path, el rendimiento de un sombreador depende en ambos el sombreador en sí mismo y las luces en la escena. La siguiente sección explica los detalles. Hay dos categorías básicas de sombreadores desde una perspectiva de rendimiento, Vertex-Lit, y Pixel-Lit.
Los sombreadores Vertex-Lit en Forward rendering path son siempre más baratos que sombreadores Pixel-Lit. Estos sombreadores trabajan calculando la iluminación basada en los vertices del mesh, usando todas las luces a la vez. Por esto, sin importar qué tantas luces estén brillando en el objeto, solamente tendrá que ser dibujado una vez.
Los sombreadores Pixel-Lit calculan la iluminación final en cada píxel que es dibujado. Por esto, el objeto tiene que ser dibujado una vez para obtener la iluminación de ambiente y la iluminación principal direccional, y una vez para cada luz adicional que está brillando en él. Por lo tanto, es N rendering passes, dónde N es el número final de las luces de píxel que están brillando en el objeto. Esto aumenta la carga en el CPU que tiene que procesar y envía comandos a las tarjetas gráficas, y en la tarjeta de gráficos para procesar los vertices y dibujar los píxeles. El tamaño del objeto Pixel-lit en la pantalla también afectará la velocidad en el que es dibujado. Entre más grande el objeto, más lento será dibujado.
Entonces los sombreadores pixel lit vienen con un precio en el rendimiento, pero ese precio permite algunos efectos espectaculares: sombras, normal-mapping, un buen aspecto de reflejos especulares y light cookies, solo por nombrar algunos.
Recuerde que las luces pueden ser forzadas a un modo de píxel (“importante”) o vertex/SH (“no importante”). Cualquier luz de vertice que brille en un sombreador Pixel-Lit va a ser calculada basada en los vertices del objeto o todo el objeto, y no aumentará el costo de renderización o efectos visuales que están asociados con las luces de píxeles.
Fuera de los Built-in Shaders, ellos vienen más o menos en este orden de complejidad creciente:
Adicionalmente, Unity tiene varios sombreadores simplificados destinados para plataformas móviles, debajo de la categoría “Mobile”. Estos sombreadores funcionan en otras plataformas también, entonces si usted puede vivir con su simplificación (e.g. una aproximación especular, sin soporte de color por material etc.), intente usarlos!
Para ver las simplificaciones especificas que se han hecho para cada shader, mire los archivos .shader
del paquete de “built-in shaders” y la información se lista en la parte superior del archivo en algunos comentarios.
Algunos ejemplos de los cambios que son comunes a través de todos los shaders Móviles son:
AlphaTest
o ColorMask
.