lunes, 6 de julio de 2026

Página 213: Apuntes de "Godot 4 Voxel System Tutorial Pt. 1"

 Creado por Gwizz

  

Empezamos esta serie de como crear voxels, para mi es mas facil de seguir que el que hizo MakerTech.
 
Y los script @util vuelven, no necesitaremos lanzar el juego para ver el resultado.

Abrimos el Editor Settings, en la pestaña Shortcuts buscamos Reload Saved Scene y asignamos el atajo Ctrl + R, con este atajo, podemos recargar la escena y ver los cambios producidos debido a cambios de parámetros o en el código.
 
 
 
 Creamos la escena Main(Node2D) y el script.
 
  
 
 

Y eso es todo. Antes de continuar, voy a revisar la lógica del código, ya que este ejemplo me resulta más fácil de entender que el tutorial de MakerTech.

Los vóxeles son un array tridimensional que almacena la información de cada bloque del mundo. En este caso, un valor de 1 representa un bloque sólido, mientras que un valor de 0 indica que no hay bloque.

La función create_face() se encarga de generar las caras visibles de los bloques. Haciendo una analogía sencilla, los vértices son los puntos que forman las esquinas de una cara. Las normales indican hacia qué dirección está orientada esa cara, algo que Godot utiliza para calcular la iluminación. Por último, las UV determinan qué parte de una textura se aplicará sobre la cara, es decir, cómo se verá visualmente su material o imagen.

Aunque una cara de un cubo parece un cuadrado, internamente se divide en dos triángulos. Por ello, la función create_face() devuelve los vértices, normales y UV de los dos triángulos que forman dicha cara.

 

Seguimos con generate_mesh(), se crea un array con todas las caras, en cada ciclo dibujamos las 6 caras del cubo, comprobamos si hay cubos contiguos para saber si hay que dibujar la cara o no.

 

Hasta este punto, cada cara devuelve sus propios vértices, normales y UV. Sin embargo, Godot no puede construir una malla a partir de decenas o cientos de caras independientes, por lo que primero se recopilan todos esos datos en tres arrays más grandes.

Este bloque une la información de todas las caras en una única lista de vértices, normales y UV.

A continuación, estos arrays se convierten a PackedVector3Array, un formato optimizado que Godot utiliza para almacenar grandes cantidades de datos geométricos.


Después se crea un array especial donde cada posición tiene una función concreta. Por ejemplo, una posición almacena los vértices, otra las normales y otra las UV.

Finalmente, Godot utiliza toda esta información para construir la malla mediante ArrayMesh.

En resumen, este bloque reúne toda la información geométrica generada por las caras y la transforma al formato que Godot necesita para crear una malla visible. 

Si os cuesta entender las coordenadas y por qué funcionan de esa forma, una herramienta muy útil es GeoGebra. Permite visualizar puntos y figuras en 3D, por lo que resulta ideal para comprender dónde se sitúan los vértices y cómo se construyen las caras de una malla.
 
 

Este ultimo segmento es puro chatGPT y a regañadientes, lo he intentado explicar una docena de veces con mis propias palabras, pero me salían cosas que solo hoy iba a entender y la semana no iba a tener ni idea de que hablo, seguro que acabo de perder al publico que prefería la explicación que ni yo entendida porque al menos estaba hecho por un humano. 
 
He revisado de nuevo la versión de MakerTech y creo que es mejor empezar por este video para comprender los voxeles, el codigo se entiende mucho mejor (De forma relativa, me ha costado lo suyo entenderlo)

No hay comentarios:

Publicar un comentario