Cómo vencen los motores modernos el sobredibujado del follaje
Por Oleg Sidorkin, CTO y cofundador de Cinevva

Un bosque es una de las peores cosas que se le puede pedir renderizar a una GPU. Cada hoja es un cuadrilátero texturizado recortado mediante una máscara alfa. Decenas de esos cuadriláteros se apilan unos sobre otros a lo largo de cada rayo de visión. El rasterizador no tiene forma de saber de antemano qué fragmentos superarán la prueba alfa, por lo que la optimización estándar de Z temprana que aligera las escenas opacas queda desactivada en su mayor parte. El resultado es que un solo píxel de la pantalla puede ejecutar el shader completo de las hojas 10 o 15 veces antes de completar el fotograma. Eso es el sobredibujado del follaje, y es el componente más costoso de un fotograma de mundo abierto en cualquier juego publicado durante la última década.
La buena noticia es que es un problema resuelto. No en el sentido de que alguien lo haya arreglado con un único truco, sino en el de que existe un conjunto de siete u ocho técnicas que, combinadas, reducen el sobredibujado efectivo de 8-15x en un bosque denso a 1-2x. Todos los motores modernos incluyen alguna versión de este conjunto. Veamos qué contiene, por qué existe cada componente y cuáles son las referencias canónicas de cada uno.
1. Por qué el sobredibujado del follaje es tan costoso
En una escena opaca típica, la GPU realiza un rechazo temprano por profundidad: antes incluso de que se ejecute el shader de píxeles, el hardware consulta el búfer de profundidad existente y omite los fragmentos que ya están detrás de algo. Esto es prácticamente gratuito y es lo que mantiene bajo control el coste de la geometría densa.
El follaje con prueba alfa rompe este proceso. El shader de fragmentos tiene que ejecutarse de verdad para evaluar la textura alfa y llamar a discard (o clip) en los píxeles excluidos por la máscara. El hardware no puede saber si se descartará un fragmento hasta después de ejecutar el shader, por lo que, en la mayoría de las GPU, usar discard en cualquier parte de un shader desactiva por completo la Z temprana para esa llamada de dibujo. En las GPU basadas en mosaicos (dispositivos móviles, serie M y algunas consolas), puede desactivar Hi-Z y la compresión de profundidad para todo el fotograma. El shader de píxeles se ejecuta una vez por cada triángulo que cubre un píxel, y la mayoría de esas evaluaciones terminan en un descarte.
Apila 10 cuadriláteros de hojas frente a un solo píxel de la pantalla y el shader de las hojas se ejecutará 10 veces. Multiplícalo por 4 millones de píxeles y el coste será brutal. El artículo de Marco Salvi To Early-Z, or Not To Early-Z es la introducción más accesible a por qué sucede esto en el nivel del hardware, y es el lugar adecuado para empezar si nunca te lo habías planteado.

2. La prepasada de profundidad para geometría enmascarada
La mayor mejora individual, y la técnica que incluyen todos los motores modernos, consiste en dividir el dibujado del follaje en dos pasadas. La primera pasada solo escribe la profundidad, con un shader mínimo que realiza la prueba alfa, descarta los píxeles enmascarados y no escribe nada más. La segunda pasada renderiza el material completo con la prueba de profundidad configurada como «igual» y la escritura de profundidad desactivada. Ahora, cada píxel visible sombrea la BRDF completa exactamente una vez, sin importar cuántos cuadriláteros de hojas haya apilados detrás.
Esto puede parecer el doble de trabajo porque se procesan los mismos triángulos dos veces, pero el shader de la prepasada es tan barato —una muestra de textura, un descarte y una escritura de profundidad— que el ahorro en la pasada principal supera con creces el coste adicional. En un bosque denso, la pasada principal pasa de ejecutar el shader completo de las hojas entre 10 y 15 veces por píxel a ejecutarlo exactamente una vez.
Unreal, Frostbite, Decima y las ramas modernas de Rage y Dunia hacen esto. También es la razón principal por la que los materiales enmascarados siguen siendo más baratos que los materiales translúcidos en cualquiera de estos motores.
Análisis en profundidad:
- Pettineo, To Early-Z, or Not To Early-Z (el artículo canónico sobre cómo interactúa
discardcon Hi-Z y la Z temprana). - Wihlidal, Optimizing the Graphics Pipeline with Compute (GDC 2016, la arquitectura de Frostbite de prepasada de profundidad y descarte dirigido por la prepasada).
- Sanders, Between Tech and Art: The Vegetation of Horizon Zero Dawn (GDC 2018, con el renderizado de follaje en dos pasadas de Decima).
- Persson, A couple of notes about Z (sigue siendo una de las explicaciones más claras de la prueba de profundidad «igual» y de la rentabilidad de una prepasada).
3. LOD agresivos e impostores octaédricos
La segunda mayor mejora consiste en no dibujar las hojas en absoluto cuando no hace falta. Los recursos de follaje incluyen varios niveles de LOD. El más cercano es la malla completa con tarjetas individuales para cada hoja. A media distancia, las hojas se agrupan en tarjetas compuestas más densas —un grupo de 30 hojas se convierte en una tarjeta texturizada con la misma silueta—. Más allá de un umbral de distancia, el árbol entero se convierte en un impostor: una pequeña pieza de geometría texturizada con vistas prerenderizadas del árbol desde múltiples ángulos.
El formato moderno es el impostor octaédrico: una pieza geométrica de 8 caras texturizada con un atlas de vistas capturadas desde puntos de una esfera mediante mapeado octaédrico. Durante la ejecución, el shader elige las dos o tres vistas prerenderizadas más cercanas según la dirección de la cámara y mezcla entre ellas. El resultado es un sustituto de pocos triángulos que parece tridimensional desde cualquier ángulo y que puede tener sombreado correcto, mapas de normales e incluso animación por viento. La implementación de Ryan Brucks, originalmente un plugin de la comunidad y ahora parte de Unreal, es la referencia. Los bosques de mil millones de árboles de Microsoft Flight Simulator son esencialmente impostores octaédricos en todas partes salvo cerca de la cámara.
La mayor ventaja estructural es que los impostores son opacos o casi opacos a distancia. La tarjeta compuesta por 30 hojas es un solo cuadrilátero enmascarado en lugar de 30. El impostor del árbol entero tiene unas pocas caras, no miles. El sobredibujado a larga distancia se reduce a casi nada.
Análisis en profundidad:
- Brucks, Octahedral Impostors (la referencia canónica, con las matemáticas y la implementación para UE).
- Halen, Octahedral Impostors in Unreal Engine (el flujo de trabajo integrado en UE).
- Häggström, Real-Time Rendering of Vegetation (una tesis clara que cubre las cadenas de LOD, los impostores y las matemáticas subyacentes).
- Crytek, SpeedTree integration in CryEngine 3 (GPU Gems 3, aún la mejor introducción a las cadenas de LOD para árboles).
4. Descarte de clústeres gestionado por GPU
Incluso con una prepasada de profundidad, la propia prepasada tiene un coste: todavía debe procesar cada triángulo de cada árbol visible —o potencialmente visible—. Los motores modernos reducen ese coste mediante el descarte de clústeres gestionado por GPU, que elimina grupos enteros de triángulos antes de que lleguen al rasterizador.
La canalización funciona así: cada malla se divide previamente en clústeres de 64 o 128 triángulos con una caja delimitadora ajustada y un cono de normales. Durante el renderizado, un shader de cómputo recorre la lista de instancias, comprueba cada instancia contra el frustum, después comprueba contra el frustum cada clúster de cada instancia visible y, por último, realiza una prueba de oclusión Hi-Z de cada clúster superviviente contra la pirámide de profundidad del fotograma anterior. Las ramas completas de los árboles que quedan ocultas detrás de una colina o delante de otro árbol se descartan antes de que se ejecute ningún shader de vértices. El resultado es una lista compacta de argumentos del tipo «dibuja estos clústeres», enviada directamente a una única llamada DrawIndirect.
Esto es lo que permite renderizar un bosque de 10 000 árboles en milisegundos en lugar de segundos. La charla de Ubisoft sobre Assassin's Creed Unity presentó esta canalización en un entorno de producción —entre un 20 y un 40 % de triángulos descartados, entre un 30 y un 80 % de triángulos de sombras descartados y 10 veces más instancias en pantalla que en la generación anterior—, y la charla de Wihlidal sobre Frostbite la llevó aún más lejos. Nanite de UE5 es el resultado visible de esta evolución: descarte de clústeres hasta el nivel del píxel.
Análisis en profundidad:
- Haar y Aaltonen, GPU-Driven Rendering Pipelines (SIGGRAPH 2015, la charla fundacional sobre Assassin's Creed Unity).
- Wihlidal, Optimizing the Graphics Pipeline with Compute (GDC 2016, la prepasada gestionada por GPU de Frostbite).
- Karis, Stubbe y Wihlidal, A Deep Dive into Nanite Virtualized Geometry (SIGGRAPH 2021, descarte de clústeres con granularidad de meshlet).
- Liktor, Geometry Rendering Pipeline Architecture at Activision (la versión de Call of Duty del descarte de clústeres, 2021).
5. Ordenación de instancias y clústeres de delante hacia atrás
Cuando la prepasada cumple su función, el orden empieza a importar. La prepasada escribe la profundidad, pero solo para los fragmentos que superan la prueba alfa. Si primero dibujas la parte trasera del bosque y al final la delantera, cada fragmento delantero sobrescribe uno trasero, y el shader de la prepasada sigue ejecutándose para la parte trasera. Si dibujas de delante hacia atrás, cada llamada sucesiva llena una parte mayor del búfer de profundidad con valores más pequeños, y Hi-Z rechaza cada vez más fragmentos traseros antes de que se ejecute el shader.
Por eso casi todos los motores modernos ordenan las instancias de follaje por distancia a la cámara antes de emitir la prepasada. La ordenación es barata —unos cientos de miles de instancias en la GPU mediante una ordenación radix— y convierte la propia prepasada en una operación que se va reduciendo a sí misma. Por el mismo motivo, el descarte a nivel de clúster ordena con granularidad de meshlet. La prepasada de profundidad y la ordenación de delante hacia atrás forman una de esas parejas en las que cada técnica es buena por separado, pero la combinación es excelente.
Análisis en profundidad:
- Persson, Depth in-depth (notas arquitectónicas sobre la ordenación del búfer de profundidad, la rentabilidad de una prepasada y el comportamiento de Hi-Z).
- Giesen, A trip through the graphics pipeline (la explicación técnica detallada de cómo depende la tasa de rechazo de Hi-Z del orden de dibujado).
- Wihlidal, Optimizing the Graphics Pipeline with Compute (GDC 2016, incluye la ordenación de instancias en la GPU de Frostbite).
6. Transiciones de LOD con tramado y alfa con hash
La otra gran trampa son los fundidos. La forma ingenua de realizar la transición entre dos LOD —o de hacer aparecer o desaparecer gradualmente una instancia a medida que se acerca la cámara— es la mezcla alfa. Pero la geometría mezclada no puede escribir en el búfer de profundidad, lo que envía cada árbol en transición a la lenta ruta de translúcidos y rompe la prepasada. La solución es mantener la geometría en la ruta enmascarada y realizar el fundido dentro de la prueba alfa.
Dos técnicas principales:
- Las transiciones de LOD con tramado muestrean un patrón de Bayer de 4x4 u 8x8 —o una textura de ruido azul en el espacio de pantalla— y lo usan como modificador del umbral por píxel. En un árbol con una mezcla del 50 %, sobrevive un patrón ajedrezado de píxeles; los píxeles ausentes los rellena el patrón complementario del siguiente LOD. El TAA convierte el patrón en una transición suave a lo largo de dos o tres fotogramas. Es barato, estable y se integra con todo lo demás en el motor.
- La prueba alfa con hash (Wyman y McGuire, I3D 2017) sustituye el umbral alfa fijo de 0,5 por un umbral con hash por píxel en [0,1). La geometría alfa distante que normalmente desaparecería por completo —porque el alfa con mipmapping cae por debajo de 0,5— conserva una dispersión estable de píxeles supervivientes. De nuevo, el TAA se encarga de suavizar el resultado.
Ambas técnicas mantienen el follaje en la ruta opaca o enmascarada donde funciona la prepasada de profundidad, por lo que no hay que asumir el coste completo del renderizado translúcido solo para hacer aparecer algo gradualmente. Alfa a cobertura es el equivalente de la época del MSAA: convierte el alfa en una máscara de cobertura de subpíxeles y obtiene transparencia parcial sin abandonar la ruta enmascarada. El inconveniente es que A2C solo destaca de verdad con MSAA, que la mayoría de los renderizadores diferidos modernos ya no utilizan.
Análisis en profundidad:
- Wyman y McGuire, Hashed Alpha Testing (I3D 2017, el artículo canónico sobre alfa con hash).
- Castaño, Computing Alpha Mipmaps (blog de The Witness, la forma correcta de generar mipmaps para texturas con prueba alfa sin que los árboles lejanos desaparezcan).
- Yuksel, Alpha Distribution for Alpha Testing (una mejora más reciente para los mipmaps alfa).
- NVIDIA, Anti-Aliased Alpha Testing (un repaso de A2C, alfa con hash y alternativas con tramado).
7. Reducción del coste de sombreado en píxeles enmascarados
Incluso con una prepasada perfecta y un descarte perfecto, todavía hay que sombrear una vez cada píxel visible del follaje. Los motores también reducen ese coste:
- BRDF más barato. El follaje es mate y realmente no necesita una ruta especular Cook-Torrance completa. Basta con una reflexión difusa Lambertiana envuelta y una aproximación especular de una sola línea.
- Mapas de normales de menor frecuencia. Las hojas ya tienen mucho ruido visual. Un mapa de normales de 256x256 se ve igual que uno de 1024x1024 a distancias de observación habituales y ahorra ancho de banda.
- Sin paralaje, anisotropía ni capa transparente. El menú de funciones PBR se desactiva para las hojas.
- Transmisión fina de dos caras en lugar de dispersión subsuperficial completa. Las hojas transmiten la luz desde detrás, pero puede simularse con un único producto escalar de contraluz.
- Sombreado a media resolución en algunos motores. El follaje se sombrea a una tasa de 1/4 o 1/2 píxel y luego se reescala. El ruido estocástico del TAA oculta el remuestreo.
- Omitir texturas de detalle y calcomanías en materiales enmascarados de forma predeterminada.
Cada una de estas optimizaciones supone una pequeña mejora por separado. Combinadas, los shaders de follaje enmascarado pueden ejecutarse entre 2 y 3 veces más rápido que el material opaco equivalente.
Análisis en profundidad:
- Lagarde y de Rousiers, Migración de Frostbite al renderizado basado en física 3.0, secciones sobre follaje y translucidez (SIGGRAPH 2014, los ajustes PBR de referencia para materiales finos de dos caras).
- Jimenez, Renderizado de personajes de nueva generación (las matemáticas de Lambert envuelto y translucidez posterior, creadas originalmente para la piel pero adaptadas ampliamente a las hojas).
- Sanders, Entre la tecnología y el arte: la vegetación de Horizon Zero Dawn (GDC 2018, con las simplificaciones del shader de follaje de Decima).
8. Búferes de visibilidad y Nanite para materiales enmascarados
La solución más limpia al sobredibujado es desacoplar por completo el sombreado de la rasterización. Un búfer de visibilidad rasteriza la geometría en un búfer ligero (solo el ID del triángulo y el ID de la instancia por píxel) y luego ejecuta el material completo como un pase diferido que lee el búfer de visibilidad y sombrea cada píxel exactamente una vez. Por diseño, no hay sobredibujado en la etapa de sombreado. El artículo de Burns y Hunt de 2013 presentó esta técnica; Nanite de UE5 es su implementación con calidad de producción, incluso para follaje enmascarado desde UE 5.5.
La particularidad de Nanite es que lo hace con geometría virtualizada a nivel de clúster, por lo que el propio rasterizador utiliza una ruta de software para triángulos de tamaño inferior a un píxel y mantiene limitado el sobredibujado. Los materiales enmascarados de Nanite necesitan la función de «rasterización programable»: la prueba alfa se ejecuta durante el pase del búfer de visibilidad, pero el sombreado del material sigue realizándose una sola vez por píxel visible durante la resolución diferida. El resultado es que el follaje muy denso de Nanite, antes conocido por su lentitud con materiales enmascarados, ahora es competitivo con los materiales opacos o incluso más barato, porque el sobredibujado durante el sombreado es nulo. Hay una contrapartida: a menudo es mejor procesar geometría de árboles opaca y con muchos polígonos mediante Nanite que conservar árboles de pocas caras construidos con tarjetas enmascaradas, porque la ruta enmascarada añade el coste de la rasterización programable.
Análisis en profundidad:
- Burns y Hunt, El búfer de visibilidad: un enfoque de sombreado diferido eficiente para la caché (JCGT 2013, el artículo original).
- Karis, Stubbe, Wihlidal, Análisis en profundidad de la geometría virtualizada de Nanite (SIGGRAPH 2021, la arquitectura de producción).
- Epic, Materiales de Nanite controlados por la GPU (GDC 2024, con la canalización de materiales enmascarados y rasterización programable).
- Notas de «Materiales de Nanite controlados por la GPU» (una explicación clara de terceros sobre la misma charla).
9. Representaciones de sombras separadas para el follaje
Los mapas de sombras para follaje con prueba alfa son el segundo problema de sombras más costoso de cualquier fotograma de mundo abierto, después de las cascadas grandes. Cada cascada necesita su propio prepase de profundidad, cada prepase ejecuta la prueba alfa y el coste se acumula rápidamente entre 4 cascadas y decenas de frustos de luz. Por eso, la mayoría de los motores no renderizan las sombras del follaje del mismo modo que su color.
Sustituciones habituales:
- Sombras mediante campos de distancia de malla (UE Lumen, motores personalizados). Cada malla tiene un campo de distancia con signo precalculado. Un breve trazado de conos a través del SDF produce una sombra suave sin tocar nunca la malla con prueba alfa. Resulta especialmente adecuado para los árboles porque el SDF captura la silueta de la copa como una única masa sólida e ignora el detalle de cada hoja.
- Cascadas de menor resolución para el follaje. Las sombras del follaje se escriben en una sección a media resolución y se amplían mediante un filtrado sensible a los bordes. El ojo no percibe la pérdida de resolución porque las sombras ya son suaves.
- Mapas de sombras de alfa a cobertura con MSAA. En los motores que aún utilizan MSAA en su ruta de sombras, A2C produce sombras de follaje con bordes suaves sin el coste completo de la prueba alfa.
- Sombras de cápsula para el tronco y las ramas grandes, campo de distancia para la copa y prueba alfa completa solo en la cascada más cercana. Se emplean representaciones distintas para diferentes distancias y se combinan en el pase de iluminación.
- Distancia de desactivación de WPO. El desplazamiento de posición en el mundo impulsado por el viento se desactiva más allá de un umbral para que los datos de sombras almacenados en caché sigan siendo válidos entre fotogramas. Los mapas de sombras virtuales de UE dependen en gran medida de esta técnica.
Análisis en profundidad:
- Epic, Sombras suaves mediante campos de distancia en Unreal Engine (la referencia de UE para las sombras mediante campos de distancia de malla).
- Wright, Lumen: iluminación global en tiempo real en Unreal Engine 5 (SIGGRAPH 2022, con la integración de los SDF de malla de Lumen para el follaje).
- Epic, Mapas de sombras virtuales (la arquitectura moderna de sombras de UE5, con las reglas específicas del follaje para desactivar WPO y gestionar la caché).
- Persson, Mapas de sombras en cascada prácticos (la referencia aún vigente sobre CSM, con notas acerca de los emisores de sombras con prueba alfa).
10. Viento, animación y caché de sombras
Un problema relacionado y sutil: la mayor parte del follaje se mueve. La animación de vértices impulsada por el viento (World Position Offset en UE y sus equivalentes en Frostbite y Decima) hace que la geometría del follaje no sea estable entre fotogramas, lo cual rompe la caché de sombras y la reproyección. Los motores modernos combaten esto de dos formas:
- Limitar WPO a cierta distancia. Más allá de un umbral, la amplitud de la animación del viento se reduce gradualmente hasta cero. De todos modos, el ojo no puede apreciar el balanceo a tanta distancia, y las cachés de sombras siguen siendo válidas.
- Incorporar el viento a los límites del clúster. Las cajas delimitadoras de los clústeres se amplían según el desplazamiento WPO máximo, de modo que el descarte siga siendo conservador sin volver a cargar datos en cada fotograma.
- Desfases por instancia. Los árboles idénticos utilizan una semilla aleatoria por instancia para desfasar la animación del viento, de modo que un bosque no se balancee al unísono sin tener que pagar una animación única para cada árbol.
Este es el tipo de detalle que no aparece en las listas de técnicas, pero que en la práctica marca la diferencia entre un bosque de 3 ms y uno de 9 ms.
Análisis en profundidad:
- Sanders, Entre la tecnología y el arte: la vegetación de Horizon Zero Dawn (GDC 2018, con la canalización de animación del viento y la caché de sombras de Decima).
- McAuley, Renderizado del mundo de Far Cry 4 (GDC 2015, incluye el muestreo de la cuadrícula de viento para la vegetación).
- Epic, Follaje y mapas de sombras virtuales (las recomendaciones de la comunidad de UE5 sobre la distancia de desactivación de WPO y la caché de VSM).
11. Las matemáticas combinadas
Ninguna de estas técnicas es una solución mágica. Lo interesante es lo que sucede al combinarlas:
- Un pase de follaje enmascarado ingenuo en una escena de bosque denso presenta un sobredibujado efectivo de entre 8 y 15 veces. Cada píxel visible ejecuta el shader de hojas entre 8 y 15 veces.
- Al añadir un prepase de profundidad, el pase principal baja a un sobredibujado de ~1x, pero el propio prepase todavía toca toda la geometría.
- Al añadir ordenación de delante hacia atrás, el prepase empieza a descartar trabajo por sí mismo.
- Al añadir descarte por GPU a nivel de clúster, el prepase solo toca lo que podría llegar a ser visible.
- Al añadir cadenas de LOD e impostores, la cantidad de cuadriláteros visibles se reduce en un orden de magnitud más allá de 30 m.
- Al añadir la ruta de búfer de visibilidad/Nanite, la etapa de sombreado se ejecuta realmente una sola vez por píxel, incluso con una superposición densa.
- Al añadir sombras mediante campos de distancia, el coste de las sombras deja de escalar con la prueba alfa.
El resultado principal, repetido en las charlas enlazadas anteriormente: el sobredibujado efectivo se desploma de 8-15x a 1-2x, y el coste total del follaje por fotograma se reduce entre 4 y 6 veces en una escena de bosque denso. Esa es la razón por la que los juegos modernos de mundo abierto pueden renderizar bosques a más de 60 fps en hardware de consumo.

12. Qué significa esto para el navegador
La mayor parte de este conjunto de técnicas se adapta limpiamente a WebGPU. Ya hemos implementado descarte controlado por la GPU, despacho indirecto, oclusión Hi-Z y prepases ordenados de delante hacia atrás en el motor de mundo abierto para navegadores. El prepase de profundidad para geometría enmascarada es sencillo: WebGPU admite pruebas de igualdad de profundidad y discard en shaders de fragmentos, con las mismas salvedades respecto a early-Z. Los impostores octaédricos se trasladan de forma mecánica; las matemáticas se reducen al desplegado de esfera a octaedro y la indexación del atlas.
Las partes más difíciles son las modernas. Un búfer de visibilidad en WebGPU implica escribir un ID de triángulo de 32 bits en un destino de renderizado y resolver los materiales en un pase de cómputo a pantalla completa; los componentes necesarios existen, pero su orquestación es compleja. Las sombras mediante campos de distancia de malla requieren una textura 3D por recurso y un trazado de conos corto, dos cosas que están al alcance de WebGPU. El alfa con hash y los LOD con tramado requieren una sola función de shader cada uno.
El camino que debe seguir el follaje en el navegador es el mismo que el del resto de este conjunto tecnológico: lanzar primero las técnicas baratas y robustas (prepase, instancias ordenadas, LOD, impostores y alfa con hash) y añadir después la maquinaria pesada (búfer de visibilidad y sombras mediante SDF de malla). El nivel mínimo del hardware para navegadores por fin es lo bastante alto como para que no haya ninguna razón arquitectónica por la que un bosque de WebGPU no pueda verse y funcionar como uno de consola. Solo quedan razones de ingeniería, y las razones de ingeniería son las que nos gustan.
Lecturas adicionales sobre todo el conjunto tecnológico
Si buscas una única fuente que reúna todo esto, el archivo «Advances in Real-Time Rendering in Games» de SIGGRAPH (advances.realtimerendering.com) contiene las charlas de referencia sobre follaje y renderizado controlado por la GPU desde 2014. Los artículos de análisis de GPU de Adrian Courrèges incluyen desgloses fotograma a fotograma de GTA V y Horizon Zero Dawn que muestran cada pase analizado aquí en su orden de producción. Para las matemáticas de la prueba alfa en particular, la página de investigación de Chris Wyman contiene los artículos sobre alfa con hash y transparencia estocástica, además de shaders de referencia. Y los capítulos de Real-Time Rendering, 4.ª edición sobre transparencia, muestreo y gestión de la profundidad siguen siendo el punto de partida académico.