Formato 3MF: El Estándar Moderno para Archivos de Impresión 3D
3MF (3D Manufacturing Format) es un formato de archivo abierto basado en XML desarrollado por el Consorcio 3MF — un grupo que incluye a Microsoft, Autodesk, HP, Stratasys, Ultimaker, Dassault Systèmes y otros. Lanzado en 2015, 3MF fue diseñado desde cero para reemplazar al STL como el formato principal para la fabricación aditiva, combinando geometría, materiales, colores, configuraciones de impresión y estructuras de soporte en un único contenedor portable.
A diferencia del STL, que no codifica nada más que triángulos planos, 3MF transporta todo lo que un slicer necesita para reproducir una impresión exactamente: la geometría del modelo, las asignaciones de material, el mapa de color, las configuraciones de calidad de impresión e incluso instrucciones de corte específicas del vendedor. Es ahora el formato predeterminado en Windows 3D Builder, soportado nativamente en PrusaSlicer, Cura, Bambu Studio, Orca Slicer y la mayoría de los flujos de trabajo de impresión 3D modernos.
La Estructura del Contenedor 3MF
Un archivo 3MF es un archivo ZIP con la extensión .3mf. En su interior, sigue las Open Packaging Conventions (OPC) — el mismo formato contenedor utilizado por los documentos Office modernos (.docx, .xlsx). Esto significa que puedes abrir un archivo .3mf con cualquier herramienta ZIP:
modelo.3mf (archivo ZIP)
├── [Content_Types].xml ← Declaraciones de tipo MIME
├── _rels/
│ └── .rels ← Declaraciones de relaciones
└── 3D/
├── 3dmodel.model ← Geometría principal + materiales
├── _rels/
│ └── 3dmodel.model.rels ← Relaciones de texturas
└── Textures/
├── colorbase.png
└── metalico.png
Este enfoque de contenedor significa que texturas, miniaturas y archivos de configuración de impresión se agrupan junto con la geometría — una ventaja significativa sobre STL, que debe depender de archivos de textura gestionados por separado.
La Especificación Core de 3MF
La geometría se define en 3dmodel.model, un archivo XML:
<?xml version="1.0" encoding="UTF-8"?>
<model unit="millimeter" xml:lang="es"
xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"
xmlns:m="http://schemas.microsoft.com/3dmanufacturing/material/2015/02">
<metadata name="Title">Soporte Personalizado</metadata>
<metadata name="Designer">Equipo de Diseño</metadata>
<metadata name="CreationDate">2024-03-15</metadata>
<resources>
<basematerials id="1">
<base name="PLA Blanco" displaycolor="#FFFFFF"/>
<base name="PLA Rojo" displaycolor="#FF2000"/>
<base name="TPU Negro" displaycolor="#1A1A1A"/>
</basematerials>
<object id="2" type="model" pid="1" pindex="0">
<mesh>
<vertices>
<vertex x="0" y="0" z="0"/>
<vertex x="10" y="0" z="0"/>
<vertex x="10" y="10" z="0"/>
<vertex x="0" y="10" z="0"/>
<vertex x="5" y="5" z="8"/>
</vertices>
<triangles>
<triangle v1="0" v2="1" v3="4" pid="1" p1="0" p2="0" p3="0"/>
<triangle v1="1" v2="2" v3="4" pid="1" p1="1" p2="1" p3="1"/>
<triangle v1="2" v2="3" v3="4" pid="1" p1="2" p2="2" p3="2"/>
<triangle v1="3" v2="0" v3="4" pid="1" p1="0" p2="0" p3="0"/>
<triangle v1="0" v2="3" v3="2"/>
<triangle v1="0" v2="2" v3="1"/>
</triangles>
</mesh>
</object>
</resources>
<build>
<item objectid="2" transform="1 0 0 0 1 0 0 0 1 0 0 0"/>
</build>
</model>
Elementos estructurales clave:
<basematerials> — define una paleta de materiales/colores. Cada <base> tiene un nombre y un color de visualización en RGB hexadecimal. Los atributos pid y pindex en los triángulos referencian qué entrada de paleta se aplica a ese triángulo.
Material por triángulo — los atributos pid, p1, p2, p3 en los elementos <triangle> asignan materiales a nivel de triángulo, o incluso interpolan entre tres materiales diferentes a través de la superficie de un único triángulo. Este es el mecanismo para degradados de color y mezcla de materiales en los límites de impresión.
<build> — la lista de construcción especifica qué objetos imprimir y su transformación de colocación (una matriz afín 4×3, orden fila por fila). Múltiples ítems pueden colocarse en diferentes posiciones en la misma placa de construcción dentro de un único archivo 3MF.
La Extensión de Materiales y Propiedades
La especificación core de 3MF maneja asignaciones de material básicas, pero la extensión de Materiales y Propiedades añade:
- Textura 2D — texturas de color mapeadas por UV
- Grupos de color — arrays de color por vértice a nivel de vértice
- Materiales compuestos — mezclas de materiales base (por ejemplo, 60% PLA + 40% fibra de carbono)
- Multi-propiedades — apilar múltiples capas de propiedades en la misma geometría
<m:texture2d id="5" path="/3D/Textures/colorbase.png"
contenttype="image/png"
tilestyleu="wrap" tilestylev="wrap"
filter="linear"/>
<m:texture2dgroup id="6" texid="5">
<m:tex2coord u="0.0" v="0.0"/>
<m:tex2coord u="1.0" v="0.0"/>
<m:tex2coord u="0.5" v="1.0"/>
</m:texture2dgroup>
La Extensión de Retícula de Vigas
Para el diseño estructural ligero, 3MF incluye una extensión de Retícula de Vigas que codifica estructuras de retícula complejas de manera eficiente:
<bl:beamlattice minlength="0.1" radius="0.5" clippingmode="inside"
xmlns:bl="http://schemas.microsoft.com/3dmanufacturing/beamlattice/2017/06">
<bl:beams>
<bl:beam v1="0" v2="1" r1="0.5" r2="0.5"/>
<bl:beam v1="1" v2="4" r1="0.5" r2="0.3"/>
<bl:beam v1="0" v2="3" r1="0.5" r2="0.5"/>
</bl:beams>
</bl:beamlattice>
Esto permite que las estructuras de retícula giróide, Schwartz P y otras superficies mínimas triplemente periódicas (TPMS) se codifiquen como grafos de vigas en lugar de mallas trianguladas densas, reduciendo el tamaño de archivo en órdenes de magnitud para objetos con relleno de retícula interior.
3MF en Python
import zipfile
import xml.etree.ElementTree as ET
NS = {'core': 'http://schemas.microsoft.com/3dmanufacturing/core/2015/02'}
def leer_3mf(ruta_archivo):
with zipfile.ZipFile(ruta_archivo, 'r') as zf:
with zf.open('3D/3dmodel.model') as f:
tree = ET.parse(f)
root = tree.getroot()
vertices = []
for v in root.findall('.//core:vertices/core:vertex', NS):
vertices.append((
float(v.get('x')),
float(v.get('y')),
float(v.get('z'))
))
triangulos = []
for t in root.findall('.//core:triangles/core:triangle', NS):
triangulos.append((
int(t.get('v1')),
int(t.get('v2')),
int(t.get('v3'))
))
print(f"Vértices: {len(vertices)}")
print(f"Triángulos: {len(triangulos)}")
# Extraer metadatos
for meta in root.findall('.//core:metadata', NS):
print(f"{meta.get('name')}: {meta.text}")
return vertices, triangulos
vertices, tris = leer_3mf('modelo.3mf')
Conversión Entre 3MF y Otros Formatos
CLI de PrusaSlicer:
prusa-slicer --export-3mf --output modelo.3mf modelo.stl
prusa-slicer --export-stl --output modelo.stl modelo.3mf
Python en Blender (con el complemento 3MF):
import bpy
bpy.ops.import_mesh.threemf(filepath='/ruta/al/modelo.3mf')
bpy.ops.export_mesh.threemf(filepath='/ruta/al/salida.3mf')
3MF vs STL vs AMF
| Característica | 3MF | STL (binario) | AMF |
|---|---|---|---|
| Estándar abierto | ✅ Consorcio 3MF | ✅ de facto | ✅ ISO/ASTM 52915 |
| Formato contenedor | ✅ ZIP/OPC | ❌ Archivo único | ❌ XML único |
| Multi-material | ✅ Sí | ❌ No | ✅ Sí |
| Texturas | ✅ Agrupadas en ZIP | ❌ No | ✅ Base64 en XML |
| Estructuras de retícula | ✅ Ext. retícula de vigas | ❌ No | ❌ No |
| Capas pre-cortadas | ✅ Extensión de corte | ❌ No | ❌ No |
| Configuración de impresión | ✅ Sí | ❌ No | ❌ No |
| Superficies curvas | ❌ Solo planas | ❌ Solo planas | ✅ Sí |
| Soporte de slicers | ✅ Universal moderno | ✅ Universal | ⚠️ Limitado |
Por Qué 3MF Ganó la Batalla de Adopción
Varios factores llevaron a 3MF a convertirse en el estándar de facto para la impresión 3D moderna:
-
Integración con Microsoft — 3MF es el formato nativo para Windows 3D Builder y el pipeline de impresión de Windows 10/11, dándole exposición inmediata a millones de usuarios
-
Consorcio industrial — los principales fabricantes de impresoras (HP, Stratasys, Desktop Metal) y proveedores de software (Autodesk, Dassault) se comprometieron con 3MF desde su lanzamiento
-
Arquitectura práctica — el contenedor ZIP agrupa todo lo que necesita un slicer, y el modelo de extensión (materiales, retículas, cortes) permite que el formato crezca sin romper la compatibilidad hacia atrás
-
Adopción de slicers — PrusaSlicer, Cura, Bambu Studio, Orca Slicer e IdeaMaker usan 3MF como su formato de proyecto nativo, reemplazando sus formatos propietarios
Conclusión
3MF ha logrado donde AMF tuvo dificultades: ofrece un reemplazo técnicamente completo para STL con amplio soporte de la industria, herramientas prácticas y una hoja de ruta de extensiones clara. Al empaquetar geometría, materiales, colores, texturas y configuraciones de impresión en un único contenedor ZIP, 3MF elimina la fragmentación que plagó los flujos de trabajo basados en STL. Comprender la estructura de 3MF — el contenedor OPC, el modelo de geometría XML, la extensión de materiales, y las extensiones de retícula de vigas y corte — te prepara para trabajar en la vanguardia del software de fabricación aditiva, ya sea que estés construyendo un slicer, diseñando ensamblajes multi-material imprimibles, o arquitectando un pipeline de impresión 3D en la nube.
Conversiones relacionadas
Conversiones frecuentes del catálogo: