¿Qué estás buscando?
Engine & platform

Experimentando con Shader Graph: Hacer más con menos

RINALDO TJAN / UNITY TECHNOLOGIESContributor
Feb 25, 2021|12 minutos
Experimentando con Shader Graph: Hacer más con menos
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.

Puede mejorar la eficiencia del tiempo de ejecución de su sombreador sin sacrificar la calidad de sus gráficos al empaquetar la información del material de renderizado basado físicamente (PBR) en un solo mapa de textura y colocarlo en capas en un sombreador compacto. Mira este experimento.

Este experimento funciona tanto en elUniversal Render Pipeline(URP) como enel High Definition Render Pipeline(HDRP). Para aprovechar al máximo este artículo, debes tener cierta familiaridad con Shader Graph. Si eres nuevo en Shader Graph, explora nuestros recursos para obtener unaintroducciónymás detallessobre esta herramienta para crear sombreadores visualmente.

Cuando se trabaja con recursos artísticos en un entorno tipo terreno, generalmente se prefieren múltiples capas de material que se pueda colocar en mosaico, ya que producen mejores resultados de combinación. Sin embargo, el costo del rendimiento de la GPU de múltiples muestras de textura y el crecimiento del uso de memoria con cada capa agregada al sombreador pueden ser prohibitivos para algunos dispositivos e ineficientes en general.

Con este experimento me propuse:

  • Haz más con menos
  • Minimice el consumo de memoria y sea frugal con el muestreo de texturas al representar un material PBR
  • Minimizar las instrucciones del sombreador
  • Realizar la combinación de capas con un mínimo de canales de color de vértice/mapa de salpicaduras
  • Amplíe la funcionalidad del mapa de salpicaduras/color de vértice para obtener funciones adicionales

Si bien el experimento logró sus objetivos, tuvo algunas salvedades. Tendrás que establecer tus prioridades de acuerdo a las demandas de tu propio proyecto para determinar qué compensaciones son aceptables para ti.

1. Material PBR con una sola textura

Antes de realizar las capas, lo primero que hay que hacer es determinar el empaque del material PBR. El material PBR generalmente viene con los parámetros de Albedo (Color base), Máscara de suavidad, Oclusión ambiental, Metalicidad y Normal definidos.

Normalmente, los cinco mapas se representan en tres mapas de textura. Para minimizar el uso de texturas, decidí sacrificar el metal y la oclusión ambiental para este experimento.

Los mapas restantes (Albedo, Suavidad y Definición Normal) se representarían tradicionalmente mediante al menos dos mapas de textura. Para reducirlo a un solo mapa se requiere un preprocesamiento de cada canal individual.

Material PBR lleno de textura

El resultado final del material PBR empaquetado en una sola textura. Rojo = dHdu (Derivadas de altura relativa a la dirección U) para la definición normal#. Verde = dHdv (Derivadas de altura relativa a la dirección V) para la definición normal#. Azul = Tono de escala de grises lineal que representa el albedo (color reconstruido en el sombreador). Alfa = Mapa de suavidad lineal (mapa de suavidad estándar). Nota: La textura se importa a Unity con sRGB sin marcar y comprimida con formato BC7. Al portar a otras plataformas, cambie al formato de textura de 4 canales equivalente compatible con la plataforma.

Procesando los mapas

Albedo

El albedo normalmente se define como una textura RGB; sin embargo, muchos materiales similares al terreno (roca, arena, barro, hierba, etc.) consisten en una paleta de colores limitada. Puedes aprovechar esta propiedad almacenando Albedo como un degradado en escala de grises y luego reasignándolo en color en el sombreador.

No existe un método establecido para convertir el albedo RGB en un gradiente de escala de grises. Para este experimento, el albedo en escala de grises se creó a través del enmascaramiento selectivo de los canales del mapa de albedo original y la oclusión ambiental; para que coincida con el color prominente en la reconstrucción del color del sombreador, simplemente calcule visualmente cualquier ajuste manual.

Coloración resaltada y oscura con ajuste de contraste de rampa para la reconstrucción de albedo.

Suavidad

La suavidad se considera muy importante para la definición del material PBR. Para definir la suavidad con mayor precisión, tiene su propio canal.

Se agregó un multiplicador simple a la suavidad del sombreador para lograr cierta variación en el material.

Multiplicador de suavidad

Definición normal

El mapa normal es importante para mostrar las características detalladas de una superficie. Un material PBR típico utiliza un mapa normal del espacio tangente. En este experimento, elegí un mapa de derivadas preconvertidas utilizando un marco de gradiente de superficie por las razones que se detallan a continuación. (Consulteel marco de gradiente de superficie de Morten Mikkelsen para obtener más información).

Para preconvertir mapas normales del espacio tangente a derivadas, utilice esta acción de Photoshop.

El uso de un mapa de derivadas preconvertido tiene varias ventajas:

  • Se puede convertir directamente en gradiente de superficie, utilizando menos instrucciones que un mapa normal de espacio tangente estándar, que requiere la conversión de derivadas en el sombreador.
  • Se puede almacenar en dos canales (dHdu y dHdv), lo que resulta en un menor consumo de memoria y caché de textura en tiempo de ejecución.
  • No requiere reconstrucción del canal azul en el sombreador, lo cual es típico cuando se procesan mapas normales del espacio tangente, ya que el marco de gradiente de superficie se encarga de la reconstrucción normal (menos instrucciones del sombreador)
  • Funciona correctamente cuando se ajusta en Photoshop (es decir, fusionando, enmascarando o reduciendo la intensidad) y no requiere renormalización. Por ejemplo, para reducir la intensidad, simplemente mezcle el mapa con RGB(128,128,0).

En combinación con el marco de gradiente de superficie, las ventajas incluyen además:

  • La información de relieve normal se puede combinar y componer en el sombreador de la misma manera que la combinación/composición de albedo, con el resultado correcto.
  • Aumentar, reducir y revertir las contribuciones de los bumps es trivial y preciso.

Pero las derivadas preconvertidas del mapa normal del espacio tangente también tienen algunas desventajas:

  • Al utilizar la conversión de Photoshop, la definición normal se fija en un ángulo mayor a 45 grados para equilibrar la precisión en una textura de 8 bits.
  • Los artistas están acostumbrados a trabajar con mapas normales de espacio tangente y requieren que los mapas se conviertan previamente a través de Photoshop como parte de su flujo de trabajo.

Nota: La sujeción en un ángulo mayor a 45 grados no se aplica a la conversión de derivadas basada en sombreadores.

Dependiendo de su caso de uso, la limitación puede tener un efecto mayor o menor. En este experimento, una dirección normal menor a 45 grados no tiene un impacto negativo notable en el resultado final. De hecho, en este caso proporciona un beneficio al reducir el reflejo no deseado desde la dirección normal extrema.

Una comparación de una textura de mapa de derivadas preconvertidas y una textura de mapa normal de espacio tangente.
Diferencias en las pruebas de estrés entre las derivadas preconvertidas y el mapa normal del espacio tangente. Observe que la protuberancia esférica presenta algunos artefactos debido a la sujeción de 45 grados en el mapa de derivadas preconvertidas.
Gráfico
Gráfico
Gráfico

El proceso completo de desembalaje

Gráfico

El subgráfico completo para descomprimir la textura PBR compacta y generar albedo coloreado, suavidad y gradiente de superficie.

Nota: La conversión del gradiente de superficie a Normal se realiza fuera del Subgráfico para que el material se pueda combinar fácilmente en función de la salida de UnpackedSubGraph.

Materiales
Materiales
2. Colocación del material en capas

Para este experimento, elegí un método de capas basado en niveles en una reasignación de un solo canal. El subgráfico realiza cinco interpolaciones lineales (más la base, formando seis capas).

Hay muchas formas de combinar los pesos de las capas. Este método tiene la simplicidad de una única entrada vectorial, lo que se adapta al objetivo del experimento. Esto permitió realizar muchas capas sin quemar múltiples canales en mapas de salpicaduras o canales de vértices.

La desventaja de este método es que no se puede controlar el peso de la contribución de una capa individual. La mezcla siempre será una transición desde la capa anterior. Dependiendo del caso de uso, esto puede ser un factor limitante en comparación con una combinación tradicional por canal.

Gráfico

El subgráfico para reasignar un solo canal para representar las seis capas.

El subgráfico que se muestra arriba está predefinido para seis capas de combinación basadas en niveles. Para crear más capas, divida 1 por la cantidad deseada de capas fusionadas, reste 1 y luego reasigne cada capa según ese rango de valores.

Por ejemplo, para un material de mezcla de nueve capas, el rango de reasignación de cada capa es 1/(9-1) = 0,125.

Tenga en cuenta que al dividir el canal único en porciones más pequeñas, tendrá menos rango de sombreado.

Capas
Gráfico
Materiales
3. Ampliar la funcionalidad del material

La combinación de capas requiere solo un único canal (el canal del vértice rojo). Los tres canales de vértice restantes ofrecen funcionalidades adicionales. El gráfico de sombreado final produce resultados utilizando los canales de vértice restantes.

En este experimento, la pintura de vértices se realizó dentro de Unity Editor usando Polybrush (disponible en el Administrador de paquetes). Paleta de colores Vertex Paint sugerida para este sombreador.

Rojo: Se utiliza para ponderar la contribución de la capa. Demostración de pintura del canal de vértice rojo

Verde: Establece la propiedad de gradiente de superficie para voltear, reducir o agregar una contribución de relieve normal (reasignada a -1 y 1).

  • 0 invierte el golpe normal (-1)
  • El valor 0,5 pone a cero la protuberancia normal (0)
  • 1 establece la protuberancia normal en el valor original (+1).

Demostración de pintura del canal de vértice verde

Azul: Controla la suavidad y la escala de relieve del gradiente de la superficie para crear una apariencia de agua húmeda.

  • 0 = sin alteración
  • 255 = máxima suavidad y mapa normal plano (aspecto húmedo)

Demostración de pintura del canal de vértice azul

Alfa: Controla el peso de la capa Albedo, estableciendo el color base en blanco, con la contribución basada en el eje y de la normal de la superficie. No altera la suavidad y aprovecha la suavidad y la propiedad de relieve de la capa superficial original.

  • 0 = sin nieve
  • 255 = nieve sólida

Pintura del canal del vértice alfa combinada con canales anteriores para mostrar cómo todas las capas interactúan con la nieve.

Los resultados combinados de los diferentes canales de pintura de vértices:

Puede ajustar el método de combinación de sombreadores y las configuraciones para las distintas funcionalidades de canal de vértice/mapa de salpicaduras según los requisitos de su proyecto.

4. Comparación de rendimiento

El propósito de este experimento fue ampliar la funcionalidad del Shader Graph minimizando los recursos. La textura fue preprocesada y descomprimida, pero ¿hay una recompensa en la eficiencia del tiempo de ejecución?

Los perfiles de rendimiento muestran la eficiencia que produjeron estos esfuerzos.

Se creó un sombreador de mezcla estándar de seis capas para compararlo con el sombreador de mezcla compacto de seis capas. Ambos sombreadores se crearon utilizando un método de fusión idéntico con las mismas funcionalidades. La principal diferencia es que el sombreador estándar utiliza tres texturas diferentes para representar una sola capa.

Para crear el perfil, se representó una única malla en la pantalla con material de mezcla utilizando Universal Render Pipeline en la plataforma de destino.

Memoria móvil y perfil de rendimiento

Compresión de texturas para dispositivos móviles (Android):

PBR estándar con Albedo, Máscara y mapa Normal a 1024x1024 para dispositivos móviles:

  • Mapa de albedo 6x ASTC 10x10 = 6x 222,4 KB
  • Mapa de máscara 6x ASTC 8x8 = 6x 341,4 KB
  • Mapa normal 6x ASTC 8x8 = 6x 341,4 KB

Uso total de memoria de textura 5,431 MB

PBR compacto a 1024x1024 para dispositivos móviles:

  • Textura PBR empaquetada 6x ASTC 8x8 = 6x 341,4 KB

Uso total de memoria de textura 2.048 MB

Con el material compacto de seis capas, hay aproximadamente un 62% menos de consumo de memoria de textura en dispositivos móviles (Android), un ahorro de más de la mitad. Móvil Android/Vulcan con Adreno 630 (Snapdragon 845); resultados del perfil Snapdragon:

  • Aproximadamente un 70% menos de memoria de textura leída en tiempo de ejecución.
  • El estándar tardó 9971020 relojes en renderizarse.
  • Se necesitaron 6951439 relojes para renderizar Compact.

El material compacto se reproduce en pantalla aproximadamente un 30% más rápido. Resultado del perfil de Snapdragon Profiler.

Perfil de memoria y rendimiento de la PC

PBR estándar con Albedo, Máscara y mapa Normal a 1024x1024:

  • Mapa de albedo 6x DTX1 = 6x 0,7 MB
  • Mapa de máscara 6x DXT5/BC7 = 6x 1,3 MB
  • 6x Mapa normal DXT5/BC7 = 6x 1,3 MB Uso total de memoria de textura 19,8 MB

PBR compacto a 1024x1024:

  • Textura PBR empaquetada 6x BC7 = 6x 1,3 MB

Uso total de memoria de textura 7,8 MB

El material compacto de seis capas utiliza un 60% menos de consumo de memoria de textura en la PC (ahorro de más de la mitad).

Computadora portátil con Radeon 460 Pro renderizada a 2880x1800; resultados del perfil RenderDoc:

  • Dibuje opacos para una mezcla estándar de 6 capas: 5,186 ms.
  • Dibuje opacos para una mezcla compacta de 6 capas: 3,632 ms. El material compacto se renderiza en pantalla aproximadamente un 30 %* más rápido. *El valor del perfil RenderDoc fluctúa; el 30 % es un promedio de muestras.

PC de escritorio con renderizado nVidia GTX 1080 a 2560x1440; resultados del perfil nSight:

  • Render Opacos para material estándar de 6 capas: 0,87 ms
  • Render Opaques para material compacto de 6 capas: 0,48 ms

El material compacto se reproduce en pantalla aproximadamente un 45 % más rápido. Resultados de elaboración de perfiles de nSight.

Perfil de rendimiento de la consola

En PlayStation 4, el uso de material compacto produce un ahorro de memoria del 60 %, idéntico al de PC, ya que la PS4 utiliza la misma compresión.

Representación base de PS4 a 1920 x 1080; resultados del perfil de Razer:

  • Render Opacos para material estándar de 6 capas: 2,11 ms
  • Render Opaques para material compacto de 6 capas: 1,59 ms

El material compacto se reproduce en pantalla aproximadamente un 24,5 % más rápido.

Resultado de la creación del perfilador Razor de PS4.

En resumen, el uso de un sombreador PBR compacto de seis capas ofrece una ganancia de rendimiento y un ahorro significativo de memoria. La variación del rendimiento de la GPU es interesante pero esperada, ya que descomprimir el material consume más ALU que muestrear más texturas.

Descargar el proyecto de muestra

Este proyecto de muestra con gráficos de sombreado y subgráficos se puede descargar aquí:

[DESCARGAR AQUÍ], Unity 2020.2.5f1 con HDRP 10.3.1

[DESCARGAR AQUÍ], Unity 2020.2.5f1 con URP 10.3.1

[DESCARGAR AQUÍ], Acción de Photoshop para preconvertir el mapa normal del espacio tangente a derivadas.

Llevar

Captura de pantalla de la versión Universal Render Pipeline del proyecto.

Los componentes principales de este experimento son:

  • Gráfico de sombreado para material personalizado
  • Derivados preconvertidos
  • Marco de gradiente de superficie
  • Reconstrucción del color del albedo
  • Mezcla de capas de un solo canal
  • Técnica de combinación UpVector, suavidad y control de relieve mediante combinación de canales de vértice

Este experimento muestra cómo se puede utilizar Shader Graph para producir gráficos hermosos que también sean eficientes. Con suerte, este ejemplo puede inspirar a artistas y desarrolladores a superar los límites estéticos con sus proyectos de Unity.

Acerca del autor

Rinaldo Tjan (director de arte técnico, I+D, equipo Spotlight) es un artista 3D en tiempo real con una pasión extrema por los sistemas de iluminación y renderizado en tiempo real.

Habiendo comenzado su carrera en la época de PlayStation 2, tiene más de una década de conocimiento del flujo de trabajo de un artista de principio a fin, desde la texturización hasta la creación de la escena renderizada final. Antes de unirse a Unity Technologies, ayudó a entregar juegos AAA como BioShock 2, La Oficina: XCOM desclasificadoy Mafia III.

Actualmente trabaja con clientes de Unity para ayudarlos a ampliar sus proyectos y alcanzar su verdadero potencial utilizando Unity, al tiempo que ayuda a impulsar el desarrollo interno y los estándares de las funciones de renderizado de Unity.