Um elemento 3D representa objetos tridimensionais em seu projeto, incluindo modelos 3D importados, primitivas de geometria básica, formas extrudadas a partir de formas 2D, texto 3D e resultados de operações booleanas.
Os elementos 3D compartilham os campos comuns de Elemento Básico e Elemento de Visualização, enquanto também introduzem propriedades adicionais específicas para 3D.
| Propriedade | Tipo | Necessário | Exemplo | Faixa de Valores | Descrição |
|---|---|---|---|---|---|
| type | string | true | - | 3D | O tipo do elemento. Para elementos 3D, isso é sempre "3D". |
| sourceId | string | false | - | - | Identificador interno para o modelo 3D ou recurso de geometria. |
| ext | string | false | - | glb | gltf | fbx | obj | geometry | primitive | text3d | parametric | curve | A extensão do arquivo ou tipo de nó do elemento 3D. |
| externalUrl | string | false | - | - | URL opcional para carregar modelos glTF/glb externos. O motor buscará e armazenará em cache o modelo. |
| nodeType | string | false | - | primitive | geometry | text3d | import | model | parametric | curve | O tipo de nó 3D. Determina a estrutura das propriedades adicionais. |
| category | string | false | - | For primitive/geometry: basic | polyhedron. For parametric: extrusion | lathe | sweep. For curve: helix | torusKnot | custom | Subcategoria do nó 3D. Os valores disponíveis dependem do nodeType. |
| geometryType | string | false | - | - | O tipo de geometria básica. Veja a seção "Tipos de Geometria" abaixo. |
| originalWidth | number | false | - | - | A largura original do modelo 3D em unidades do mundo. |
| originalHeight | number | false | - | - | A altura original do modelo 3D em unidades do mundo. |
| originalDepth | number | false | - | - | A profundidade original do modelo 3D em unidades do mundo. |
| animation | object | false | - | - | Configurações de animação para modelos glTF com animações. Contém propriedades currentIndex, speed e loop. |
Além das propriedades de transformação 2D padrão (x, y, rotação, escalaX, escalaY), os elementos 3D suportam propriedades de transformação adicionais para posicionamento e rotação tridimensionais:
| Propriedade | Tipo | Necessário | Exemplo | Faixa de Valores | Descrição |
|---|---|---|---|---|---|
| z | number | false | - | - | A posição de profundidade do elemento no espaço 3D. As unidades estão alinhadas com pixels, onde z=0 corresponde ao plano da tela. |
| rotationX | number | false | - | - | Rotação em torno do eixo X, em graus. |
| rotationY | number | false | - | - | Rotação em torno do eixo Y, em graus. |
| scaleZ | number | false | - | > 0 | Fator de escala ao longo do eixo Z. Valores > 1 aumentam, valores entre 0 e 1 diminuem. |
O campo geometryType especifica o tipo de geometria 3D básica. Os tipos disponíveis são organizados por categoria (especificada através do campo category quando nodeType é "geometry" ou "primitive"):
Nota:
nodeType: "primitive"é um alias para"geometry". Ambos são suportados e se comportam de forma idêntica.
Formas Básicas (category: "basic"):
cube - Caixa de seis ladossphere - Geometria esféricacylinder - Geometria cilíndricacone - Geometria cônicatorus - Geometria em forma de donutcapsule - Geometria em forma de píluladisc - Disco circular planoPoliedros (category: "polyhedron"):
pyramid - Pirâmide de quatro ladosoctahedron - Poliedro de oito facesicosahedron - Poliedro de vinte facesdodecahedron - Poliedro de doze faceshexPrism - Prisma de seis ladostriangle - Prisma triangularNós paramétricos (nodeType: "parametric") geram geometria proceduralmente:
Extrusão (category: "extrusion"):
Torno (category: "lathe"):
Varredura (category: "sweep"):
Nós de curva (nodeType: "curve") criam curvas e caminhos 3D:
Hélice (category: "helix"):
Nó de Toróide (category: "torusKnot"):
Personalizado (category: "custom"):
Operações de topologia (booleanas, array, espelho, composto) são realizadas dentro do editor e produzem saída de geometria padrão. Essas operações são aplicadas no tempo de edição e não requerem tratamento especial na API de renderização.
Os elementos 3D podem ser criados pela extrusão de formas 2D. Quando você converte um elemento de Forma 2D para 3D no editor, ele gera um novo elemento type: "3D" com os seguintes campos adicionais:
| Propriedade | Tipo | Necessário | Exemplo | Faixa de Valores | Descrição |
|---|---|---|---|---|---|
| extrusionSource | object | false | - | - | Os dados da forma 2D original usados para criar a extrusão 3D. Contém o ShapeNodeData completo. |
| shapeSizeX | number | false | - | - | Largura da forma extrudada, em pixels. |
| shapeSizeY | number | false | - | - | Altura da forma extrudada, em pixels. |
| shapeExtrusion | number | false | - | - | Profundidade da extrusão ao longo do eixo Z, em pixels. |
| shapeCorner | string | false | - | round | chamfer | straight | Tipo de canto para formas extrudadas. |
| shapeRoundnessSmooth | number | false | - | 0 - 1 | Suavidade dos cantos arredondados (0-1). |
| shapeRoundnessArc | number | false | - | - | Raio do arco para cantos arredondados. |
| shapeBevel | number | false | - | - | Profundidade do chanfrado para bordas. |
| shapeBevelSides | number | false | - | - | Número de segmentos para bordas chanfradas. |
Os elementos 3D também podem representar texto tridimensional com profundidade e chanfragem:
| Propriedade | Tipo | Necessário | Exemplo | Faixa de Valores | Descrição |
|---|---|---|---|---|---|
| textContent | string | false | - | - | O conteúdo do texto a ser renderizado em 3D. |
| textStyle3D | object | false | - | - | Propriedades de estilo de texto (fonte, tamanho, peso, etc.). Reutiliza alguns campos de estilo de texto 2D. |
| textDepth | number | false | - | - | Profundidade de extrusão do texto 3D. |
| textBevelSize | number | false | - | - | Tamanho do chanfrado nas bordas do texto. |
| textBevelSegments | number | false | - | - | Número de segmentos para chanfragem de texto. |
| textCurveSegments | number | false | - | - | Número de segmentos para curvas de texto. |
Os elementos 3D usam um sistema de material PBR (Renderização Baseada em Física) com suporte abrangente para texturas:
| Propriedade | Tipo | Necessário | Exemplo | Faixa de Valores | Descrição |
|---|---|---|---|---|---|
| material | object | false | - | - | Configuração completa do material, incluindo propriedades PBR e mapas de textura. |
O objeto material contém:
physicalMaterialData - Propriedades do material PBR:
color (string) - Cor base em formato hex, padrão: '#818cf8'roughness (number) - Rugosidade da superfície, 0-1, padrão: 0.4metalness (number) - Propriedade metálica, 0-1, padrão: 0.0opacity (number) - Opacidade do material, 0-1, padrão: 1.0transmission (number) - Transmissão de luz para materiais semelhantes ao vidro, 0-1, padrão: 0.0ior (number) - Índice de refração, tipicamente 1.0-2.5, padrão: 1.5clearcoat (number) - Intensidade da camada de revestimento transparente, 0-1, padrão: 0.0clearcoatRoughness (number) - Rugosidade do revestimento transparente, 0-1, padrão: 0.0sheen (number) - Efeito de brilho semelhante a tecido, 0-1, padrão: 0.0sheenRoughness (number) - Rugosidade do brilho, 0-1, padrão: 0.0sheenColor (string) - Cor do tom do brilhothickness (number) - Espessura do material para transmissãomaterialXPath (string) - Caminho de preset MaterialX opcional:
Mapas de Textura - O objeto material pode conter URLs de mapas de textura:
colorMap - Textura de cor base/difusanormalMap - Mapa normal para detalhes da superfícieroughnessMap - Textura de rugosidademetalnessMap - Textura de metalicidadeaoMap - Mapa de oclusão ambientalemissiveMap - Textura emissiva/brilhanteOs mapas de textura são aplicados usando funções TSL (Three.js Shading Language) para desempenho ideal.
Os elementos 3D com nodeType: "model" ou nodeType: "import" representam modelos 3D importados:
Nota:
nodeType: "import"é um alias para"model". Ambos são suportados e se comportam de forma idêntica.
source.url para especificar a URL do arquivo glTF/glb/FBX remotosourceIdanimation.currentIndex para selecionar qual animação reproduzircurrentIndex (number), speed (number, padrão 1.0), loop (boolean, padrão true)sizeParams contém width, height, depth para dimensões do 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
}