Prototipando niveles con CSG

CSG significa Geometría Sólida Constructiva, y es una herramienta para combinar formas básicas o mallas personalizadas para crear formas más complejas. En el software de modelado 3D, CSG es mayormente conocido como "Operadores Booleanos".

El prototipo de nivel es uno de los principales usos del CSG en Godot. Esta técnica permite a los usuarios crear versiones simples de las formas más comunes combinando primitivas. Se pueden crear ambientes interiores utilizando primitivas invertidas.

Nota

Los nodos CSG en Godot están destinados principalmente a la creación de prototipos. No hay soporte incorporado para mapeo de UV o edición de polígonos 3D (aunque se pueden usar polígonos 2D extruidos con el nodo CSGPolygon).

Si estás buscando una herramienta de diseño de niveles fácil de usar para un proyecto, tal vez quieras usar Qodot en su lugar. Te permite diseñar niveles usando "TrenchBroom" <https://kristianduske.com/trenchbroom/>`__ e importarlos en Godot.

../../_images/csg.gif

Introducción a nodos CSG

Al igual que otras características de Godot, el CSG se apoya en forma de nodos. Estos son los nodos de CSG:

../../_images/csg_nodes.png ../../_images/csg_mesh.png

Funcionalidades de herramientas CSG

Cada nodo CSG soporta 3 tipos de operaciones booleanas:

  • Unión: La geometría de ambas primitivas se fusiona, la geometría que se intersecta se elimina.

  • Intersección: Sólo queda la geometría de intersección, el resto se elimina.

  • Sustracción: La segunda forma se resta de la primera, dejando una mella con su forma.

../../_images/csg_operation_menu.png ../../_images/csg_operation.png

PolígonoCSG

El nodo CSGPolygon extruye a lo largo de un polígono dibujado en 2D (en coordenadas X, Y) de las siguientes maneras:

  • Profundidad: Extraído de vuelta una cantidad dada.

  • Girar: Extruido mientras gira alrededor de su origen.

  • Ruta: Extruido a lo largo de un nodo Ruta. Esta operación se llama comúnmente "lofting".

../../_images/csg_poly_mode.png ../../_images/csg_poly.png

Nota

El modo Ruta debe estar provisto de un nodo Path para funcionar. En el nodo Ruta, dibuja el camino y el polígono en CSGPolygon extruirá a lo largo del camino dado.

Mallas personalizadas

Cualquier malla puede ser usada para CSGMesh; la malla puede ser modelada en otro software e importada a Godot. Se admiten múltiples materiales. Hay algunas restricciones para la geometría:

  • debe ser cerrada,

  • no debe intersectarse a si mismo,

  • no debe contener caras internas,

  • cada borde debe conectarse sólo a otras dos caras.

../../_images/csg_custom_mesh.png

CombinadorCSG

El nodo CSGCombiner es una forma vacía que se utiliza para la organización. Sólo combinará nodos hijos.

Orden de procesamiento

Cada nodo CSG primero procesará sus nodos hijos y sus operaciones: unión, intersección o sustracción, en orden de árbol, y se los aplicará a sí mismo uno tras otro.

Nota

En interés del rendimiento, asegúrese de que la geometría del CSG siga siendo relativamente simple, ya que las mallas complejas pueden tardar un tiempo en procesarse. Si se agregan objetos juntos (como objetos de mesa y de habitación), crearlos como árboles CSG separados. Forzar demasiados objetos en un solo árbol eventualmente comenzará a afectar el rendimiento. Utiliza las operaciones binarias sólo donde realmente las necesites.

Prototipando un nivel

Haremos un prototipo de una sala para practicar el uso de herramientas CSG.

Truco

Trabajar en la proyección Ortonormal da una mejor visión al combinar las formas del CSG.

Nuestro nivel contendrá estos objetos:

  • una habitación,

  • una cama,

  • una lámpara,

  • un escritorio,

  • una estantería.

Crear una escena con un nodo Sspacial como nodo raíz.

Truco

La iluminación por defecto del entorno no proporciona un sombreado claro en algunos ángulos. Cambia el modo de visualización usando Display Overdraw en el menú de vista 3D, o añade un nodo DirectionalLight para ayudarte a ver con claridad.

../../_images/csg_overdraw.png

Crea una CSGBox y llámala room, habilita la opción "Invertir caras" y cambia las dimensiones de tu habitación.

../../_images/csg_room.png ../../_images/csg_room_invert.png

A continuación, crear un CSGCombiner y nombrarlo desk.

Un escritorio tiene una superficie y 4 patas:

  • Crear 1 nodo infantil CSGBox en modo Unión para la superficie y ajusta las dimensiones.

  • Crea 4 nodos infantiles CSGBox en modo Unión para las piernas y ajusta las dimensiones.

Ajusta su ubicación para que se parece a un escritorio.

../../_images/csg_desk.png

Nota

Los nodos CSG dentro de un combinadorCSG sólo procesarán su operación dentro del combinador. Por lo tanto, los combinadorCSG se utilizan para organizar los nodos CSG.

Crea un CombinadorCSG y llámalo bed.

Nuestra cama consta de 3 partes: la cama, el colchón y una almohada. Crea una CSGBox y ajusta su dimensión para la cama. Crea otra CSGBox y ajusta su dimensión para el colchón.

../../_images/csg_bed_mat.png

Crearemos otro CombinadorCSG llamado pillow como el hijo de bed. El árbol de la escena debería verse así:

../../_images/csg_bed_tree.png

Combinaremos 3 nodos de la CSGSphere en modo Unión para formar una almohada. Escala el eje Y de las esferas y habilita Caras Suaves.

../../_images/csg_pillow_smooth.png

Selecciona el nodo pillow y cambia el modo a Sustracción; las esferas combinadas harán un agujero en el colchón.

../../_images/csg_pillow_hole.png

Trata de volver a unir el nodo pillow con el nodo Spatial de la raíz; el agujero desaparecerá.

Nota

Esto es para ilustrar el efecto del orden de procesamiento CSG. Dado que el nodo raíz no es un nodo CSG, los nodos CombinadorCSG son el final de las operaciones; esto muestra el uso de CombinadorCSG para organizar la escena CSG.

Deshacer el parentesco después de observar el efecto. La cama que has construido debería ser así:

../../_images/csg_bed.png

Crea un CombinadorCSG y llámalo lamp.

Una lámpara consta de 3 partes: el soporte, el poste y la pantalla de lampara. Crea un cilindroCSG, activa la opción Cono y hazlo el soporte. Crea otro cilindroCSG y ajustar las dimensiones para usarlo como un poste.

../../_images/csg_lamp_pole_stand.png

Usaremos un polígonoCSG para la pantalla de la lámpara de pantalla. Usaremos el modo Spin para el polígonoCSGP y dibujaremos un "trapezoide" <https://en.wikipedia.org/wiki/Trapezoid>`_ mientras que en Front View (teclado numérico 1); esta forma se extrudirá alrededor del origen y formará la pantalla de la lámpara.

../../_images/csg_lamp_spin.png ../../_images/csg_lamp_polygon.png ../../_images/csg_lamp_extrude.png

Ajusta la colocación de las 3 partes para que parezca una lámpara.

../../_images/csg_lamp.png

Crea un CombinadorCSG y llámalo bookshelf.

Usaremos 3 nodos CSGBox para la estantería. Crea un CSGBox y ajusta sus dimensiones; este será el tamaño de la estantería.

../../_images/csg_shelf_big.png

Duplicar la CSGBox y acortar las dimensiones de cada eje y cambiar el modo a Sustracción.

../../_images/csg_shelf_subtract.png ../../_images/csg_shelf_subtract_menu.png

Casi has construido un estante. Crea una CSGBox más para dividir el estante en dos niveles.

../../_images/csg_shelf.png

Ubica los muebles en el cuarto del modo que desees, tu escene debería verse así:

../../_images/csg_room_result.png

Has hecho un prototipo con éxito de una habitación con las herramientas CSG en Godot. Las herramientas CSG pueden utilizarse para diseñar todo tipo de niveles, como un laberinto o una ciudad; explora sus limitaciones a la hora de diseñar tu juego.

Usando texturas prototipo

El Material Spatial de Godot soporta mapeo triplanar, que puede ser usado para aplicar automáticamente una textura a objetos arbitrarios sin distorsión. Esto es útil cuando se usa CSG ya que Godot no soporta todavía la edición de mapas UV en los nodos CSG. El mapeado triplanar es relativamente lenta, lo que normalmente restringe su uso a superficies orgánicas como el terreno. Aún así, cuando se hacen prototipos, se puede usar para aplicar rápidamente texturas a niveles basados en CSG.

Nota

Si necesitas algunas texturas para el prototipo, Kenney hizo unas "texturas de prototipo con licencia CC0" <https://kenney.nl/assets/prototype-textures>`__.

Existen dos modos de aplicar un material a un nodo CSG:

  • Aplicándolo a un nodo CombinadorCSG como sobreescritura de material (Geometry > Material Override en el Inspector). Esto afectará a sus hijos automáticamente, pero hará imposible cambiar el material en hijos individuales.

  • Aplicando un material a los nodos individuales (Material en el Inspector). De esta manera, cada nodo CSG puede tener su propia apariencia. Los nodos CSG sustractivos aplicarán su material a los nodos en los que están "excavando".

Para aplicar el mapeo triplanar a un nodo CSG, selecciónelo, vaya al Inspector, haga clic en el texto [vacío] junto a Sobreescritura Material (o Material para nodos CSG individuales). Elija Nuevo Material Espacial. Haga clic en el icono del material recién creado para editarlo. Despliega la sección Albedo y carga una textura en la propiedad Texture. Ahora, despliega la sección Uv1 y marca Triplanar. Puedes cambiar el desplazamiento y la escala de la textura en cada eje jugando con las propiedades Escala y Desplazamiento justo arriba. Valores más altos en la propiedad Escala harán que la textura se repita más a menudo.

Truco

Puedes copiar un MaterialEspacial para reutilizarlo en los nodos del CSG. Para ello, haga clic en la flecha desplegable junto a una propiedad material en el Inspector y elija Copiar. Para pegarlo, selecciona el nodo al que quieres aplicar el material, haz clic en la flecha desplegable hacia abajo junto a su propiedad material y elige Pegar.