¿Qué shaders utilizar en proyectos para HoloLens en Unity?

¡Saludos de nuevo!

Desde el área Games de Bravent, estamos siempre buscando mejorar en todos los sentidos.

Uno de los aspectos más importantes en una aplicación para HoloLenses el rendimiento: que funcione lo más fluido posible para mejorar la experiencia de usuario y de paso evitar que se maree.

En otros post hemos comentado las limitaciones técnicas de las HoloLens y que se deben realizar optimizaciones para compensar, pero hasta ahora no habíamos entrado en detalle.

En concreto, hoy hablaremos de consideraciones gráficas, teniendo en cuenta el rendimiento ante todo.

En primer lugar, siempre deberíamos seguir la configuración recomendada de Microsoft para el Holotoolkit de Unity. En resumen, esta es la configuración a usar:

01-1.png02-1.png


¿Qué son los shaders ?

Como el tema principal de este post son los shaders, primero nos centraremos en explicar qué son:

Un shader es un conjunto de código que describe cómo un motor gráfico va a generar dichos gráficos en pantalla. Suena sencillo, pero dependiendo de cómo se haya escrito dicho shader, podemos tener una aplicación perfectamente fluida o una patata.

 

No entraremos en detalle sobre cómo un shader está escrito, pero sí en qué apariencias podemos conseguir teniendo en cuenta el coste de rendimiento de cada uno.

Como referencia, ésta es la apariencia de un modelo de árbol usando el Standard Shader de Unity:

Standard Shader

03-1.png

Y ésta es la apariencia del Standard Fast del Holotoolkit. Ambos siguen el paradigma de renderizado PBR, a diferencia de los otros shaders que usan fórmulas más antiguas y ligeras:

Standard Fast

04-1.png

Muy similares en apariencia, podemos obtener una mayor fidelidad gráfica con este shader, y consecuentemente, es el que menos rendimiento mejora de todo el Holotoolkit.

Un detalle a tener en cuenta es que este shader está optimizado de tal forma que no carga inputs de texturas que no hayamos introducido, por lo que mientras no nos excedamos no es un mal shader genérico. Sin embargo, si necesitamos más rendimiento, éste no es un shader ideal. 

 

Fast Configurable

05.png

Éste es el shader más versátil del Holotoolkit Fast Configurable. Aquí podemos activar y desactivar cualquie input de textura, alterar los modos de escritura en el buffer (aditivo, sustractivo, etc.).

No usa el mismo sistema de reflejos especulares que el estándar, por lo que aún consiguiendo buena calidad gráfica, no sacrificamos rendimiento:

Specular Highlights

06.png

Con SpecularHighlights sacrificamos reflejos especulares configurables por textura y otras opciones a cambio de un mayor rendimiento, También permite aplicar un color de forma aditiva (highlight), que puede ser útil en una aplicación con interactividad con modelos 3D:

Unlit Configurable

07.png

En casos extremos, nos compensa usar un shader más agresivo. Este es UnlitConfigurable, que directamente no recibe luces y apenas muestra una única textura en la geometría. También se puede desactivar el input de textura y dejarlo solo en un color plano, reduciendo aún más la carga de texturas.

¡Y tachán!

Recordemos que la clave de una aplicación fluida es la optimización en todos sus aspectos.

En este post hemos cubierto la optimización en lo referente a shaders.

 

¡Manteneos atentos a los próximos artículos!

Si tenéis alguna duda o cuestión que queráis compartir, dejadnos un comentario más abajo 😉

¡Hasta pronto!