Construir un mundo abierto en el navegador, parte 9: Transvoxel comenzó con un andamiaje
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.
Las uniones son donde la confianza va a morir.
Todo puede parecer estable hasta que se encuentran dos resoluciones. Un chunk con LOD 0 está junto a otro con LOD 1. Sus mallas se generan de forma independiente. En el límite compartido, las posiciones de los vértices no coinciden porque el chunk de menor resolución tiene la mitad de densidad de cuadrícula. El resultado son grietas visibles, uniones en T y bordes que parpadean.
El algoritmo Transvoxel resuelve este problema generando celdas de transición especiales a lo largo de la cara limítrofe entre dos chunks con resoluciones diferentes. Estas celdas toman muestras simultáneamente de las cuadrículas de alta y baja resolución y producen triángulos que cosen ambas superficies. El algoritmo utiliza sus propias tablas de consulta, independientes de las tablas normales de marching cubes, con 512 casos de celdas de transición.
A esas alturas ya acumulábamos suficientes cicatrices de integración como para saber que no debíamos apresurar la implementación.
El Spike 15 tenía una sola misión: construir un banco de pruebas de uniones en el que pudiéramos confiar antes de tocar el algoritmo completo. Preparamos un entorno controlado donde dos chunks con datos SDF conocidos estaban uno junto al otro a distintas resoluciones, con controles de visualización para activar o desactivar de forma independiente la malla principal, la malla de unión, la vista alámbrica y las normales.
Abrir el Spike 15 en una pestaña nueva ↗ · Ver código fuente
Una vez estabilizado el banco de pruebas, el Spike 16 validó la generación de celdas de transición basada en tablas sobre una sola cara. Elegimos una cara alineada con un eje (el límite +X), implementamos la evaluación de celdas de transición únicamente para esa cara y comparamos el resultado con los datos de referencia del artículo de Transvoxel.
Abrir el Spike 16 en una pestaña nueva ↗ · Ver código fuente
Probamos una cara cada vez de forma deliberada, porque el cableado de las tablas de transición presenta muchos modos de fallo independientes. El cálculo del índice de caso depende de tomar muestras de los vértices correctos de ambas cuadrículas. La indexación de vértices dentro de una celda de transición utiliza un esquema de numeración distinto al de las celdas normales de marching cubes. El orden de orientación debe ser coherente con el de la malla principal o el descarte de caras posteriores se comerá los triángulos de unión. Si pruebas las seis caras a la vez, todos los síntomas parecen aleatorios. Si pruebas exhaustivamente una sola cara, obtienes fallos significativos que puedes depurar.
Otro logro sutil de esta fase fue la inversión en herramientas. Desde el principio creamos controles de visibilidad, renderizado exclusivo de las uniones e indicadores LOD codificados por colores. En aquel momento, esos controles parecían trabajo adicional. Más adelante, cuando los casos extremos se complicaron, amortizaron con creces la inversión porque podíamos aislar exactamente qué celdas de unión se estaban comportando mal.
Al final de este capítulo no habíamos «terminado con las uniones». Estábamos en una posición desde la que podíamos razonar sobre sus errores en lugar de temerlos.
En la parte 10 comienza la verdadera montaña rusa. Esquinas con niveles LOD mezclados, inversiones de orientación, fantasmas por sobredibujado parcial y esos momentos en los que estás seguro de que el algoritmo es incorrecto, hasta que descubres que el error está en un rango de dibujo que lee más allá del número de vértices activos.
Tecnología mencionada en este capítulo
El algoritmo Transvoxel. Diseñado por Eric Lengyel (transvoxel.org), Transvoxel resuelve el problema más difícil del LOD en terrenos volumétricos: las uniones entre chunks con distintas resoluciones. Cuando un chunk de alta resolución está junto a otro de baja resolución, las mallas de marching cubes no se alinean en el límite y producen grietas visibles. Transvoxel inserta celdas de transición especiales a lo largo de las caras limítrofes que salvan la diferencia de resolución mediante triángulos adicionales que coinciden con ambos lados. El algoritmo utiliza sus propias tablas de consulta, independientes de las de marching cubes normal, con 512 casos de celdas de transición reducidos a 73 clases de equivalencia. Está libre de patentes y se ha utilizado en juegos publicados (Space Engineers, Astroneer). Consulta nuestra guía sobre paisajes dedicada a Transvoxel.
Celdas de transición. Celdas especiales generadas en la cara situada entre dos niveles LOD. A diferencia de las celdas normales de marching cubes, que toman muestras de 8 esquinas de una sola cuadrícula, las celdas de transición toman muestras simultáneamente de las cuadrículas de alta y baja resolución. La cara de alta resolución tiene
Uniones de transición LOD. El límite entre dos resoluciones de malla donde la falta de correspondencia topológica causa artefactos visuales. Sin cosido, un chunk con LOD 0 (cuadrícula de 1 m) junto a otro con LOD 1 (cuadrícula de 2 m) produce uniones en T: la malla fina tiene vértices a lo largo del límite que la malla gruesa no comparte, lo que provoca grietas por las que se filtra la luz. Transvoxel, el geomorphing y la geometría de faldón son tres enfoques para corregir estas uniones. Para terrenos volumétricos, Transvoxel es la solución estándar porque el geomorphing solo funciona con mapas de alturas. Consulta LOD para terrenos volumétricos.
Parte 9 de 12.
Anterior: Parte 8 - Integración sin perder nuestra base de referencia
Siguiente: Parte 10 - Caos en las uniones y el combate final contra las esquinas
Guía de la serie: /es/blog/2026-02-25-open-world-browser-series-guide