Sombreador estándar MRTK2
El sistema de sombreado estándar MRTK2 utiliza un único sombreador flexible que puede lograr objetos visuales similares al sombreador estándar de Unity, implementar Sistema Fluent Design principios y mantener el rendimiento en dispositivos de realidad mixta.
Escenas de ejemplo
Puede encontrar los ejemplos de material de sombreador en la escena MaterialGallery en MRTK/Examples/Demos/StandardShader/Scenes/
. Todos los materiales de esta escena usan el sombreador MRTK/Standard.
Puede encontrar una escena de comparación para comparar y probar el sombreador MRTK/Standard con el ejemplo de sombreador Unity/Estándar en la escena StandardMaterialComparison en MRTK/Examples/Demos/StandardShader/Scenes/
.
Architecture
El sistema de sombreado MRTK/Standard es un "sombreador uber" que usa la característica variante del programa de sombreador de Unity para generar automáticamente código de sombreador óptimo basado en propiedades de material. Cuando un usuario selecciona propiedades de material en el inspector de materiales, solo incurre en costos de rendimiento para las características que ha habilitado.
Inspector de materiales
Existe un inspector de material personalizado para el sombreador MRTK/Standard denominado MixedRealityStandardShaderGUI.cs
. Este inspector habilita o deshabilita automáticamente las características del sombreador en función de la selección del usuario y, así, ayuda a configurar el estado de representación. Para obtener más información sobre cada característica , mantenga el puntero sobre cada propiedad en el Editor de Unity para obtener información sobre herramientas.
La primera parte del inspector controla el estado de representación del material. El modo de representación determina cómo y cuándo se representará un material. El objetivo del sombreador MRTK/Standard es reflejar los modos de representación que se encuentran en el sombreador Unity/Estándar. El sombreador MRTK/Standard también incluye un modo de representación aditivo y un modo de representación personalizado para un control de usuario completo.
Modo de representación | Descripción |
---|---|
Opaca | (Valor predeterminado) Este modo es adecuado para objetos sólidos normales sin áreas transparentes. |
Recorte | Este modo permite la creación de efectos transparentes que tengan bordes duros entre las áreas opacas y transparentes. Sin embargo, no permite utilizar áreas semitransparentes, por lo que la textura será completamente opaca o invisible. Esto resulta útil cuando se quiere crear la forma de materiales mediante transparencias, como en el caso de la vegetación. |
Atenuación | Permite que los valores de transparencia desvanezcan completamente un objeto, incluidos los resaltados especulares o las reflexiones que puede tener. Este modo es útil si desea animar un objeto atenuado dentro o fuera. No es adecuado para representar materiales transparentes realistas, como plástico claro o vidrio, ya que los reflejos y los resaltados también se desvanecieron. |
Transparente | Este modo es adecuado para representar materiales transparentes realistas, como el plástico claro o el vidrio. En este modo, el propio material tomará valores de transparencia (basados en el canal alfa de la textura y el alfa del color de tono). Sin embargo, los reflejos y los resaltados de iluminación seguirán siendo visibles con total claridad, tal y como sucede con los materiales transparentes reales. |
Aditivo | Este es un modo de mezcla aditivo que suma el color de píxel anterior al color de píxel actual. Se trata del mejor modo de transparencia para evitar problemas de ordenación de transparencia. |
Personalizado | Este modo permite controlar manualmente todos los aspectos del modo de representación. Debe usarse únicamente para usos avanzados. |
Modo de selección | Descripción |
---|---|
Desactivado | Este modo deshabilita la selección de caras. El valor de la selección solo debe establecerse como Desactivado cuando se requiera una malla de dos caras. |
Front | Este modo habilita la selección de caras frontales. |
Atrás | (Valor predeterminado) Este modo habilita la selección de caras posteriores. Para mejorar el rendimiento de la representación, habilite la selección de caras posteriores siempre que sea posible. |
Rendimiento
Una de las principales ventajas de usar el sombreador estándar de MRTK sobre el sombreador estándar de Unity es el rendimiento. El sombreador estándar de MRTK es extensible para usar solo las características habilitadas. Sin embargo, el sombreador MRTK Standard también se ha escrito para ofrecer resultados estéticos comparables como el sombreador estándar de Unity, pero a un costo mucho menor. Una manera sencilla de comparar el rendimiento del sombreador es a través del número de operaciones que se deben realizar en la GPU. Por supuesto, la magnitud de los cálculos puede fluctuar por características habilitadas y otras configuraciones de representación. Pero, en general, el sombreador estándar de MRTK realiza un cálculo significativamente menor que el sombreador estándar de Unity.
Ejemplo de estadísticas de sombreador estándar de Unity
Ejemplo de estadísticas de sombreador estándar de MRTK
Nota
Estos resultados se pueden generar seleccionando y viendo un recurso de sombreador en el inspector de Unity y haciendo clic en el botón Compilar y mostrar código .
Iluminación
MrTK/Standard usa una aproximación sencilla para la iluminación. Dado que este sombreador no calcula la corrección física y la conservación de la energía, se representa de forma rápida y eficaz. Blinn-Phong es la técnica de iluminación principal que se combina con Fresnel e iluminación basada en imágenes a una iluminación aproximadamente basada en físicamente. El sombreador admite las siguientes técnicas de iluminación:
Luz direccional
Cuando se utiliza esta técnica, el sombreador respeta la dirección, el color y la intensidad de la primera luz direccional de Unity que esté presente en la escena (si este se habilita). Las luces de punto dinámico, las luces puntuales o cualquier otra luz de Unity no se considerarán en la iluminación en tiempo real.
Armónicos esféricos
El sombreador usará sondeos de luz para aproximar las luces de la escena mediante armónicos esféricos, si está habilitado. Los cálculos armónicos esféricos se realizan por vértice para reducir el costo de cálculo.
Lightmapping
Para la iluminación estática, el sombreador respetará los mapas de luz creados por el sistema Lightmapping de Unity. Simplemente marque el representador como estático (o estático de mapa claro) para usar mapas de luz.
Luz de desplazamiento
- Consulta Mantener el puntero claro
Luz de proximidad
Compatibilidad ligera con la canalización de representación con scripts
MRTK contiene una ruta de actualización para permitir que los desarrolladores usen la canalización de representación de scriptable ligera (LWRP) de Unity con sombreadores MRTK. Probado en el paquete Unity 2019.1.1f1 y Lightweight RP 5.7.2. Para obtener instrucciones sobre cómo empezar a trabajar con LWRP, consulte esta página.
Para realizar la actualización de MRTK, seleccione: Mixed Reality Toolkit -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipeline
Una vez que se produzca la actualización, se modificará el sombreador MRTK/Standard y se deben corregir los materiales magenta (error del sombreador). Para comprobar que la actualización se ha producido correctamente, compruebe la consola de: Activos actualizados/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader para su uso con la canalización de representación ligera.
Compatibilidad con UGUI
El sistema de sombreado estándar de MRTK funciona con el sistema de interfaz de usuario integrado de Unity. En los componentes de la interfaz de usuario de Unity, la matriz de unity_ObjectToWorld no es la matriz de transformación de la transformación local en la que reside el componente Gráfico, sino el de su lienzo primario. Muchos efectos de sombreador MRTK/Estándar requieren que se conozca la escala de objetos. Para resolver este problema, el archivo ScaleMeshEffect.cs
almacena la información de escalado en forma de atributos de canal UV durante la construcción de la malla de la UI.
Tenga en cuenta que, al usar un componente de imagen de Unity, se recomienda especificar "None (Sprite)" para la imagen de origen para evitar que la interfaz de usuario de Unity genere vértices adicionales.
Un canvas dentro de MRTK solicitará la adición de cuando se requiera una ScaleMeshEffect.cs
:
Combinador de texturas
Para mejorar la paridad con el sombreador estándar de Unity por píxel, el empaquetado de canales permite controlar los valores metálico, de suavidad, de emisión y de oclusión. Por ejemplo:
Si usa el empaquetado de canales, solo tendrá que muestrear y cargar una textura en la memoria en lugar de hacerlo con cuatro instancias independientes. Al escribir los mapas de textura en un programa como Substance o Photoshop, puede empaquetarlos manualmente de la siguiente forma:
Canal | Propiedad |
---|---|
Rojo | Metálico |
Verde | Oclusión |
Azul | Emisión (escala de grises) |
Alpha | Suavidad |
O bien, puede usar la herramienta de combinador de texturas de MRTK. Para abrir la herramienta, seleccione: Mixed Reality Toolkit -> Utilidades -> Combinador de texturas que abrirá la ventana siguiente:
Esta ventana se puede rellenar automáticamente seleccionando un sombreador estándar de Unity y haciendo clic en "Autopopulate from Standard Material". O bien, puede especificar manualmente una textura (o un valor constante) por canal rojo, verde, azul o alfa. La combinación de texturas es acelerada por GPU y no requiere que la textura de entrada sea accesible para la CPU.
Documentación adicional sobre características
A continuación se muestran detalles adicionales sobre una serie de detalles de características disponibles con el sombreador MRTK/Standard.
Recorte primitivo
- Consulte Clipping Primitive (Recorte de primitivos).
Contornos de malla
Muchas técnicas de contornos de malla se realizan mediante una técnica de posprocesamiento. El procesamiento posterior proporciona esquemas de calidad excelentes, pero puede ser prohibitivamente costoso en muchos dispositivos Mixed Reality. Puede encontrar una escena que muestre el uso de esquemas de malla en la escena OutlineExamples en MRTK/Examples/Demos/StandardShader/Scenes/
.
MeshOutline.cs
y MeshOutlineHierarchy.cs
se pueden usar para representar un contorno alrededor de un representador de malla. Al habilitar este componente se presenta un paso de representación adicional del objeto que se describe, pero está diseñado para ejecutarse de forma eficaz en dispositivos móviles Mixed Reality y no utiliza ningún proceso posterior. Las limitaciones de este efecto incluyen que no funciona bien en objetos que no son herméticos (o requiere que tengan dos lados) y pueden producirse problemas de ordenación de profundidad en objetos superpuestos.
Los comportamientos de esquema están diseñados para usarse junto con el sombreador MRTK/Standard. Los materiales de contorno suelen ser un color sólido sin iluminar, pero se pueden configurar para lograr una amplia gama de efectos. La configuración predeterminada de un material de esquema es la siguiente:
- Escritura de profundidad: debe deshabilitarse para los materiales de esquema para asegurarse de que el esquema no impide que otros objetos se puedan representar.
- Extrusión de vértices: debe habilitarse para representar el contorno.
- Usar normales suaves: este valor es opcional para algunas mallas. La extrusión se produce moviendo un vértice a lo largo de un normal de vértice, en algunas mallas extruyendo a lo largo de los normales predeterminados provocará discontinuidades en el contorno. Para corregir estas discontinuidades, puede activar esta casilla para usar otro conjunto de normales suavizados que se generan mediante
MeshSmoother.cs
MeshSmoother.cs
es un componente que se puede usar para generar automáticamente normales suavizados en una malla. Este método agrupa vértices en una malla que comparte la misma ubicación en el espacio y, a continuación, calcula los valores normales de esos vértices. Este proceso crea una copia de la malla subyacente y solo se debe usar cuando sea necesario.
- Normales suaves generados a través de
MeshSmoother.cs
. - Normales predeterminados usados, observe los artefactos alrededor de las esquinas del cubo.
Pruebas de galería de símbolos
Compatibilidad con pruebas de galería de símbolos configurables para lograr una amplia gama de efectos. Una de ellas es la prueba de los portales:
Compatibilidad con colores con instancias
Compatibilidad con colores con instancias para proporcionar a miles de mallas con instancias de GPU propiedades de material únicas:
Asignación triplanar
La asignación triplanar es una técnica de asignación de texturas a una malla mediante programación. A menudo se usa en terrenos, mallas sin UV o difíciles de desencapsular formas. Esta implementación admite la proyección del espacio local o global, así como la especificación del suavizado de mezcla y la compatibilidad con mapas normales. Tenga en cuenta que cada textura usada requiere 3 muestras de textura, por lo que se usa con moderación en situaciones críticas de rendimiento.
Extrusión de vértices
Extrusión de vértices en el espacio mundial. Resulta útil para visualizar volúmenes delimitador extruidos o transiciones entre mallas y salidas.
Varios
Casilla para controlar las optimizaciones de albedo. Como operaciones de albedo de optimización se deshabilitan cuando no se especifica ninguna textura albedo. Esto es útil para controlar la carga remota de texturas.
Simplemente active esta casilla:
Se admiten texturas de recorte de píxeles, suavizado de contorno basado en borde local y escalado de mapa normal.