Saltar al contenido principal

Voxelización de mallas en 3D

Generando información volumétrica de una superficie tridimensional.

Este fue mi proyecto de final de grado. Llegado a este momento, ya tenía un gran interés por la computación y el procesamiento de gráficos. En esa época me interesé por el tema de la representación de volúmenes en gráficos por ordenador, especialmente cuando empecé a leer el diario de desarrollo de Dennis Gustafsson (Tuxedo Labs) donde mostraba el desarrollo del motor de vóxeles donde crearía el videojuego Teardown, uno de los videojuegos más técnicamente impresionantes que he visto nunca.

Por este motivo decidí hacer algo relacionado con esto, y me decidí por hacer una herramienta que resolviese el problema de la generación de entidades volumétricas. Al menos en esa época, existían relativamente pocas herramientas para poder generar estructuras de vóxeles. Pensé que lo más sencillo para la mayoría de casos sería partir de una superficie tradicional hecha con técnicas de modelado clásico, como cualquier malla clásica.

Demostración de una malla procesada mediante la herramienta.

La herramienta

Programé la herramienta para el motor que más dominaba en ese momento, que era Unity. La herramienta permite diferentes configuraciones, como establecer el relleno de diferentes huecos internos de manera independiente, determinar la profundidad de los vóxeles (su precisión), etc. También tiene diferentes herramientas de debug y de visualización de los resultados.

Final render

La herramienta tal y como se ve en la versión de Unity para la que fue hecha

Final render

Conejo de Standford tras aplicarle la herramienta

Esta herramienta da como resultado un grupo de vóxeles en una estructura de octree. En este caso la renderizo usando un geometry shader sobre una nube de puntos de una manera naive y directa, ya que el renderizado como tal no era el punto de este proyecto, si no su generación a partir de una superficie usando geometría y la estructura en la cual se representaba la información.

También es posible modificar la estrucura de vóxeles añadiendo o sustrayendo una esfera de vóxeles con un centro y un radio dados, aunque no profundicé mucho en estas técnicas ya que el objetivo de la herramienta era obtener las estructuras a partir de la superficie, y no tanto su postedición.

Puedes consultar el desarrollo del proyecto más exhaustivamente, y las técnicas concretas que usé junto a su fundamentación matemática en el siguiente enlace de la Universidad Jaume I.

Estructura de vóxeles del conejo de Standford tras sustraerle una esfera en la posición marcada.

En el siguiente vídeo se puede observar como se genera la estructura volumétrica a partir del conejo de Standford con diferentes configuraciones, enseñando también las herramientas de visualización de debug.