Skip to content

Construyendo un mundo abierto en el navegador, parte 6: Los clipmaps cambiaron el rumbo

Por Oleg Sidorkin, CTO y cofundador de Cinevva

¿Acabas de llegar? Consulta la guía de la serie. Explica qué es un spike y enlaza todas las partes.

Antes del Spike 10, nuestro modelo mental seguía siendo «un mundo más grande implica más geometría». Después del Spike 10, pasó a ser «un presupuesto de geometría constante con actualizaciones de anillos centrados en la cámara». Ese cambio alteró la trayectoria del proyecto.

La idea en la que se basan los clipmaps de geometría es sencilla. El terreno se renderiza como un conjunto de anillos concéntricos centrados en la cámara. El anillo más interno tiene la mayor densidad de vértices. Cada anillo exterior k duplica el espaciado entre vértices, sk=s02k, por lo que cubre 4× el área de terreno del anillo situado en su interior.

Esa duplicación es el verdadero truco. La distancia de visión crece geométricamente con el número de anillos, dviews02L, mientras que el coste en vértices solo crece de forma lineal:

VtotalN2L

para L anillos de N×N vértices cada uno. Duplicar la distancia visible cuesta un anillo más, no cuatro veces más geometría. El número de triángulos se mantiene aproximadamente constante sin importar el tamaño del mundo, porque siempre se renderizan los mismos L anillos con la misma resolución.

Abrir el Spike 10 en una pestaña nueva ↗ · Ver el código fuente

El truco práctico fue aplicar geomorfismo en los límites de los anillos. Cuando un vértice pasa de un anillo de LOD al siguiente, su altura debe mezclarse suavemente entre la muestra de alta resolución y la de baja resolución. De lo contrario, aparecen saltos visibles cada vez que la cámara se mueve y los anillos cambian de posición. Lo resolvimos con un factor de mezcla basado en la distancia del vértice al borde del anillo, interpolando la altura en el shader de vértices:

h=lerp(hfine,hcoarse,α),α=smoothstep(dnear,dfar,d)

donde d es la distancia del vértice a la cámara. Dentro del anillo (ddnear), el vértice utiliza su altura a resolución completa; cuando alcanza el siguiente anillo (ddfar), ya ha migrado a la altura de baja resolución que utilizará ese anillo, por lo que no queda ningún salto por producirse.

Una lección sutil surgió durante las pruebas de movimiento de la cámara. Es fácil evaluar los clipmaps en capturas estáticas y pasar por alto los artefactos de transición. Dedicamos tiempo a realizar recorridos a velocidad constante a través de los límites de los anillos y a observar si aparecía ruido temporal. Las capturas mentían. El movimiento decía la verdad.

Este spike también nos proporcionó un límite arquitectónico claro. Con el tiempo, el terreno del campo cercano podía volverse dinámico y costoso, con edición volumétrica, materiales más complejos e interacción física. El terreno del campo lejano podía seguir siendo estable, predecible y barato. Esa separación se convirtió en la columna vertebral de todas las decisiones arquitectónicas a partir de ese momento.

Si estás evaluando los clipmaps para tu propio proyecto, prueba bucles de estrés, no escenas bonitas. Los recorridos largos, los cambios de altitud de la cámara y los cruces repetidos de límites son los que revelan los problemas reales.

En la parte 7 añadimos mallado volumétrico y pasamos de «el terreno como superficie» a «el terreno como volumen editable». Fue entonces cuando este proyecto dejó de ser un renderizador y empezó a convertirse en un editor de mundos.

Tecnología mencionada en este capítulo

Clipmaps de geometría. Presentados por Losasso y Hoppe en SIGGRAPH 2004 (artículo), los clipmaps de geometría renderizan el terreno como anillos cuadrados concéntricos centrados en la cámara. Cada anillo cubre el doble de área que el anterior con la mitad de resolución de vértices. El número total de vértices es constante: aproximadamente N2L. Con N=256 y L=8 niveles, eso equivale a 2562×8524,000 vértices, independientemente del tamaño del mundo. La CPU actualiza los datos del mapa de alturas de cada anillo a medida que se mueve la cámara. El shader de vértices lee la altura de una textura y desplaza la cuadrícula plana. Consulta nuestra guía de paisajes sobre clipmaps de geometría y GPU Gems 2, capítulo 2.

Geomorfismo. El mayor artefacto visual del LOD de terreno son los saltos: los vértices cambian bruscamente cuando una sección pasa a otro nivel de LOD. El geomorfismo los elimina mezclando las posiciones de los vértices entre niveles de LOD a lo largo de una zona de transición. Cada vértice almacena tanto su altura del LOD actual como su altura del LOD de menor resolución. Un factor de transformación basado en la distancia a la cámara interpola suavemente entre ambas: morphedHeight = mix(fineLodHeight, coarseLodHeight, smoothstep(lodNear, lodFar, distance)). La zona de transición suele ocupar el 20 % exterior de cada anillo. A velocidades normales de cámara, la transición es invisible. Consulta los detalles sobre el geomorfismo.

CDLOD (clipmaps adaptativos con quadtree). Una mejora de los clipmaps de anillos fijos propuesta por Strugar (2014, artículo). En lugar de usar anillos concéntricos con resolución uniforme, CDLOD utiliza un quadtree que se adapta a la complejidad del terreno. Las zonas planas utilizan nodos de baja resolución, mientras que las zonas con mucho detalle —acantilados o crestas— reciben subdivisiones más finas. Esto es importante para los mundos creados por usuarios, donde la complejidad puede variar enormemente entre distintos chunks. Consulta CDLOD en nuestra guía de paisajes.


Parte 6 de 12.
Anterior: Parte 5: Presupuestando los elementos vistosos
Siguiente: Parte 7: Marching cubes y las primeras cuevas de verdad
Guía de la serie: /es/blog/2026-02-25-open-world-browser-series-guide