Hoy veremos varios ejemplos de cuadros del juego y analizaremos las técnicas gráficas utilizadas en el juego.
Prefacio
Este es un análisis no oficial del juego. Acabo de analizar la captura de cuadros con RenderDoc . Si desea obtener información de los propios desarrolladores, puede estudiar las diapositivas de la charla en SIGGRAPH de Fabian Bayer . Diapositivas (parte inferior de la página), video (comienza a las 1:58:00).
También puede leer el análisis de gráficos GTA5, realizado por Adrian Correzhe [ traducido al Habré]. Dado que tanto RDR2 como GTA5 son creados por la misma compañía y usan el mismo motor, algunos de los trucos de GTA5 también están presentes aquí.
Otro punto importante es que no soy un programador gráfico experimentado y todavía soy un principiante en este campo. Por lo tanto, mucho no está claro para mí. Si encuentra errores o cosas que pueden mejorarse,escribir a mí . ¡Vamonos!
Analiza el marco
Aquí está nuestro marco principal para el análisis:
El marco se captura en una PC con configuraciones medias.
En juegos como RDR2, es casi imposible explorar todos los movimientos de una sola vez. Su trabajo se lleva a cabo entre varios cuadros. Así que capturé algunos fotogramas, pero el que se muestra arriba será el principal. Contiene muchas propiedades, que incluyen: focos y focos, iluminación direccional (hay muy pocos, pero lo son), edificios, NPC, caballos, árboles, vegetación, nubes, etc. Muestra la mayoría de las técnicas de renderizado utilizadas en el juego.
RDR2 es un juego de mundo abierto, por lo que la transmisión de datos siempre se realiza. En consecuencia, el encuadre comienza con un conjunto de tareas como la creación y eliminación de texturas, escaneos de recursos de sombreado, escaneos aleatorios, actualización de descriptores, búferes, etc.
Mapa de tierra / barro
La suciedad juega un papel importante. Además de ser una mecánica de juego, la suciedad hace que el entorno sea más realista. El juego presenta la textura de las huellas de personas y caballos en un mapa de desplazamiento junto con las texturas de las huellas de las ruedas de los carros. Esta textura acumulada se utiliza para el mapeo de oclusión de paralaje al representar el terreno.
Mapa de tierra:
R16_UNORM
2048x2048 de tamaño
Cielo y nubes
Después de realizar un cálculo de suciedad, el juego trabaja mucho con los cálculos de GPU. Se refieren principalmente al cielo y las nubes. Las nubes, la niebla y la iluminación volumétrica son algunos de los efectos más destacados en RDR2. Puedes aprender más sobre este paso en las diapositivas de Fabian. Él explica todo esto con mucho más detalle que yo.
Mapa del entorno
Los mapas de entorno son la fuente principal de reflexiones RDR2, así como GTA5.
Al igual que GTA5 , RDR2 genera un mapa cúbico del entorno desde la posición de la cámara. El motor del juego genera un delgado GBuffer para un mapa del entorno, similar al utilizado en Far Cry 4 .
Las caras del mapa cúbico del entorno (albedo):
RGBA8_SRGB
Las caras del mapa cúbico del entorno (normal):
RGBA8_UNORM
Bordes de un mapa de entorno cúbico (profundidad):
D32S8
Generar mapas de entorno cúbico en cada cuadro puede ser una tarea muy difícil. RDR2 utiliza optimizaciones para reducir los costos computacionales. Por ejemplo, un juego dibuja solo objetos estáticos y opacos, realiza un truncamiento de eliminación de frustum antes de representar cada cara y dibuja versiones de modelos con un nivel LOD más bajo. Sin embargo, descubrí que la cantidad de polígonos del terreno sigue siendo muy alta para los mapas ambientales.
Después del pase G-Buffer, se genera un mapa de cubos del entorno del cielo utilizando un mapa del cielo paraboloide y texturas de nubes. El siguiente paso es la convolución. Para la iluminación basada en imágenes, el motor RDR2 utiliza aproximación de suma dividida... Este método utiliza un mapa de entorno prefiltrado junto con entornos LUT BRDF. Para filtrar, el juego colapsa el mapa cúbico del entorno y almacena versiones minimizadas en los niveles de textura mip del mapa cúbico.
Antes de realizar el pase de iluminación para un mapa de iluminación cúbico, RDR2 representa una oclusión ambiental horneada a gran escala en otra textura cúbica. El juego utiliza oclusión ambiental en el espacio de la pantalla, pero SSAO solo ayuda a escalas pequeñas. La oclusión ambiental al horno ayuda a oscurecer a mayor escala, como oscurecer terrazas e interiores.
Facetas de cubo de entorno (AO horneado):
R8_UNORM
el juego utiliza renderizado de mosaico diferido para calcular la iluminación de los mapas de entorno . La eliminación de luz y la iluminación se calculan juntas en una pasada del sombreador computacional para cada cara del mapa del entorno. (Gracias a @benoitvimont por ese consejo ). También para la iluminación al horno, el juego utiliza una técnica de mapa de luz mundial de arriba hacia abajo similar a la utilizada en Assassin's Creed III .
Para cada cara del mapa cúbico, RDR2 representa el color final sobre la textura del entorno del cielo. El juego luego filtra el cubo del entorno de la misma manera que el cubo del entorno del cielo.
Mapa del cubo de facetas del entorno (final):
R11G11B10_FLOAT
Además, cuando el jugador está cerca de un edificio, RDR2 carga mapas de entorno ubicados en el interior de los edificios. También hay G-Buffers de mapas de cubos que se transmiten desde el disco.
Caras horneadas del mapa del entorno del cubo (albedo):
BC3_SRGB
(la AO horneada se almacena en el canal alfa)
Las caras horneadas del mapa del entorno del cubo (normales):
BC3_UNORM
Caras al horno de un mapa de entorno cúbico (profundidad):
R16_UNORM
el juego calcula la cobertura de estas cartas y las filtra, como las anteriores. Solo calcula un mapa de entorno horneado a la vez y solo lo recalcula cuando cambia la hora del día. Todos los mapas de entorno se almacenan en una matriz de mapas cúbicos de textura. No se realiza la conversión de un mapa cúbico a un mapa paraboloide doble .
Pase G-Buffer
Esta etapa comienza con un pase preliminar de las profundidades del terreno, y luego el juego representa la escena en G-Buffers.
GBuffer 0 RGB |
GBuffer 0 A |
---|---|
RGBA8_SRGB
- este búfer contiene albedo (color base) en canales RGB. No entiendo muy bien para qué sirven los datos del canal alfa, pero se usan en la etapa de suavizado.
GBuffer 1 RGB |
GBuffer 1 A |
---|---|
RGBA8_UNORM
: Los canales RGB contienen normales y el canal alfa contiene algo relacionado con la tela y el cabello.
GBuffer 2 RGB |
GBuffer 2 A |
---|---|
RGBA8_UNORM
: este objetivo se utiliza para las propiedades del material.
- R: reflectancia (f0)
- G: suavidad
- B: metálico
- A: contiene sombreado (este canal se usará como una máscara de sombra en los pasos siguientes)
GBuffer 3 R |
GBuffer 3 B |
---|---|
RGBA8_UNORM
: El canal rojo contiene cavidades. Hay algunos datos misteriosos en el canal azul nuevamente. Y el canal alfa contiene datos relacionados con el cabello. No pude encontrar nada en el canal verde.
GBuffer 4 RG |
---|
RG16_FLOAT
: Este búfer contiene la velocidad del espacio de la pantalla para la implementación del desenfoque de movimiento.
GBuffer 5 Depth |
GBuffer 5 Stencil |
---|---|
D32S8
: como GTA5, RDR2 usa la z inversa para la profundidad , así como un búfer de plantilla para asignar valores a un grupo específico de mallas.
Otro objetivo se genera a partir de los datos horneados:
GBuffer 6 R |
GBuffer 6 G |
---|---|
Este búfer contiene la misma oclusión ambiental horneada en el canal rojo que en la etapa del mapa ambiental. Pero también hay otros canales en esta textura. El canal verde contiene datos que se asemejan a los datos en el canal azul de GBuffer 3. Nuevamente, no entiendo para qué se utilizan estos datos. En los cuadros capturados, no pude encontrar ningún dato en el canal azul y alfa. Estudiaré esto con más detalle.
Generando mapas de sombras
Después de la etapa G-Buffer, el juego comienza a representar mapas de sombras. Utiliza matrices de texturas 2D para mapas de sombras de fuentes puntuales y matrices de texturas cúbicas para mapas de sombras de fuentes de reflectores.
Algunos juegos de mapas de sombras utilizan una gran textura del atlas de sombras ( por ejemplo, en DOOM ). Una de las ventajas de este método es que el tamaño del mapa de sombras puede variar mucho según la distancia. Con las matrices de texturas, esta flexibilidad se pierde porque todas las texturas de la matriz deben ser del mismo tamaño. RDR2 tiene tres matrices de texturas diferentes para diferentes niveles de calidad. Por ejemplo, los reflectores tienen:
- 512x768 D16 para fuentes distantes
- 1024x1536 D16 ( — )
- 2048x3072 D16 ( / )
Las fuentes puntuales proyectan sombras en todas las direcciones. Para hacer frente a esta tarea, los juegos usan una técnica llamada Mapeo de sombras omnidireccional , en el que la escena se representa en un mapa de profundidad cúbica desde la posición de la cámara. Usando esta técnica, se representan las sombras del fuego y las sombras de la linterna de Arthur. Al igual que los focos, los focos tienen tres matrices diferentes para diferentes configuraciones de calidad.
La mayoría de las fuentes de puntos estáticos en el juego tienen mapas de sombras de cubos horneados.
Por lo tanto, el juego siempre que sea posible usa sombras horneadas y genera un mapa de sombras solo cuando el jugador está cerca de un volumen de luz. Pero en realidad es aún más interesante.
La mayoría de las luces de pared son focos, pero el juego no genera un mapa de sombras omnidireccional para ellos. En cambio, genera un mapa de sombras y copia la memoria de este mapa de sombras en una matriz cúbica del mapa de sombras de fuentes puntuales.
A la izquierda hay un mapa de sombras de fuentes de reflector de tamaño 1024x1536, a la derecha están los mismos datos de imagen en un formato de textura cúbica 512x512
Tenga en cuenta que los z lineales se almacenan en mapas locales de sombras.
Esto explica por qué los desarrolladores no utilizaron un mapa de sombra cuadrado para los focos. El número de píxeles en el mapa de sombras de reflector y el mapa del cubo de origen de puntos debe ser el mismo. Probablemente viste que la imagen correcta está cortada en pedazos. Esto se debe a que el ancho del mapa de reflejos y puntos de sombra es diferente.
También tenga en cuenta que esta textura no cubre 360 grados. Sin embargo, afortunadamente, las fuentes en los edificios generalmente tienen una pared en la parte posterior y las tarjetas de sombra horneadas lo cubren.
Otro punto interesante es que el proceso se invierte. Tome Saint Denis, por ejemplo, una de las ciudades más grandes del juego. El juego genera mapas de sombras omnidireccionales para los focos y copia estos datos en una serie de mapas de sombras de focos. No sé por qué en RDR2 el sombreado se realiza de esta manera. No pude encontrar tales trucos en Internet.
La superposición de sombreado de iluminación direccional en RDR2 se implementa casi igual que en GTA5 . Es un mapeo de sombras en cascada con cuatro cascadas. Cada mosaico de 1024x1024 de una textura de 1024x4096 (con configuraciones de gráficos medias) se usa como una cascada.
Spotlight Shadow Atlas:
R16_UNORM
Etapa de iluminación
Finalmente, es hora de combinar todos estos mapas de entorno, gbuffers, mapas de sombras y ao buffers.
Esta etapa consta de dos pases: el primero para iluminación global (sol / luna), el segundo para fuentes locales.
Pase de iluminación global
El juego presenta un cuadrángulo de pantalla completa para calcular la iluminación direccional, que en nuestro marco es la luz de la luna. La iluminación al horno también se utiliza en el mencionado "mapa de iluminación mundial de vista superior".
Pase de alumbrado local
En este pasaje, el juego presenta una figura esférica de baja poli para volúmenes de fuentes puntuales y un octaedro para volúmenes de fuentes de reflectores. La iluminación se realiza de atrás hacia adelante mediante una combinación de aditivos.
Para evitar llamadas innecesarias al sombreador, el juego utiliza pruebas con restricciones de profundidad, una función opcional OpenGL / D3D11 que se ha convertido en nativa de Vulkan / D3D12. También usa pruebas de plantilla para descartar píxeles que son absorbidos por objetos translúcidos como los cristales de las ventanas. Estos objetos serán renderizados durante un pase directo.
Representación y reflexión del agua.
En esta publicación no hablaré sobre la reproducción del agua, porque merece una publicación separada, pero diré un poco sobre las reflexiones:
- Como se mencionó anteriormente, los mapas ambientales son la principal fuente de reflexiones. Para reflexiones estándar. por ejemplo, para reflejos en ventanas, el juego los usa.
- Los espejos se representan con reflejos planos, en los que la escena se representa nuevamente desde la dirección de la reflexión. Este proceso también se realiza mediante renderizado diferido.
- Los reflejos en el agua usan reflejos en el espacio de la pantalla en combinación con un mapa de reflejos generado al comienzo del marco.
Etapa de sombreado directo
Uno de los inconvenientes de la tubería de renderizado diferido es que no es posible renderizar correctamente materiales translúcidos con GBuffers. Para resolver este problema, el juego renderiza materiales translúcidos de atrás hacia adelante utilizando sombreado directo, como la mayoría de los renderizados diferidos.
Pero un pase directo puede ser costoso:
- , .
, , , . ( ), .
- .
, . - . - (, ) .
- , .
Para poder cambiar entre cortar las caras delantera y trasera, es necesario cambiar el estado del transportador. Y tales cambios pueden ser costosos.
En este punto, hay otro objetivo de renderizado generado para el efecto de floración. Este objetivo almacena el brillo de la floración. Como se ve en la imagen, los objetos translúcidos brillan más intensamente.
Floración de luminancia objetivo:
R8_UNORM
Tenga en cuenta que la floración es más brillante a largas distancias para hacer que las áreas de niebla sean más brillantes.
Postprocesamiento
En esta etapa, se realizan anti-aliasing temporales, floración, desenfoque de movimiento, efecto de profundidad de visión y otros efectos. Planeo dedicar una publicación separada al procesamiento posterior. Por lo tanto, no lo discutiremos particularmente aquí, pero me gustaría decir algunas palabras sobre bloom. Gracias a la iluminación volumétrica, el objetivo principal de renderización ya tiene el brillo de las fuentes de luz.
La implementación de bloom en RDR2 es muy similar a la implementación descrita en el procesamiento posterior de la próxima generación en Call of Duty: Advanced Warfare .
- El objetivo sin valores umbral se toma como entrada,
- Renderizar objetivo de
R11G11B10_FLOAT
nivel 7-mip, - Filtro bilineal de 13 ° orden para disminución de muestreo, filtro de tienda 3x3 para aumento de escala.
El juego luego combina este objetivo filtrado del efecto de floración con el objetivo principal, así como el objetivo de luminancia de la floración.
conclusiones
Hay mucho más que decir, pero no quiero que esta publicación sea demasiado larga. Me gustaría compartir mis conclusiones sobre todo esto, así como algunas rarezas que encontré en el proceso de análisis.
- , — . , . ( , .) bloom: - , , - , . GPU? ?
- , RDR2 . , (, GBuffers). ? ?
- : ( ) . SSAO, SSR, . target SSAO ?
No me malinterpreten, no culpo a nadie (aunque ... estoy un poco frustrado con la baja velocidad de fotogramas), solo trato de descubrir cómo se tomaron esas decisiones. Al final, mucha gente trabajó en este juego sudando . Probablemente no tuvieron tiempo suficiente para optimizar aún más el juego.
Epílogo
¡Eso es todo! RDR2 es un juego de gran apariencia, no solo por los gráficos utilizados, sino también por el arte y la iluminación; Todo parece fenomenal. Me enamoré de la paleta de colores de este juego. Especialmente por la noche, me recuerda cómo Robert Ford cobarde mató a Jesse James, No Country for Old Men y otros westerns de 35 mm.