Formato FBX: El Estándar Industrial para Animación 3D
FBX — abreviatura de Filmbox — es un formato propietario de intercambio 3D desarrollado por Kaydara en 1996 y adquirido posteriormente por Autodesk en 2006. Desde entonces se ha convertido en uno de los formatos más adoptados en los pipelines de producción 3D, siendo fundamental en el desarrollo de videojuegos, efectos visuales, producción cinematográfica y visualización arquitectónica. Si alguna vez has importado un personaje en Unity, exportado una escena de Maya a Unreal Engine, o descargado un modelo 3D animado de un marketplace, casi con seguridad has trabajado con un archivo FBX.
Breve Historia del FBX
El formato fue creado originalmente para soportar el intercambio de datos de captura de movimiento entre la aplicación MotionBuilder de Kaydara y otras herramientas 3D. MotionBuilder fue (y sigue siendo) un estándar de la industria para la animación de personajes en tiempo real, y la necesidad de mover personajes riggueados y animados entre diferentes paquetes de software impulsó el desarrollo de FBX.
Cuando Autodesk adquirió Kaydara en 2006, FBX se integró en el ecosistema Autodesk junto con Maya, 3ds Max y MotionBuilder. Autodesk publica un SDK FBX oficial que permite a desarrolladores terceros leer y escribir el formato, lo que explica que Blender, Cinema 4D y motores de juegos como Unity y Unreal Engine soporten FBX de forma nativa.
El formato existe en dos variantes: binario (.fbx) y ASCII (también .fbx, pero legible por humanos). Los archivos binarios son compactos y cargan más rápido; los archivos ASCII son más grandes pero pueden inspeccionarse en un editor de texto, algo útil para depuración.
Qué Almacena un Archivo FBX
FBX es un formato de descripción de escena, lo que significa que puede codificar una escena 3D completa incluyendo:
- Geometría — mallas poligonales, superficies NURBS, subdivisión de superficies y curvas spline
- Materiales y texturas — shaders de superficie, mapas UV y archivos de textura embebidos o referenciados
- Rigs de esqueleto — estructuras jerárquicas de huesos vinculados a mallas mediante pesos de piel
- Animación — curvas de keyframes, animación FK/IK, blend shapes (morph targets) y restricciones
- Cámaras y luces — posición, orientación, propiedades de lente e intensidad
- Jerarquía de escena — relaciones padre-hijo, transformaciones y puntos de pivote
- Nivel de detalle (LOD) — múltiples resoluciones de malla para optimización en tiempo de ejecución
Esta amplitud es lo que hace a FBX tan dominante: no es simplemente un formato de malla (como OBJ o STL) — es un formato de escena completo que preserva las relaciones entre objetos, sus estados de animación y los materiales que definen su apariencia.
Estructura Interna del FBX
Comprender la estructura interna del FBX ayuda cuando se depuran problemas de importación/exportación.
Estructura del FBX Binario
Un archivo FBX binario comienza con una cabecera de 27 bytes:
FBXHeaderExtension
FBXHeaderVersion: 1003
FBXVersion: 7400
Creator: "Blender (stable FBX IO) - 4.1.1"
El número de versión es crítico. FBX 7.4 (lanzado con FBX SDK 2013) introdujo normales por vértice almacenadas más eficientemente y mejoró el manejo de curvas de animación. FBX 7.5 añadió soporte para archivos grandes más allá de 2 GB. Muchos motores de juegos tienen requisitos de versión mínima — Unity 2022 requiere al menos FBX 7.4.
Tras la cabecera, el archivo se organiza en nodos y propiedades dispuestos como un árbol:
Objects {
Geometry: 123456, "Geometry::Cubo", "Mesh" {
Vertices: [...]
PolygonVertexIndex: [...]
LayerElementNormal: {
Normals: [...]
}
}
Model: 234567, "Model::Cubo", "Mesh" {
Properties70: {
P: "Lcl Translation", "Lcl Translation", "", "A", 0,0,0
}
}
}
Connections {
C: "OO", 234567, 0
C: "OO", 123456, 234567
}
La sección Connections es la que vincula la geometría a los modelos, los modelos a los huesos, y los huesos a los deformadores de piel. Cada conexión se identifica mediante el ID entero de 64 bits único asignado a cada objeto.
Rigging de Esqueleto y Pesos de Piel
La característica más poderosa de FBX respecto a formatos de malla más simples es su capacidad para almacenar rigs de esqueleto completos. Un rig consta de:
- Objetos LimbNode — los huesos individuales, cada uno un nodo en la jerarquía de escena
- Deformador Skin — vincula la malla al esqueleto
- Sub-deformadores Cluster — uno por hueso, almacenando la lista de índices de vértices que influye y sus pesos
Deformer: "Deformer::Armature", "Skin" {
Deformer: "SubDeformer::spine", "Cluster" {
Indexes: [0, 1, 2, 5, 7, ...]
Weights: [1.0, 0.8, 0.5, 0.3, ...]
TransformMatrix: [...]
TransformLinkMatrix: [...]
}
}
La TransformLinkMatrix es la transformación en espacio mundo del hueso en el momento del binding — a veces llamada "bind pose". Esta matriz es esencial para calcular la deformación correcta de la malla en tiempo de ejecución. Las matrices de bind incorrectas o ausentes son la causa más común de mallas distorsionadas tras la importación de FBX.
Blend Shapes y Morph Targets
FBX soporta animación facial mediante deformadores BlendShape, que almacenan posiciones alternativas para los vértices:
Deformer: "Deformer::sonrisa", "BlendShape" {
Deformer: "SubDeformer::canal_sonrisa", "BlendShapeChannel" {
DeformPercent: 0.0
FullWeights: [100.0]
Geometry: { ... deltas de vértices ... }
}
}
Los motores de juegos mapean estos directamente a sliders de blend shapes (Unity) o morph targets (Unreal Engine), permitiendo animación facial expresiva sin un rig facial completo.
FBX en Motores de Juegos
Unity
Unity importa archivos FBX a través de su FBX Importer integrado. Configuraciones clave:
- Factor de escala — Unity usa metros; la mayoría de herramientas 3D usan centímetros por defecto. Un factor de 0.01 corrige esto.
- Importar normales — elegir entre normales importadas y normales calculadas por Unity
- Compresión de animación — reducción de keyframes para reducir tamaño del archivo
- Definición de avatar — para personajes humanoides, Unity mapea los huesos FBX a su sistema de avatar Mecanim
Unreal Engine
Unreal usa un importador similar pero con convenciones diferentes:
- Y-up vs Z-up — Unreal usa Z-up; la mayoría de archivos FBX son Y-up de Maya. El importador maneja la rotación automáticamente.
- Importación LOD — múltiples mallas en un FBX pueden importarse como niveles LOD si se nombran con sufijos
_LOD0,_LOD1 - Nanite — el sistema Nanite de Unreal 5 acepta mallas FBX y genera automáticamente la jerarquía de micropolígonos
Conversión de Archivos FBX
Python con el FBX SDK
import fbx
manager = fbx.FbxManager.Create()
importer = fbx.FbxImporter.Create(manager, "")
scene = fbx.FbxScene.Create(manager, "scene")
importer.Initialize("personaje.fbx", -1)
importer.Import(scene)
root = scene.GetRootNode()
for i in range(root.GetChildCount()):
child = root.GetChild(i)
print(f"Nodo: {child.GetName()}, Tipo: {child.GetTypeName()}")
manager.Destroy()
API de Python en Blender
import bpy
bpy.ops.import_scene.fbx(
filepath="/ruta/al/personaje.fbx",
use_manual_orientation=False,
global_scale=1.0,
bake_anim=True,
bake_anim_step=1.0,
)
# Exportar de vuelta a FBX
bpy.ops.export_scene.fbx(
filepath="/ruta/al/salida.fbx",
use_selection=False,
apply_scale_options='FBX_SCALE_ALL',
axis_forward='-Z',
axis_up='Y',
bake_anim=True,
add_leaf_bones=False,
)
La opción add_leaf_bones=False suprime los huesos de hoja adicionales que Blender añade al final de cada cadena de huesos — son inofensivos pero pueden confundir algunos importadores de motores de juegos.
FBX vs Otros Formatos 3D
| Característica | FBX | glTF/GLB | OBJ | Collada (DAE) |
|---|---|---|---|---|
| Animación | ✅ Rig completo + keyframes | ✅ Rig completo + keyframes | ❌ Ninguna | ✅ Rig completo + keyframes |
| Estándar abierto | ❌ Propietario (Autodesk) | ✅ Khronos Group | ✅ Wavefront | ✅ Khronos Group |
| Opción binaria | ✅ Sí | ✅ GLB | ❌ Solo texto | ❌ Solo texto |
| Sistema de materiales | Lambert/Phong/Stingray | PBR (metálico-rugosidad) | MTL básico | COLLADA FX |
| Adopción en la industria | Animación/juegos | Web/AR/VR | Modelado | CAD/simulación |
Problemas Comunes
Problemas de escala — Diferentes software usa unidades predeterminadas distintas. Siempre verifica el factor de escala en la importación. Un personaje que aparece 100× demasiado grande en Unity fue exportado en centímetros y necesita una corrección de escala de 0.01.
Texturas faltantes — FBX puede embeber texturas (aumentando el tamaño del archivo) o referenciarlas como rutas externas. Las referencias externas se rompen si mueves el archivo sin su carpeta de texturas.
Conflictos de capas de animación — FBX soporta múltiples capas de animación. Algunos importadores las fusionan; otros importan solo la capa base. Verifica qué animaciones se transfieren al mover entre herramientas.
Confusión Y-up vs Z-up — Maya y la mayoría de herramientas 3D usan Y-up; Blender usa Z-up internamente pero exporta Y-up. Confirma siempre la orientación de ejes en el diálogo de exportación.
Conclusión
FBX sigue siendo la piedra angular del pipeline profesional de animación 3D precisamente porque transporta tanta información: no solo la geometría, sino el esqueleto, los pesos de piel, las curvas de animación y la jerarquía de escena. Comprender su estructura — desde cabeceras binarias y grafos de conexiones hasta deformadores de blend shapes y unidades de tiempo de curvas de animación — transforma FBX de una caja negra en un formato de activo transparente y depurable. Ya sea que estés construyendo un pipeline de personajes para juegos, un flujo de trabajo de efectos visuales o un sistema de visualización arquitectónica, FBX seguirá siendo una pieza central de tu conjunto de herramientas en el futuro previsible.
Conversiones relacionadas
Conversiones frecuentes del catálogo: