
Nubes de puntos en alta definición: el nuevo renderizado de Typhoon al detalle
Introducción
Imagina por un momento que necesitas crear una copia digital exacta de un edificio antiguo para restaurarlo, analizar con precisión milimétrica el terreno de una mina o llevar un seguimiento detallado del avance en una construcción. En todos estos escenarios, contar con un modelo digital que refleje fielmente la realidad es fundamental. Gracias a tecnologías como el LiDAR o la fotogrametría, podemos capturar millones de puntos en el espacio que, al unirse, forman una «nube» capaz de describir objetos y entornos con un nivel de detalle asombroso.
Tradicionalmente, la creación de estas copias digitales y su posterior gestión son procesos que a menudo implican tareas manuales complejas y tediosas. Nuestra ambición es automatizar la generación y visualizacion de estas copias digitales. En Typhoon, nuestra aplicación orientada a la visualización industrial desarrollada sobre Evergine, llevamos tiempo utilizando un sistema de renderizado basado en rasterización por hardware para visualizar nubes de puntos de manera eficiente. Sin embargo, a medida que las nubes de puntos se volvían más grandes y complejas, nuestro antiguo método empezó a mostrar sus limitaciones. Resultaba dificil ver detalles en nubes muy densas, el rendimiento tenía margen de mejora y era algo tosco personalizar como se visualizaban esos datos.
Fue entonces cuando nos preguntamos: ¿podemos hacerlo mejor? La respuesta nos llevó a investigar una forma diferente de trabajar, inspirada en la investigación de Markus Schütz: la rasterización software mediante compute shaders. Este enfoque nos da mucho más control sobre cómo se dibujan los puntos, lo que nos permite mejorar tanto la velocidad como la calidad visual, además de abrirnos la puerta a nuevas mejoras para visualizar las nubes de puntos.
En este artículo, te contamos por qué decidimos cambiar nuestro sistema de renderizado, qué necesitábamos que el nuevo sistema pudiera hacer y cómo lo pusimos en marcha. También te mostramos cómo se compara su rendimiento y calidad visual con la versión anterior, y qué emocionantes mejoras podremos añadir en el futuro gracias a esta nueva tecnología.
¿Por qué un nuevo renderer?
En Typhoon llevamos tiempo trabajando con nubes de puntos, esos conjuntos masivos de puntos que nos permiten reconstruir digitalmente el mundo real. Nuestro antiguo sistema de visualización, aunque cumplía su función, empezaba a quedarse un poco atrás. Imagina que intentas ver una foto con muchos detalles, pero la lente no es lo suficientemente buena: pierdes nitidez y algunos detalles se difuminan. Con nuestras nubes de puntos más grandes y complejas, nos pasaba algo parecido.
Así que nos pusimos a buscar una «lente» mejor, y dimos con una idea muy interesante inspirada en el trabajo de Markus Schütz. ¿El resultado? Un sistema de renderizado que nos permite ver las nubes de puntos de una manera mucho más clara y eficiente.
¿Y por qué este cambio? Principalmente por estas razones:
- Más velocidad, mejor eficiencia: Queríamos que la visualización fuera más fluida, especialmente con nubes de puntos enormes. El nuevo sistema es mucho más rápido permitiendo visualizar nubes de puntos muy grandes incluso en hardware de gama media o con recursos limitados.
- Control total: Ahora tenemos mucha más libertad para decidir cómo se dibujan esos puntos. Es como tener los controles de una cámara profesional en lugar de una automática. Esto nos permite afinar la visualización para obtener una representación más fiel.
- Pensando en el futuro: Queremos seguir mejorando Typhoon, y este nuevo sistema nos abre muchas puertas para añadir funciones interesantes en el futuro. Es una base mucho más sólida para seguir creciendo.
- Adiós al aliasing: ¿Alguna vez has notado como se solapan los puntos al visualizar una nube de puntos? Eso es el aliasing. Nuestro nuevo sistema reduce muchísimo este problema, haciendo que las nubes de puntos se vean mucho más suaves y realistas. ¡Se acabó el aspecto pixelado!

Comparación visual que muestra la reducción del aliasing con la nueva técnica (Derecha) frente a un método anterior (Izquierda)
En resumen, cambiamos nuestro sistema de renderizado para que Typhoon pueda manejar mejor las nubes de puntos del futuro, ofreciendo una experiencia más rápida, controlada y, sobre todo, con una calidad visual impresionante. ¡Creemos que la diferencia se nota!
Descripción del método
Pipeline

Diagrama conceptual del pipeline de renderizado del nuevo renderer en Typhoon.
Nuestro pipeline de renderizado se divide en varias etapas clave, donde cada una cumple un rol clave en el proceso de rasterizado. Una característica fundamental de nuestro sistema, que define en gran medida su funcionamiento y lo diferencia de la implementación de referencia, es el renderizado progresivo. En lugar de renderizar la nube de puntos completa en un solo frame, lo cual puede llegar a ser muy costoso, dividimos el proceso en múltiples frames. Esto es crucial para garantizar un rendimiento fluido incluso en dispositivos con recursos limitados, ya que la carga de procesamiento se distribuye a lo largo del tiempo.
Reseteo del estado
Esta etapa se activa únicamente cuando se detecta un movimiento de cámara. Su función principal es preparar el terreno para el nuevo frame de renderizado, asegurando que los resultados del frame anterior no interfieran con el actual. Esto implica resetear todos los buffers de información que se utilizan durante el proceso de rasterizado, como los buffers de color y profundidad, para que puedan ser llenados con los datos correspondientes a la nueva perspectiva de la cámara. Sin este paso, podrían persistir artefactos visuales del frame anterior.
Reproyección
Esta etapa se ejecuta solo en el primer frame después de mover la cámara. Su objetivo es acelerar la visualización inicial de la nube de puntos. Para ello, reutilizamos la información de los puntos que eran visibles en el frame anterior. Al proyectar estos puntos con la nueva posición de la cámara, obtenemos una estimación rápida de su ubicación en la pantalla actual. Esta técnica es muy útil cuando los movimientos de la cámara son pequeños, lo que suele ser habitual, y permite que el renderizado progresivo comience con una base sólida, mostrando al usuario una primera versión de la nube de puntos mucho más rápido.
Proyección y acumulación de color
Tras la fase de reproyección, procedemos a la proyección del resto de los puntos en la pantalla. Para cada punto, calculamos su posición 2D en función de la perspectiva y posición de la cámara respecto a la nube. Una vez proyectados, necesitamos determinar cómo se visualizan estos puntos, especialmente cuando varios puntos se proyectan en el mismo pixel de la pantalla.
Nuestro sistema utiliza una técnica de acumulación de color mediante blending basado en profundidad. Para cada píxel, mantenemos un registro de la profundidad del punto más cercano proyectado hasta el momento. Cuando un nuevo punto se proyecta sobre el mismo píxel, su color se acumula si su profundidad es similar a la del punto más cercano, específicamente si es menor que 1.01 veces la profundidad mínima registrada. Este umbral tan cercano asegura que solo los puntos que realmente están muy próximos en profundidad contribuyan al color final del píxel, lo que suaviza la imagen y reduce drásticamente el aliasing. En caso de que el punto proyectado tenga una profundidad menor a la mínima registrada para ese píxel, lo que indica que se trata de un objeto más cercano que debería ocluir lo que se había dibujado previamente, se resetea la acumulación para reflejar correctamente esta nueva información.
Es importante destacar que este proceso de proyección y acumulación de color se realiza de forma progresiva a lo largo de diferentes frames. En cada frame, solo una parte de la nube de puntos se proyecta y su contribución de color se acumula en un buffer. Este proceso continúa hasta que la nube de puntos se ha proyectado completamente. El resultado es una representación de alta calidad donde los puntos se fusionan suavizando la imagen, reduciendo significativamente el problema del aliasing que mencionamos anteriormente al mismo tiempo que se mantiene un rendimiento óptimo en dispositivos de diferentes características.
Paso a textura y mejoras de la imagen
En cada frame, nuestro buffer de acumulación se convierte a una textura. De esta manera, conseguimos generar una imagen con los últimos resultados del proceso de renderizado progresivo en tiempo real, evitando que el usuario tenga que esperar a que la nube de puntos se proyecte completamente para obtener una visualización. Esto proporciona una experiencia de usuario mucho más fluida e interactiva, ya que los cambios en la cámara o la configuración se reflejan casi instantáneamente en la pantalla, aunque la imagen final aún esté convergiendo a su máxima calidad.
Una vez que el buffer de acumulación se ha convertido en una textura en un frame dado, aplicamos ciertas mejoras a la imagen. Una de las ventajas de nuestro sistema basado en rasterización software es la flexibilidad que nos ofrece para personalizar la visualización. Por ejemplo, podemos permitir al usuario modificar el tamaño de cada punto en la pantalla. Esto ya se hacía con la versión anterior y resultaba muy útil para resaltar ciertos detalles de la nube de puntos o para mejorar la percepción de la densidad. Además, en esta fase podríamos implementar otras técnicas de post-procesado para mejorar aún más la calidad visual. Un ejemplo de esto es Eye-Dome Lighting, una técnica que resalta los detalles finos y la estructura de la superficie de la nube de puntos, mejorando la percepción de profundidad y forma.
Comparativa con el renderer anterior
Después de sumergirnos en los detalles de nuestro nuevo pipeline de renderizado, llega el momento de la verdad: ¿hemos conseguido la mejora que íbamos buscando? Como suele decirse, una imagen vale más que mil palabras. Aquí puedes ver una comparativa directa entre cómo se visualizaba una nube de puntos densa con nuestro sistema antiguo y cómo se ve ahora con el nuevo:

Comparación visual de una sección de una nube de puntos densa industrial.
En esta comparativa, basada en una nube de puntos industrial, se puede ver como la estructura pasa de una visualización con ruido y líneas artefactadas a una imagen notablemente más suave y definida, donde se aprecian mejor los detalles. Algunos elementos donde se puede observar esto es en las letras presentes en una de las vigas y en el gancho.

Otra vista comparativa de la nube anterior, mostrando la diferencia en la representación de detalles finos.
Esta comparativa se centra en la superficie del suelo. Se muestra cómo el nuevo renderer elimina el aliasing, ofreciendo líneas claras y detalles precisos que antes se difuminaban y perdian, como las marcas del suelo.

Una tercera comparación que resalta la reducción del aliasing y la mejora en la suavidad de la imagen en un ámbito arquitectónico.
En este ejemplo nos centramos en un escenario interior más sobrecargado que los anteriores. Se puede apreciar una mejor definición en multitud de elementos, como las puertas metálicas de los lados, columnas de la catedral, sillas, pinturas…
Este cuarto ejemplo nos muestra un entorno industrial complejo. Con el antiguo sistema, las tuberías y estructuras se ven algo dentadas y con cierto ruido visual, dificultando la percepción clara de su geometría en la distancia. El nuevo renderer presenta una imagen con mayor suavidad en las superficies, las tuberías se distinguen con mayor claridad y definición, y la escena en general se siente más coherente y fácil de interpretar, especialmente en las áreas con geometría superpuesta.
La diferencia en cuanto a claridad y reducción del aliasing es evidente en estas comparativas visuales. La nueva técnica de acumulación de color consigue esa suavidad que buscábamos, eliminando gran parte del ruido visual y logrando contornos más definidos.
Pero la mejora no se queda solo ahí. Una de las ventajas que hemos indicado anteriormente es la posibilidad de ajustar el tamaño de los puntos en pantalla, una funcionalidad que, aunque ya existía, ahora se beneficia de la calidad base del nuevo renderer. Esto es bastante útil: puedes usar puntos más pequeños para no perder detalle cuando te acercas mucho a una zona muy densa, o puedes aumentar el tamaño para obtener una vista más «compacta» o «sólida» de la nube, lo cual puede ayudar a entender mejor la forma general o a visualizar mejor zonas con menos puntos. Mira cómo cambia la percepción de la misma nube (renderizada ya con el nuevo sistema) al variar este parámetro:
Tener esta nueva base tecnológica de rasterización software, más flexible y potente, es como tener mejores herramientas en el taller: nos permite pensar en construir cosas más interesantes y seguir mejorando la experiencia de usuario en Typhoon. Ya estamos explorando varias ideas para el futuro:
- Aún más calidad visual: Queremos que la imagen sea aún más nítida y represente la escena con la mayor fidelidad posible. Para ello, estamos trabajando en varias líneas:
- Tamaño de punto adaptativo: Que el tamaño con el que se dibuja cada punto no sea fijo, sino que se ajuste automáticamente (por ejemplo, según la distancia o la densidad de la zona). Así conseguimos que la nube se vea bien definida tanto si estás cerca como si estás lejos.
- Bordes más limpios (Check de opacidad / Visibility check): ¿Has notado a veces cómo puntos del fondo parecen «colarse» o ensuciar los bordes de los objetos que están más cerca? Estamos investigando una técnica que comprueba la profundidad de los puntos vecinos en la pantalla. Si un punto está mucho más lejos que los que tiene justo al lado, evitamos dibujarlo. Esto permite limpiar espectacularmente los contornos y asegura que los objetos en primer plano oculten correctamente lo que tienen detrás.
- Realzando detalles con Eye-Dome Lighting (EDL): Seguimos teniendo en mente esta técnica, que ayuda a que la forma general y los pequeños detalles de la superficie de la nube resalten, mejorando la percepción del volumen.
- Explorando nuevas fronteras (¡Hola, Gaussian Splats!): El mundo 3D avanza rápido, y técnicas como Gaussian Splatting están demostrando ser muy potentes. Por tanto, estamos trabajando activamente en integrar la visualización de Gaussian Splats junto a nuestras nubes de puntos dentro de Typhoon. El objetivo es claro: que puedas cargar, ver y trabajar con ambos tipos de datos en la misma escena. ¡Imagina poder combinar lo mejor de cada técnica!
- Manejando datos gigantes (Geometría virtual): El renderizado progresivo ya ayuda con nubes grandes, pero queremos prepararnos para manejar auténticas barbaridades de datos. La idea es evolucionar hacia un sistema de geometría virtual, inspirándonos en investigaciones de vanguardia como la presentada en el artículo Virtualized Point Cloud Rendering. Este enfoque se basa en cargar inteligentemente solo las partes de la nube que necesitas ver (LOD y streaming), para que puedas abrir proyectos de tamaño casi ilimitado sin que tu ordenador se ahogue.
- Optimización constante: Siempre hay margen para mejorar el rendimiento. Seguiremos «apretando tuercas» en el código para asegurarnos de que todo funcione lo más rápido y eficientemente posible.
Conclusiones
En definitiva, el camino desde nuestro anterior sistema de renderizado por hardware hasta la rasterización por software mediante compute shaders ha sido una evolución necesaria y muy gratificante para Typhoon. Como vimos en la introducción, las crecientes demandas al trabajar con nubes de puntos cada vez más grandes y complejas nos empujaron a buscar una alternativa que superara las limitaciones existentes en cuanto a detalle, rendimiento y personalización. La respuesta la encontramos en este nuevo enfoque, al que le dimos nuestro toque distintivo con el renderizado progresivo.
Los resultados validan plenamente el esfuerzo. Hemos conseguido esa velocidad y eficiencia extra que buscábamos, haciendo que la visualización de nubes de puntos masivas sea ahora una experiencia mucho más fluida y ágil, incluso en equipos con hardware más modesto. La calidad de imagen ha dado un salto cualitativo importante: hemos logrado decir adiós a gran parte del molesto aliasing, consiguiendo que las nubes de puntos se presenten en pantalla de forma más suave, definida y con un realismo notablemente superior, permitiendo apreciar detalles que antes se perdían.
Pero quizás uno de los logros más significativos es el control total que este nuevo sistema nos otorga sobre cada etapa del proceso de renderizado. Esta flexibilidad no solo se traduce en la calidad y el rendimiento actuales, sino que, como hemos explorado en la sección anterior, nos abre un abanico enorme de posibilidades para seguir innovando.
En resumen, este nuevo renderer trasciende la idea de una simple actualización; se consolida como una pieza fundamental que potencia Typhoon, haciéndolo más rápido, más capaz y, sobre todo, mejor preparado para afrontar los retos presentes y futuros en el ámbito de la visualización de copias digitales a gran escala.