Tecnología de renderizado de juegos: renderizado directo vs renderizado retrasado vs renderizado directo+ (1)

En este artículo, se analizarán y compararán tres algoritmos de renderizado:

  1. Representación directa
  2. Sombreado diferido
  3. Adelante+ (renderizado frontal y posterior basado en mosaicos)

introducir

renderizado directo

El renderizado directo funciona rasterizando cada objeto geométrico en la escena. Durante el proceso de sombreado, itera a través de cada luz para decidir cómo se ilumina ese objeto geométrico. Esto significa que cada objeto geométrico debe considerarse en la escena. Por supuesto, también podemos optimizar descartando objetos geométricos que están ocluidos o invisibles dentro del campo de visión de la cámara. También podemos optimizar aún más descartando luces que no están dentro del campo de visión de la cámara. Si se conoce el alcance de la luz, podemos realizar una selección de luz frustum antes de renderizar la geometría de la escena. La selección de objetos y la selección ligera frustum solo proporcionan una optimización limitada para la renderización directa, y la selección ligera generalmente no es factible en la renderización directa. Es más común reducir la cantidad de luces en una escena que afectan a los objetos de la escena; por ejemplo, algunos motores gráficos realizan de dos a tres luces por píxel y de tres a cuatro luces por vértice. En el canal de renderizado fijo tradicional proporcionado por OpenGL y DirectX, el número de luces dinámicas activadas en la escena está limitado a 8. Incluso con hardware de gráficos moderno, el canal de renderizado directo se activa antes de que se produzcan problemas perceptibles en la velocidad de fotogramas. a 100.

Sombreado diferido

El sombreado diferido, por otro lado, rasteriza todos los objetos de la escena (no iluminados) en una serie de buffers de textura 2D, que almacenan la información geométrica necesaria en pases de iluminación posteriores.

  • profundidad del espacio de la pantalla
  • superficie normal
  • color difuso
  • Color especular y poder especular.

                                                                         Figura 1               

Estas texturas constituyen el G-Buffer: difusa (arriba a la izquierda), especular (arriba a la derecha), normal (abajo a la izquierda) y profundidad (abajo a la derecha). El factor de resaltado se almacena en el canal alfa de la textura de resaltado (arriba a la derecha).

La combinación de estos búferes de textura 2D también se denomina búfer de geometría o G-Buffer[1].

Si es necesario para la ejecución de iluminación posterior, se puede almacenar otra información en el búfer de textura, pero si cada píxel tiene 32 bits, se requieren al menos 8,29 M de memoria de textura a 1080P.

Una vez generado el G-Buffer, la información geométrica se puede utilizar para calcular la información de iluminación en el paso de iluminación. En el paso de iluminación, cada fuente de luz se ejecuta como un objeto geométrico y cada píxel que cruza la geometría representada por la luz Se utiliza la ecuación de iluminación deseada para dar sombra.

En comparación con el renderizado directo, la ventaja del renderizado diferido es que los costosos cálculos de iluminación solo se calculan una vez para cada fuente de luz y los píxeles que cubre. Cuando se utiliza hardware moderno para renderizar solo objetos opacos, la tecnología de renderizado diferido puede manejar 2500 luces de escena dinámicas con una resolución de 1080P sin problemas de velocidad de fotogramas.

Una desventaja del renderizado diferido es que solo los objetos opacos se pueden rasterizar en el G-Buffer. La razón es que varios objetos translúcidos pueden cubrir el mismo píxel de la pantalla y cada píxel en el G-Buffer solo puede almacenar un valor. En el pase de iluminación, el valor de profundidad, la normal de la superficie, el color difuso y el color de resaltado son muestreados por el píxel de la pantalla actual para la iluminación. Debido a que cada G-Buffer solo puede muestrear un valor, los objetos transparentes no pueden admitirse en el pase de iluminación. Para solucionar este problema, la geometría transparente se debe representar utilizando técnicas estándar de renderizado directo, que pueden limitar la cantidad de objetos transparentes en la escena o la cantidad de luces dinámicas. Una escena que contiene sólo objetos opacos puede manejar aproximadamente 2000 luces dinámicas sin problemas de velocidad de fotogramas.

Otra desventaja del renderizado diferido es que solo se puede simular un modelo de iluminación en el pase de iluminación, ya que solo se puede vincular un sombreador de píxeles al renderizar la geometría de la luz. Por lo general, esto no es un problema cuando se usa un ubershader (poner todos los cálculos en un sombreador). Sin embargo, si su canal de renderizado utiliza diferentes modelos de iluminación en varios sombreadores de píxeles, cambiar los canales de renderizado para realizar un renderizado diferido puede resultar problemático.

Adelante+

Forward+[2][3], también conocido como renderizado directo basado en mosaicos, es una tecnología de renderizado que combina el renderizado directo y la selección de luz basada en mosaicos para reducir la cantidad de luces en el proceso de sombreado. Forward+ consta principalmente de dos etapas:

  • sacrificio ligero
  • renderizado directo

                                                                         Figura 2

  • Figura 2, Forword+iluminación, iluminación predeterminada (izquierda), mapa de calor de iluminación (derecha). Los colores en el mapa de calor representan la cantidad de luces que afectan el mosaico actual. Negro significa que no hay luces, azul significa que contiene de 1 a 10 luces y verde significa que contiene de 20 a 30 luces.

El primer paso del renderizado Forward+ es dividir las luces en listas de mosaicos usando una cuadrícula de tamaño uniforme en el espacio de la pantalla.

El segundo paso utiliza la representación directa estándar para sombrear cada objeto. En lugar de atravesar cada luz dinámica de la escena, la posición del espacio de la pantalla del píxel actual se utiliza para buscar la lista de luces de la cuadrícula actual calculada en el paso anterior. En comparación con el renderizado directo estándar, la selección de luz puede aportar mejoras significativas en el rendimiento porque reduce en gran medida la cantidad de luces redundantes que deben iterarse para iluminar correctamente un píxel. Tanto los objetos opacos como los transparentes se pueden manejar usando un comportamiento similar sin una penalización significativa del rendimiento, y Forward+ admite de forma nativa los modelos multimaterial y multiluz.

Debido a que Forward+ funciona con renderizado directo estándar, Forward+ se puede integrar en motores gráficos que se crearon originalmente utilizando renderizado directo. Forward+ no utiliza B-Buffer y no tiene restricciones en el renderizado retrasado. Tanto los objetos opacos como los transparentes se pueden renderizar usando Forward+. Utilizando hardware de gráficos moderno, las escenas que contienen entre 5000 y 6000 luces dinámicas se pueden renderizar en calidad HD (1080P).

definición

En este artículo, es importante definir algunos términos para facilitar la comprensión. Si está familiarizado con esta terminología básica, puede omitir esta parte directamente.

Escena

Escena se refiere a un objeto jerárquico anidado que se puede representar. Por ejemplo, todos los objetos estáticos que se pueden renderizar se combinarán en una escena. Cada objeto renderizable independiente se llama Nodo (nodo de escena). Cada nodo de escena apunta a un objeto renderizable (como una malla). La escena completa puede ser La La referencia del nodo de nivel superior de una escena se denomina nodo raíz. Dado que el nodo raíz también es un nodo de escena, las escenas se pueden anidar para crear árboles de escenas más complejos que contengan objetos dinámicos o estáticos.

Aprobar

Un Pase se refiere a una operación utilizada para realizar un paso de la tecnología de renderizado. Por ejemplo, un paso opaco itera sobre todos los objetos de la escena y representa solo los objetos opacos de la escena. Transparent Pass itera sobre todos los objetos de la escena y solo representa objetos transparentes en la escena. Un Pass también se puede utilizar para realizar operaciones más comunes, como copiar recursos de GPU o implementar un sombreador de cálculo.

Técnica

La técnica es una combinación de múltiples pases. Se deben ejecutar múltiples pases en un orden determinado para implementar un algoritmo de renderizado.

Estado del oleoducto

Pipeline State se refiere a la configuración de la canalización de renderizado antes de que se renderice el objeto. Un objeto Pipeline State encapsula el siguiente estado de renderizado:

  • Sombreador: sombreador de vértices (vertex shder), sombreador de subdivisión (sombreador de teselación), sombreador de geometría (sombreador de geometría) y sombreador de píxeles (sombreador de píxeles).
  • Estado del rasterizador: modo de relleno de polígono, modelo de selección, tijera, ventana gráfica
  • estado de mezcla
  • estado de profundidad/plantilla
  • renderizar objetivo

Entre ellas, diferentes API de renderizado, como dx12, introducirán algunos estados de canalización diferentes.

renderizado directo

El renderizado directo es una técnica de renderizado que normalmente solo tiene dos pasadas:

  • Pase opaco
  • Pase transparente

Opaque Pass renderizará todos los objetos opacos. Idealmente, la escena debería ordenarse de adelante hacia atrás para reducir la sobredifusión. La mezcla no se realiza en pases opacos.

El Pase de Transparencia renderizará todos los objetos transparentes. Idealmente, para fusionar correctamente, la escena debe ordenarse de atrás hacia adelante (en relación con la cámara). En este pase, la combinación alfa debe estar activada y el material translúcido utilizado se puede usar con Los píxeles que se han renderizado en el destino de renderizado se combinan correctamente.

En el renderizado directo, todas las luces se ejecutan en el sombreador de píxeles junto con otras instrucciones de sombreado.

Renderizado diferido

El renderizado diferido es una tecnología de renderizado que consta de tres pasos principales:

  • Pase de geometría
  • Pase de iluminación
  • Pase transparente

El primer paso es un paso de geometría similar al paso opaco del renderizado directo. En este paso solo se renderizan objetos opacos. La diferencia es que el paso de geometría no realiza ningún cálculo de iluminación, solo genera datos de geometría y materiales al introducido previamente. en G-Buffer.

En el paso de iluminación, el volumen geométrico que representa la luz y la información del material en el G-Buffer se utilizan para calcular la iluminación de píxeles rasterizados.

El último Pase es un Pase transparente, que es exactamente el mismo que el Pase medio transparente del renderizado directo. Debido a que la representación diferida no admite materiales transparentes, los objetos transparentes deben representarse en un Pase separado utilizando la representación directa estándar.

Adelante+

Forward+ (también conocido como renderizado directo basado en mosaicos) es una tecnología de renderizado que consta de tres pasos principales:

  • Pase de sacrificio ligero
  • Pase opaco
  • Pase transparente

Como se mencionó en la introducción anterior, el paso de eliminación de luz requiere clasificar las luces dinámicas en mosaicos en el espacio de la pantalla. Se utiliza una lista de índice de luz para indicar qué índices de luz (de la lista de luces global) cubren los mosaicos de la pantalla. En este paso, se generarán dos listas de índices claros:

  • Lista de índice de luz opaca
  • Lista de índice de luz transparente

Las listas de índices de luz opacas se utilizan para representar geometría oscurecida y las listas de índices de luz transparentes se utilizan para representar geometría transparente.

Opaque Pass y Transparent Pass son lo mismo que el renderizado directo estándar. A diferencia de atravesar todas las luces dinámicas en la escena, el renderizado Forward+ solo atravesará las luces del mosaico en el espacio de la pantalla donde se encuentra el fragmento actual (píxel).

Una luz se refiere a uno de los siguientes tipos de luces:

luz

Iluminación se refiere a uno de los siguientes tipos de luces:

  • punto de luz
  • Destacar
  • luz direccional

Las técnicas de renderizado descritas en este artículo admiten los tres tipos de luz, pero no admiten luces de área. Se simula que las luces puntuales y los focos emiten hacia afuera desde un punto, y se considera que las luces direccionales emiten luz desde un punto en el infinito, con la misma dirección en todas partes. Tanto las luces puntuales como los focos tienen un alcance limitado. Más allá de este rango, la intensidad caerá a 0. La disminución de la intensidad de la luz se llama atenuación. Una fuente de luz puntual se describe como una bola, un foco como un cono y una luz direccional como un quad de pantalla completa.

Supongo que te gusta

Origin blog.csdn.net/Kaitiren/article/details/131639118
Recomendado
Clasificación