Un elemento 3D representa objetos tridimensionales en tu proyecto, incluyendo modelos 3D importados, primitivas geométricas básicas, formas extruidas de formas 2D, texto 3D y resultados de operaciones booleanas.
Los elementos 3D comparten los campos comunes de Elemento Básico y Elemento de Vista, mientras que también introducen propiedades adicionales específicas de 3D.
| Prop | Tipo | Requerido | Ejemplo | Rango de Valores | Descripción |
|---|---|---|---|---|---|
| type | string | true | - | 3D | El tipo del elemento. Para elementos 3D, esto es siempre "3D". |
| sourceId | string | false | - | - | Identificador interno para el modelo 3D o recurso de geometría. |
| ext | string | false | - | glb | gltf | fbx | obj | geometry | primitive | text3d | parametric | curve | La extensión de archivo o tipo de nodo del elemento 3D. |
| externalUrl | string | false | - | - | URL opcional para cargar modelos glTF/glb externos. El motor recuperará y almacenará en caché el modelo. |
| nodeType | string | false | - | primitive | geometry | text3d | import | model | parametric | curve | El tipo de nodo 3D. Determina la estructura de propiedades adicionales. |
| category | string | false | - | For primitive/geometry: basic | polyhedron. For parametric: extrusion | lathe | sweep. For curve: helix | torusKnot | custom | Subcategoría del nodo 3D. Los valores disponibles dependen de nodeType. |
| geometryType | string | false | - | - | El tipo de geometría básica. Consulta la sección "Tipos de Geometría" a continuación. |
| originalWidth | number | false | - | - | El ancho original del modelo 3D en unidades del mundo. |
| originalHeight | number | false | - | - | La altura original del modelo 3D en unidades del mundo. |
| originalDepth | number | false | - | - | La profundidad original del modelo 3D en unidades del mundo. |
| animation | object | false | - | - | Configuraciones de animación para modelos glTF con animaciones. Contiene propiedades currentIndex, speed y loop. |
Además de las propiedades de transformación 2D estándar (x, y, rotación, escalaX, escalaY), los elementos 3D admiten propiedades de transformación adicionales para posicionamiento y rotación tridimensional:
| Prop | Tipo | Requerido | Ejemplo | Rango de Valores | Descripción |
|---|---|---|---|---|---|
| z | number | false | - | - | La posición de profundidad del elemento en el espacio 3D. Las unidades están alineadas con píxeles, donde z=0 corresponde al plano del lienzo. |
| rotationX | number | false | - | - | Rotación alrededor del eje X, en grados. |
| rotationY | number | false | - | - | Rotación alrededor del eje Y, en grados. |
| scaleZ | number | false | - | > 0 | Factor de escala a lo largo del eje Z. Valores > 1 aumentan, valores entre 0 y 1 disminuyen. |
El campo geometryType especifica el tipo de geometría 3D básica. Los tipos disponibles están organizados por categoría (especificada a través del campo category cuando nodeType es "geometry" o "primitive"):
Nota:
nodeType: "primitive"es un alias para"geometry". Ambos son compatibles y se comportan de manera idéntica.
Formas Básicas (category: "basic"):
cube - Caja de seis ladossphere - Geometría esféricacylinder - Geometría cilíndricacone - Geometría cónicatorus - Geometría en forma de donacapsule - Geometría en forma de píldoradisc - Disco circular planoPoliedros (category: "polyhedron"):
pyramid - Pirámide de cuatro ladosoctahedron - Poliedro de ocho carasicosahedron - Poliedro de veinte carasdodecahedron - Poliedro de doce carashexPrism - Prisma de seis ladostriangle - Prisma triangularLos nodos paramétricos (nodeType: "parametric") generan geometría de manera procedural:
Extrusión (category: "extrusion"):
Torno (category: "lathe"):
Barrido (category: "sweep"):
Los nodos de curva (nodeType: "curve") crean curvas y trayectorias 3D:
Helice (category: "helix"):
Nudo de Torus (category: "torusKnot"):
Personalizado (category: "custom"):
Las operaciones de topología (booleanas, de matriz, espejo, compuestas) se realizan dentro del editor y producen una salida de geometría estándar. Estas operaciones se aplican en el tiempo de edición y no requieren un manejo especial en la API de renderizado.
Los elementos 3D pueden ser creados extruyendo formas 2D. Cuando conviertes un elemento de forma 2D a 3D en el editor, genera un nuevo elemento type: "3D" con los siguientes campos adicionales:
| Prop | Tipo | Requerido | Ejemplo | Rango de Valores | Descripción |
|---|---|---|---|---|---|
| extrusionSource | object | false | - | - | Los datos de forma 2D originales utilizados para crear la extrusión 3D. Contiene el ShapeNodeData completo. |
| shapeSizeX | number | false | - | - | Ancho de la forma extruida, en píxeles. |
| shapeSizeY | number | false | - | - | Altura de la forma extruida, en píxeles. |
| shapeExtrusion | number | false | - | - | Profundidad de la extrusión a lo largo del eje Z, en píxeles. |
| shapeCorner | string | false | - | round | chamfer | straight | Tipo de esquina para formas extruidas. |
| shapeRoundnessSmooth | number | false | - | 0 - 1 | Suavidad de las esquinas redondeadas (0-1). |
| shapeRoundnessArc | number | false | - | - | Radio del arco para esquinas redondeadas. |
| shapeBevel | number | false | - | - | Profundidad del bisel para los bordes. |
| shapeBevelSides | number | false | - | - | Número de segmentos para bordes biselados. |
Los elementos 3D también pueden representar texto tridimensional con profundidad y biselado:
| Prop | Tipo | Requerido | Ejemplo | Rango de Valores | Descripción |
|---|---|---|---|---|---|
| textContent | string | false | - | - | El contenido de texto a renderizar en 3D. |
| textStyle3D | object | false | - | - | Propiedades de estilo de texto (fuente, tamaño, peso, etc.). Reutiliza algunos campos de estilo de texto 2D. |
| textDepth | number | false | - | - | Profundidad de extrusión del texto 3D. |
| textBevelSize | number | false | - | - | Tamaño del bisel en los bordes del texto. |
| textBevelSegments | number | false | - | - | Número de segmentos para el biselado del texto. |
| textCurveSegments | number | false | - | - | Número de segmentos para las curvas del texto. |
Los elementos 3D utilizan un sistema de materiales PBR (Renderizado Basado en Física) con soporte integral para texturas:
| Prop | Tipo | Requerido | Ejemplo | Rango de Valores | Descripción |
|---|---|---|---|---|---|
| material | object | false | - | - | Configuración completa del material que incluye propiedades PBR y mapas de textura. |
El objeto material contiene:
physicalMaterialData - Propiedades del material PBR:
color (string) - Color base en formato hexadecimal, por defecto: '#818cf8'roughness (number) - Rugosidad de la superficie, 0-1, por defecto: 0.4metalness (number) - Propiedad metálica, 0-1, por defecto: 0.0opacity (number) - Opacidad del material, 0-1, por defecto: 1.0transmission (number) - Transmisión de luz para materiales similares al vidrio, 0-1, por defecto: 0.0ior (number) - Índice de refracción, típicamente 1.0-2.5, por defecto: 1.5clearcoat (number) - Intensidad de la capa de recubrimiento transparente, 0-1, por defecto: 0.0clearcoatRoughness (number) - Rugosidad del recubrimiento transparente, 0-1, por defecto: 0.0sheen (number) - Efecto de brillo similar a tela, 0-1, por defecto: 0.0sheenRoughness (number) - Rugosidad del brillo, 0-1, por defecto: 0.0sheenColor (string) - Color del tinte del brillothickness (number) - Grosor del material para transmisiónmaterialXPath (string) - Ruta de preset MaterialX opcional:
Mapas de Textura - El objeto material puede contener URLs de mapas de textura:
colorMap - Textura de color base/difusanormalMap - Mapa normal para detalle de superficieroughnessMap - Textura de rugosidadmetalnessMap - Textura de metalicidadaoMap - Mapa de oclusión ambientalemissiveMap - Textura emisiva/brillanteLos mapas de textura se aplican utilizando funciones TSL (Three.js Shading Language) para un rendimiento óptimo.
Los elementos 3D con nodeType: "model" o nodeType: "import" representan modelos 3D importados:
Nota:
nodeType: "import"es un alias para"model". Ambos son compatibles y se comportan de manera idéntica.
source.url para especificar la URL del archivo glTF/glb/FBX remotosourceIdanimation.currentIndex para seleccionar qué animación reproducircurrentIndex (número), speed (número, por defecto 1.0), loop (booleano, por defecto verdadero)sizeParams contiene width, height, depth para las dimensiones del modelo
{
"id": "3d-cube-001",
"type": "3D",
"start": 0,
"duration": 5,
"trackIndex": 0,
"x": 540,
"y": 540,
"z": 0,
"width": 200,
"height": 200,
"anchorX": 100,
"anchorY": 100,
"rotation": 0,
"rotationX": 30,
"rotationY": 45,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1,
"alpha": 1,
"ext": "geometry",
"nodeType": "geometry",
"category": "basic",
"geometryType": "cube",
"material": {
"physicalMaterialData": {
"color": "#4A90E2",
"roughness": 0.4,
"metalness": 0.0
}
}
}
{
"id": "3d-extrusion-001",
"type": "3D",
"start": 0,
"duration": 5,
"trackIndex": 0,
"x": 540,
"y": 540,
"z": 0,
"width": 300,
"height": 300,
"anchorX": 150,
"anchorY": 150,
"rotation": 0,
"rotationX": 0,
"rotationY": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1,
"alpha": 1,
"ext": "parametric",
"nodeType": "parametric",
"category": "extrusion",
"shapeSizeX": 300,
"shapeSizeY": 300,
"shapeExtrusion": 100,
"material": {
"physicalMaterialData": {
"color": "#FF6B6B",
"roughness": 0.3,
"metalness": 0.1
}
},
"extrusionSource": {
"shapeType": "SHAPE_STAR",
"starPoints": 5,
"starInnerRadius": 0.4
}
}
{
"id": "3d-model-001",
"type": "3D",
"start": 0,
"duration": 10,
"trackIndex": 0,
"x": 540,
"y": 540,
"z": -200,
"width": 400,
"height": 400,
"anchorX": 200,
"anchorY": 200,
"rotation": 0,
"rotationX": 0,
"rotationY": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1,
"alpha": 1,
"ext": "glb",
"nodeType": "model",
"sourceId": "cached-model-123",
"source": {
"url": "https://example.com/models/animated_character.glb"
},
"animation": {
"currentIndex": 0,
"speed": 1.0,
"loop": true
},
"sizeParams": {
"width": 2,
"height": 2,
"depth": 2
},
"originalWidth": 2,
"originalHeight": 2,
"originalDepth": 2
}