Un elemento 3D rappresenta oggetti tridimensionali nel tuo progetto, inclusi modelli 3D importati, primitive geometriche di base, forme estruse da forme 2D, testo 3D e risultati di operazioni booleane.
Gli elementi 3D condividono i campi comuni da Elemento di Base e Elemento di Vista, introducendo anche proprietà aggiuntive specifiche per il 3D.
| Proprietà | Tipo | Richiesto | Esempio | Intervallo di valori | Descrizione |
|---|---|---|---|---|---|
| type | string | true | - | 3D | Il tipo dell'elemento. Per gli elementi 3D, questo è sempre "3D". |
| sourceId | string | false | - | - | Identificatore interno per il modello 3D o la risorsa geometrica. |
| ext | string | false | - | glb | gltf | fbx | obj | geometry | primitive | text3d | parametric | curve | L'estensione del file o il tipo di nodo dell'elemento 3D. |
| externalUrl | string | false | - | - | URL opzionale per il caricamento di modelli glTF/glb esterni. Il motore recupererà e memorizzerà nella cache il modello. |
| nodeType | string | false | - | primitive | geometry | text3d | import | model | parametric | curve | Il tipo di nodo 3D. Determina la struttura delle proprietà aggiuntive. |
| category | string | false | - | For primitive/geometry: basic | polyhedron. For parametric: extrusion | lathe | sweep. For curve: helix | torusKnot | custom | Sottocategoria del nodo 3D. I valori disponibili dipendono da nodeType. |
| geometryType | string | false | - | - | Il tipo di geometria di base. Vedi la sezione "Tipi di Geometria" qui sotto. |
| originalWidth | number | false | - | - | La larghezza originale del modello 3D in unità del mondo. |
| originalHeight | number | false | - | - | Altezza originale del modello 3D in unità del mondo. |
| originalDepth | number | false | - | - | Profondità originale del modello 3D in unità del mondo. |
| animation | object | false | - | - | Impostazioni di animazione per modelli glTF con animazioni. Contiene le proprietà currentIndex, speed e loop. |
Oltre alle proprietà di trasformazione 2D standard (x, y, rotazione, scalaX, scalaY), gli elementi 3D supportano proprietà di trasformazione aggiuntive per il posizionamento e la rotazione tridimensionale:
| Proprietà | Tipo | Richiesto | Esempio | Intervallo di valori | Descrizione |
|---|---|---|---|---|---|
| z | number | false | - | - | La posizione di profondità dell'elemento nello spazio 3D. Le unità sono allineate con i pixel, dove z=0 corrisponde al piano della tela. |
| rotationX | number | false | - | - | Rotazione attorno all'asse X, in gradi. |
| rotationY | number | false | - | - | Rotazione attorno all'asse Y, in gradi. |
| scaleZ | number | false | - | > 0 | Fattore di scala lungo l'asse Z. Valori > 1 ingrandiscono, valori tra 0 e 1 rimpiccioliscono. |
Il campo geometryType specifica il tipo di geometria 3D di base. I tipi disponibili sono organizzati per categoria (specificata tramite il campo category quando nodeType è "geometry" o "primitive"):
Nota:
nodeType: "primitive"è un alias per"geometry". Entrambi sono supportati e si comportano in modo identico.
Forme di Base (category: "basic"):
cube - Cubo a sei faccesphere - Geometria sfericacylinder - Geometria cilindricacone - Geometria conicatorus - Geometria a forma di ciambellacapsule - Geometria a forma di pilloladisc - Disco circolare piattoPoliedri (category: "polyhedron"):
pyramid - Piramide a quattro facceoctahedron - Poliedro a otto facceicosahedron - Poliedro a venti faccedodecahedron - Poliedro a dodici faccehexPrism - Prisma a sei faccetriangle - Prisma triangolareI nodi parametrici (nodeType: "parametric") generano geometria in modo procedurale:
Estrusione (category: "extrusion"):
Tornitura (category: "lathe"):
Sweep (category: "sweep"):
I nodi curva (nodeType: "curve") creano curve e percorsi 3D:
Elica (category: "helix"):
Nodo Torus (category: "torusKnot"):
Personalizzato (category: "custom"):
Le operazioni topologiche (boolean, array, specchio, composto) vengono eseguite all'interno dell'editor e producono output di geometria standard. Queste operazioni vengono applicate in fase di modifica e non richiedono una gestione speciale nell'API di rendering.
Gli elementi 3D possono essere creati estraendo forme 2D. Quando converti un elemento di forma 2D in 3D nell'editor, genera un nuovo elemento type: "3D" con i seguenti campi aggiuntivi:
| Proprietà | Tipo | Richiesto | Esempio | Intervallo di valori | Descrizione |
|---|---|---|---|---|---|
| extrusionSource | object | false | - | - | I dati della forma 2D originali utilizzati per creare l'estrusione 3D. Contiene il completo ShapeNodeData. |
| shapeSizeX | number | false | - | - | Larghezza della forma estrusa, in pixel. |
| shapeSizeY | number | false | - | - | Altezza della forma estrusa, in pixel. |
| shapeExtrusion | number | false | - | - | Profondità dell'estrusione lungo l'asse Z, in pixel. |
| shapeCorner | string | false | - | round | chamfer | straight | Tipo di angolo per forme estruse. |
| shapeRoundnessSmooth | number | false | - | 0 - 1 | Lisciatura degli angoli arrotondati (0-1). |
| shapeRoundnessArc | number | false | - | - | Raggio dell'arco per angoli arrotondati. |
| shapeBevel | number | false | - | - | Profondità della smussatura per i bordi. |
| shapeBevelSides | number | false | - | - | Numero di segmenti per i bordi smussati. |
Gli elementi 3D possono anche rappresentare testo tridimensionale con profondità e smussatura:
| Proprietà | Tipo | Richiesto | Esempio | Intervallo di valori | Descrizione |
|---|---|---|---|---|---|
| textContent | string | false | - | - | Il contenuto del testo da rendere in 3D. |
| textStyle3D | object | false | - | - | Proprietà di stile del testo (font, dimensione, peso, ecc.). Riutilizza alcuni campi di stile del testo 2D. |
| textDepth | number | false | - | - | Profondità di estrusione del testo 3D. |
| textBevelSize | number | false | - | - | Dimensione della smussatura sui bordi del testo. |
| textBevelSegments | number | false | - | - | Numero di segmenti per la smussatura del testo. |
| textCurveSegments | number | false | - | - | Numero di segmenti per le curve del testo. |
Gli elementi 3D utilizzano un sistema di materiali PBR (Physically Based Rendering) con supporto completo per le texture:
| Proprietà | Tipo | Richiesto | Esempio | Intervallo di valori | Descrizione |
|---|---|---|---|---|---|
| material | object | false | - | - | Configurazione completa del materiale, comprese le proprietà PBR e le mappe di texture. |
L'oggetto material contiene:
physicalMaterialData - Proprietà del materiale PBR:
color (stringa) - Colore di base in formato esadecimale, predefinito: '#818cf8'roughness (numero) - Ruvidità della superficie, 0-1, predefinito: 0.4metalness (numero) - Proprietà metallica, 0-1, predefinito: 0.0opacity (numero) - Opacità del materiale, 0-1, predefinito: 1.0transmission (numero) - Trasmissione della luce per materiali simili al vetro, 0-1, predefinito: 0.0ior (numero) - Indice di rifrazione, tipicamente 1.0-2.5, predefinito: 1.5clearcoat (numero) - Intensità dello strato di rivestimento trasparente, 0-1, predefinito: 0.0clearcoatRoughness (numero) - Ruvidità del rivestimento trasparente, 0-1, predefinito: 0.0sheen (numero) - Effetto lucido simile a tessuto, 0-1, predefinito: 0.0sheenRoughness (numero) - Ruvidità del lucido, 0-1, predefinito: 0.0sheenColor (stringa) - Colore della tinta lucidathickness (numero) - Spessore del materiale per la trasmissionematerialXPath (stringa) - Percorso del preset MaterialX opzionale:
Texture Maps - L'oggetto materiale può contenere URL di mappe di texture:
colorMap - Texture di colore di base/diffusanormalMap - Mappa normale per dettagli superficialiroughnessMap - Texture di ruviditàmetalnessMap - Texture di metallicitàaoMap - Mappa di occlusione ambientaleemissiveMap - Texture emittente/che brillaLe mappe di texture vengono applicate utilizzando funzioni TSL (Three.js Shading Language) per prestazioni ottimali.
Gli elementi 3D con nodeType: "model" o nodeType: "import" rappresentano modelli 3D importati:
Nota:
nodeType: "import"è un alias per"model". Entrambi sono supportati e si comportano in modo identico.
source.url per specificare l'URL del file glTF/glb/FBX remotosourceIdanimation.currentIndex per selezionare quale animazione riprodurrecurrentIndex (numero), speed (numero, predefinito 1.0), loop (booleano, predefinito true)sizeParams contiene width, height, depth per le dimensioni del modello
{
"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
}