Importando escenas 3D

Importador de escenas de Godot

Cuando se trata de recursos 3D, Godot tiene un importador flexible y configurable.

Godot trabaja con escenas. Esto significa que toda la escena en la que se está trabajando en su DCC 3D favorito se transferirá lo más fielmente posible.

Godot supports the following 3D scene file formats:

  • DAE (COLLADA), que es actualmente el workflow más maduro.
  • glTF 2.0. Both text and binary formats are supported. Godot has full support for it, but the format is new and gaining traction.
  • Formatos OBJ (Wavefront). También está totalmente soportado, pero bastante limitado (sin soporte para pivotes, esqueletos, etc).
  • ESCN, a Godot specific format that Blender can export with a plugin.

Simplemente copia el archivo de escena junto con la textura al repositorio del proyecto, y Godot hará una importación completa.

Es importante que la malla no se deforme por los huesos al exportarla. Asegúrate que el esqueleto se restablezca a su posición T o posición de reposo predeterminada antes de exportarlo con tu editor 3D favorito.

¿Por qué no FBX?

La mayoría de los motores de juego utilizan el formato FBX para importar escenas 3D, que es definitivamente uno de los más estandarizados de la industria. Sin embargo, este formato requiere el uso de una librería cerrada de Autodesk que se distribuye con términos de licencia más restrictivos que Godot.

El plan es, en algún momento en el futuro, ofrecer un plug-in binario usando GDNative.

Exportación de archivos DAE desde Maya y 3DS Max

Autodesk agregó soporte integrado para COLLADA a Maya y 3DS Max, pero está roto por defecto y no debería ser usado. La mejor manera de exportar este formato es usando los plugins OpenCollada. Funcionan bien, aunque no siempre están actualizados con las últimas versiones del software.

Exportación de archivos DAE desde Blender

Blender también tiene integrado soporte para COLLADA, pero igualmente está roto y no debe ser usado.

Godot proporciona un Plugin Python que hará un trabajo mucho mejor al exportar las escenas.

Exporting glTF 2.0 files from Blender

There are three ways to export glTF files from Blender. As a glTF binary (.glb file), glTF embedded (.gltf file), and with textures (gltf + .bin + textures).

glTF binary files are the smallest of the three options. They include the mesh and textures set up in Blender. When brought into Godot the textures are part of the object’s material file.

glTF embedded files function the same way as binary files. They don’t provide extra functionality in Godot, and shouldn’t be used since they have a larger file size.

There are two reasons to use glTF with the textures separate. One is to have the scene description in a text based format and the binary data in a separate binary file. This can be useful for version control if you want to review changes in a text based format. The second is you need the texture files separate from the material file. If you don’t need either of those glTF binary files are fine.

Nota

Blender does not export emissive textures with the glTF file. If your model uses one it must be brought in separately.

Exportar archivos ESCN desde Blender

El más poderoso, llamado godot-blender-exporter. Utiliza archivos .escn que es un tipo de archivo .tscn (archivo de escena Godot) con otro nombre, este guarda la mayor cantidad de información posible de una escena de Blender.

El exportador ESCN tiene un documento detallado ` <escn_exporter/index.html>`__ que describe su funcionalidad y uso.

Flujos de trabajo de importación

El importador de escenas Godot permite diferentes flujos de trabajo con respecto a cómo se importan los datos. Dependiendo de muchas opciones, es posible importar una escena con:

  • Materiales externos (por defecto): Donde cada material se guarda en un archivo de recursos. Se mantienen las modificaciones.
  • Mallas externas: Donde cada malla se guarda en un archivo diferente. Muchos usuarios prefieren trabajar con mallas directamente.
  • Animaciones externas: Permitir que las animaciones guardadas se modifiquen y combinen cuando cambien las fuentes.
  • Escenas externas: Guarda los nodos raíz de las escenas importadas, cada uno como una escena separada.
  • Una sola escena: Un único archivo de escena con todo integrado.
../../../_images/scene_import1.png

Como los distintos desarrolladores tienen necesidades diferentes, este proceso de importación es altamente personalizable.

Opciones de Importación

El importador tiene varias opciones, que se analizarán más adelante:

../../../_images/scene_import2.png

Nodos

Tipos de Raíz

Por defecto, el tipo de nodo raíz en las escenas importadas es «Spatial», pero puede modificarse.

Nombre de la Raíz

Permite establecer un nombre específico para el nodo raíz generado.

Root Scale

The scale of the root node.

Script Personalizado

Se puede proporcionar un script especial para procesar toda la escena después de la importación. Esto es ideal para post-procesamiento, cambio de materiales, hacer cosas divertidas con la geometría, etc.

Crea un script como este:

tool # needed so it runs in the editor
extends EditorScenePostImport

func post_import(scene):
  # do your stuff here
  return scene # remember to return the imported scene

La función post_import toma la escena importada como argumento (el parámetro es en realidad el nodo raíz de la escena). La escena que será utilizada debe ser devuelta. Puede ser una diferente.

Almacenamiento

Por defecto, Godot importa una sola escena. Esta opción permite especificar que los nodos debajo de la raíz serán cada uno una escena separada e instanciada en la importada.

Por supuesto, instanciar estas escenas importadas en otros lugares manualmente también funciona.

Materiales

Localización

Godot soporta materiales en mallas o nodos. Por defecto, los materiales se colocarán en cada nodo.

Almacenamiento

Los materiales pueden almacenarse dentro de la escena o en archivos externos. Por defecto, se almacenan en archivos externos, por lo que es posible editarlos. Esto se debe a que la mayoría de los DCC 3D no tienen las mismas opciones de materiales que las presentes en Godot.

Cuando los materiales están integrados, se perderán cada vez que se modifique y se vuelva a importar la escena de origen.

Keep On Reimport

Una vez que los materiales son editados para usar las características de Godot, el importador mantendrá los editados e ignorará los que vienen de la escena fuente. Esta opción sólo está presente si los materiales se guardan como archivos.

Modelos

Compresión

Hace que las mallas utilicen números menos precisos para múltiples aspectos de la malla con el fin de ahorrar espacio.

Estos son:
  • Matriz de Transformación (Ubicación, rotación y escala): flotante de 32 bits a entero con signo de 16 bits.
  • Vértices: Flotante de 32 bits a un entero con signo de 16 bits.
  • Normal: Flotante de 32 bits a un entero sin signo de 32 bits.
  • Tangentes: Flotante de 32 bits a un entero sin signo de 32 bits.
  • Colores de vértices: Flotante de 32 bits a un entero sin signo de 32 bits.
  • UV: Flotante de 32 bits a un entero sin signo de 32 bits.
  • UV2: Flotante de 32 bits a un entero sin signo de 32 bits.
  • Pesos de los vértices: Flotante de 32 bits a un entero sin signo de 16 bits.
  • Huesos del armazón: Flotante de 32 bits a un entero sin signo de 16 bits.
  • Índice del array: entero sin signo de 32 o 16 bits en función de cuántos elementos contiene.
Información adicional:
  • UV2 = El segundo canal UV para texturas de detalle y texturas lightmap preparadas.
  • Índice de array = Un array de números que numeran cada elemento de los arrays anteriores; es decir, numeran los vértices y normales.

En algunos casos, esto podría provocar una pérdida de precisión, por lo que puede ser conveniente desactivar esta opción. Por ejemplo, si una malla es muy grande o se están importando múltiples mallas que cubren una gran área, la compresión de la importación de esta(s) malla(s) puede llevar a que los espacios en la geometría o los vértices no estén exactamente donde deberían estar.

Asegurar Tangentes

Si se van a utilizar texturas con normal mapping, las mallas deben tener arreglos de tangentes (tangent arrays). Esta opción garantiza que se generen si no están presentes en la escena de origen. Godot usa Mikktspace para esto, pero siempre es mejor tenerlos generados en el exportador.

Almacenamiento

Las mallas se pueden almacenar en archivos separados (recursos) en lugar de integrados. Esto no tiene una gran utilidad a menos que uno quiera construir objetos con ellas directamente.

Esta opción se ofrece para ayudar a aquellos que prefieren trabajar directamente con mallas en lugar de escenas.

Light Baking

Whether or not the mesh is used in baked lightmaps.

  • Disabled: The mesh is not used in baked lightmaps.
  • Enable: The mesh is used in baked lightmaps.
  • Gen Lightmaps: The mesh is used in baked lightmaps, and unwraps a second UV layer for lightmaps.

Nota

For more information on light baking see Baked lightmaps.

Archivos Externos

Las mallas y los materiales generados se pueden almacenar opcionalmente en un subdirectorio con el nombre de la escena.

Opciones de animación

Godot proporciona muchas opciones con respecto a cómo se tratan los datos de animación. Algunos exportadores (como Blender), pueden generar muchas animaciones en un solo archivo. Otros, como 3DS Max o Maya, necesitan muchas animaciones en la misma línea de tiempo o, en el peor de los casos, poner cada animación en un archivo separado.

../../../_images/scene_import3.png

La importación de animaciones está activada de forma predeterminada.

FPS

La mayoría de los formatos de exportación 3D almacenan la línea de tiempo de la animación en segundos en lugar de fotogramas. Para garantizar que las animaciones se importan lo más fielmente posible, especifica los fotogramas por segundo utilizados para editarlas. Si no se hace esto, el resultado puede ser una animación temblorosa.

Filtro de Script

Es posible especificar un filtro de script en una sintaxis especial para decidir qué pistas de qué animaciones se deben mantener. (@TODO necesita documentación)

Almacenamiento

Por defecto, las animaciones se guardan como integradas. En su lugar, es posible guardarlas en un archivo. Esto permite añadir pistas personalizadas a las animaciones y mantenerlas después de una reimportación.

Optimizador

Cuando se importan animaciones, se ejecuta un optimizador que reduce considerablemente el tamaño de la animación. En general, esto siempre debe estar activado, a menos que sospeches que una animación puede estar rota debido a este proceso.

Clips

Es posible especificar varias animaciones de una misma línea de tiempo como clips. Especifica de qué fotograma debe tomarse cada clip (y, por supuesto, no olvides especificar la opción FPS de arriba).

Herencia de escenas

In many cases, it may be desired to make modifications to the imported scene. By default, this is not possible because if the source asset changes (source .dae, .gltf, .obj file re-exported from 3D modelling app), Godot will re-import the whole scene.

Sin embargo, es posible hacer modificaciones locales utilizando la Herencia de Escenas. Intenta abrir la escena importada y aparecerá el siguiente cuadro de diálogo:

../../../_images/scene_import4.png

En las escenas heredadas, las únicas limitaciones para las modificaciones son:

  • Los nodos no pueden ser eliminados (pero pueden ser agregados en cualquier parte).
  • Los Sub-Recursos no pueden ser editados (guárdalos externamente como se describe arriba para este caso)

Aparte de eso, ¡todo está permitido!

Consejos para la Importación

Muchas veces, al editar una escena, hay tareas comunes que deben realizarse después de la exportación:

  • Añadiendo detección de colisiones a los objetos
  • Configurar objetos como mallas de navegación
  • Eliminar nodos que no se usan en el motor del juego (como luces específicas usadas para modelar)

Para simplificar este flujo de trabajo, Godot ofrece algunos sufijos que se pueden añadir a los nombres de los objetos en su software de modelado 3D. Cuando se importan, Godot los detecta y realiza acciones automáticamente:

Eliminar nodos (-noimp)

Los nombres de nodos que tengan este sufijo se eliminarán en el momento de la importación, independientemente de su tipo. No aparecerán en la escena importada.

Crear colisiones (-col, -colonly, -convcolonly)

La opción «-col» funcionará sólo para los nodos Mesh. Si se detecta, se añadirá un nodo hijo de colisión estática, utilizando la misma geometría que la malla.

Sin embargo, a menudo se da el caso de que la geometría visual es demasiado compleja o irregular para las colisiones, que terminan por no funcionar bien.

Para resolver esto, existe el modificador «-colonly», que eliminará la malla al importarla y creará una colisión class_staticbody en su lugar. Esto ayuda a separar la malla visual de la colisión real.

La opción «-convcolonly» creará class_convexpolygonshape en lugar de class_concavepolygonshape.

La opción «-colonly» también se puede utilizar con los objetos vacíos de Blender. Al importarlo creará un class_staticbody con el nodo de colisión como hijo. El nodo de colisión tendrá una de las formas predefinidas, dependiendo del tipo de dibujo vacío del Blender:

../../../_images/3dimp_BlenderEmptyDrawTypes.png
  • Una flecha simple creará una class_rayshape
  • Un cubo creará un class_boxshape
  • Una imagen creará class_planeshape
  • Esfera (y otras no listadas) creará class_sphereshape

Para una mejor visibilidad en el editor de Blender, el usuario puede configurar la opción «X-Ray» en los vacíos de colisión y establecer un color distinto para ellos en User Preferences / Themes / 3D View / Empty.

Crear navigation (-navmesh)

Un nodo de malla con este sufijo se convertirá en una malla de navegación. Se eliminará el nodo Mesh original.

Crea un VehicleBody (-vehicle)

Un nodo mesh con este sufijo se importará como un hijo a un nodo VehicleBody.

Crea un VehicleWheel (-wheel)

Un nodo mesh con este sufijo se importará como un hijo a un nodo VehicleWheel.

Rigid Body (-rigid)

Crea un rigid body a partir de esta malla.

Bucle de animación (-loop, -cycle)

Los clips de animación en el documento de COLLADA que comienzan o terminan con el token «loop» o «cycle» se importarán como una animación de Godot con la marca de loop establecida. Esto distingue entre mayúsculas y minúsculas y no requiere un guión.

En Blender, esto requiere usar el NLA Editor y nombrar la Acción con el prefijo o el sufijo «loop» o «cycle».