Parte: 2 — Desarrollo 3D: motores, escenas y transformaciones · Fuente: Documentación oficial de Godot 4 — Importing 3D scenes ⏱️ Duración estimada: 60 min · Nivel: Intermedio
Aprender a llevar modelos 3D creados fuera de Godot (en Blender u otras herramientas, o descargados de bibliotecas de assets) hasta tu escena, con el aspecto y la escala correctos. Entenderás por qué el formato glTF/GLB es el recomendado, cómo funciona el pipeline Blender → Godot, y cómo resolver los problemas clásicos: escala multiplicada por 100, ejes intercambiados, normales invertidas y texturas que no aparecen.
Al final habrás importado un modelo real, lo habrás instanciado sobre un suelo, corregido su escala y orientación, y sabrás leer el panel de importación para diagnosticar problemas.
Al finalizar, el alumno podrá:
Node3D.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Formatos 3D (glTF, GLB, .blend) | Elegir bien evita pérdida de datos y dolores de cabeza. |
| 2 | Por qué glTF/GLB | Es abierto, moderno y el mejor soportado por Godot 4. |
| 3 | Pipeline Blender → Godot | Saber el flujo evita reimportar mil veces. |
| 4 | Escala y ejes (Y-up) | Blender y Godot difieren; corregirlo es el paso más olvidado. |
| 5 | Importar como escena | Godot convierte el archivo en una escena instanciable. |
| 6 | Materiales importados | Entender qué se conserva y qué hay que rehacer. |
| 7 | Problemas comunes | Escala x100, normales y texturas rotas tienen solución conocida. |
.tscn.Necesitas Godot 4.x y, opcionalmente, Blender desde https://www.blender.org/download/. Consulta la guía oficial de importación de escenas 3D en https://docs.godotengine.org/en/stable/tutorials/assets_pipeline/importing_3d_scenes/index.html y las especificaciones de glTF en https://www.khronos.org/gltf/. Para exportar desde Blender revisa https://docs.blender.org/manual/en/latest/addons/import_export/scene_gltf2.html. Puedes descargar un modelo glTF libre desde una biblioteca como https://market.pmnd.rs/ o los ejemplos de Khronos en https://github.com/KhronosGroup/glTF-Sample-Assets. Crea un proyecto 3D nuevo.
Importaremos un modelo glTF, lo colocaremos sobre un suelo y corregiremos su escala y orientación por código como red de seguridad.
Consigue un archivo .glb o .gltf (por ejemplo, un modelo sencillo de los ejemplos de Khronos como el "Duck") y copia el archivo dentro de la carpeta del proyecto de Godot, en res://modelos/. Godot lo importará automáticamente al detectarlo.
Selecciona el archivo importado en el panel Sistema de archivos y abre la pestaña Importar. Ahí puedes ajustar la escala global y decidir cómo se generan materiales y colisiones. Si el modelo se ve enorme, prueba una escala de 0.01 (corrige el clásico x100). Pulsa Reimportar.
Crea la escena principal: un Node3D raíz Nivel, un suelo con StaticBody3D que contenga una MeshInstance3D con un BoxMesh plano y ancho (por ejemplo escala Vector3(10, 0.2, 10)), una Camera3D y una DirectionalLight3D.
Adjunta este script al nodo raíz. Instancia el modelo por código y ajusta escala y orientación para asegurar que quede bien apoyado y encarando la cámara:
extends Node3D
# Cargamos la escena importada del modelo glTF.
@export var modelo_escena: PackedScene = preload("res://modelos/pato.glb")
@export var escala_correccion: float = 1.0
@export var giro_y_grados: float = 180.0
func _ready() -> void:
# Instanciamos el modelo importado.
var modelo := modelo_escena.instantiate()
add_child(modelo)
# Nos aseguramos de que sea un Node3D para transformarlo.
if modelo is Node3D:
var m := modelo as Node3D
# Corrección de escala por si el import quedó grande/pequeño.
m.scale = Vector3.ONE * escala_correccion
# Corrección de orientación (muchos modelos miran a +Z).
m.rotation_degrees.y = giro_y_grados
# Apoyamos el modelo sobre el suelo (y = 0).
m.position = Vector3(0, 0, 0)
print("Modelo instanciado. AABB usado para verificar apoyo.")
# Colocamos la cámara para ver el modelo sobre el suelo.
$Camera3D.position = Vector3(0, 2, 5)
$Camera3D.look_at(Vector3(0, 0.5, 0), Vector3.UP)
Asegúrate de que la ruta del preload coincide con el nombre real de tu archivo. Ejecuta con F6. Deberías ver el modelo apoyado sobre el suelo, iluminado y encarando la cámara.
Diagnóstico práctico: si el modelo aparece gigante, ajusta escala_correccion (por ejemplo 0.01) o corrige la escala en el panel Importar y reimporta. Si mira hacia el lado contrario, cambia giro_y_grados. Si se ve oscuro o con caras que desaparecen al girar la cámara, probablemente tenga normales invertidas: revísalo en Blender (Recalculate Normals Outside) y reexporta a glTF.
for.albedo_color.CollisionShape3D al modelo para que un objeto físico pueda apoyarse sobre él._process para inspeccionar todas sus caras y detectar normales invertidas..blend directo si tienes Blender) y compara el resultado con el glTF.Importa un modelo glTF externo, corrige su escala y orientación para que quede correctamente apoyado sobre un suelo, e instáncialo por código junto a al menos una copia adicional colocada en otra posición. Criterio de aceptación: al ejecutar, ambos modelos aparecen a escala razonable (ni gigantes ni microscópicos), apoyados sobre el suelo sin flotar ni hundirse, orientados de forma visible hacia la cámara, y el material se ve iluminado correctamente sin caras negras por normales invertidas.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El modelo aparece gigantesco (x100) | Diferencia de unidades Blender/Godot. Ajusta la escala en el panel Importar (p. ej. 0.01) y reimporta. |
| El modelo está tumbado o mira al lado incorrecto | Diferencia Z-up vs Y-up. Exporta desde Blender con Y-up o corrige rotation_degrees en Godot. |
| Caras negras o que desaparecen al girar | Normales invertidas. En Blender usa "Recalculate Normals Outside" y reexporta. |
| Las texturas no aparecen | Rutas rotas o texturas no empaquetadas. Usa .glb (binario) que incluye todo, o coloca las texturas junto al .gltf. |
preload falla: recurso no encontrado |
La ruta no coincide con el archivo real. Verifica el nombre exacto en res://modelos/. |
| Cambios en el material no se guardan | El material es de solo lectura al venir importado. Extráelo ("Make Unique") antes de editarlo. |
❓ ¿Por qué se recomienda glTF y no FBX u OBJ? glTF es abierto, moderno y transporta geometría, materiales PBR y animación de forma estandarizada. OBJ no lleva animación ni materiales PBR completos, y FBX es propietario y con soporte más frágil.
❓ ¿Puedo importar archivos .blend directamente? Sí, si tienes Blender instalado y configurado en Godot. Es cómodo durante el desarrollo, pero para entregar el proyecto conviene exportar a glTF por portabilidad.
❓ ¿Debo corregir la escala en el import o por código? Preferentemente en el panel Importar, para que el modelo llegue ya correcto a todas las escenas. La corrección por código es una red de seguridad puntual.
❓ ¿Qué hago si el modelo trae varios objetos y materiales? Godot lo importa como una escena con su jerarquía. Puedes instanciarla completa, o abrirla y extraer materiales y submallas individuales para editarlos.
Clase 049 - Mallas, materiales y MeshInstance3D