Un élément 3D représente des objets tridimensionnels dans votre projet, y compris des modèles 3D importés, des primitives géométriques de base, des formes extrudées à partir de formes 2D, du texte 3D et des résultats d'opérations booléennes.
Les éléments 3D partagent les champs communs de Élément de base et Élément de vue, tout en introduisant des propriétés supplémentaires spécifiques aux 3D.
| Propriété | Type | Requis | Exemple | Plage de valeurs | Description |
|---|---|---|---|---|---|
| type | string | true | - | 3D | Le type de l'élément. Pour les éléments 3D, c'est toujours "3D". |
| sourceId | string | false | - | - | Identifiant interne pour le modèle 3D ou la ressource géométrique. |
| ext | string | false | - | glb | gltf | fbx | obj | geometry | primitive | text3d | parametric | curve | L'extension de fichier ou le type de nœud de l'élément 3D. |
| externalUrl | string | false | - | - | URL optionnelle pour charger des modèles glTF/glb externes. Le moteur récupérera et mettra en cache le modèle. |
| nodeType | string | false | - | primitive | geometry | text3d | import | model | parametric | curve | Le type de nœud 3D. Détermine la structure des propriétés supplémentaires. |
| category | string | false | - | For primitive/geometry: basic | polyhedron. For parametric: extrusion | lathe | sweep. For curve: helix | torusKnot | custom | Sous-catégorie du nœud 3D. Les valeurs disponibles dépendent de nodeType. |
| geometryType | string | false | - | - | Le type de géométrie de base. Voir la section "Types de géométrie" ci-dessous. |
| originalWidth | number | false | - | - | La largeur originale du modèle 3D en unités du monde. |
| originalHeight | number | false | - | - | La hauteur originale du modèle 3D en unités du monde. |
| originalDepth | number | false | - | - | La profondeur originale du modèle 3D en unités du monde. |
| animation | object | false | - | - | Paramètres d'animation pour les modèles glTF avec animations. Contient les propriétés currentIndex, speed et loop. |
En plus des propriétés de transformation 2D standard (x, y, rotation, scaleX, scaleY), les éléments 3D prennent en charge des propriétés de transformation supplémentaires pour le positionnement et la rotation tridimensionnels :
| Propriété | Type | Requis | Exemple | Plage de valeurs | Description |
|---|---|---|---|---|---|
| z | number | false | - | - | La position de profondeur de l'élément dans l'espace 3D. Les unités sont alignées avec les pixels, où z=0 correspond au plan du canevas. |
| rotationX | number | false | - | - | Rotation autour de l'axe X, en degrés. |
| rotationY | number | false | - | - | Rotation autour de l'axe Y, en degrés. |
| scaleZ | number | false | - | > 0 | Facteur d'échelle le long de l'axe Z. Les valeurs > 1 agrandissent, les valeurs entre 0 et 1 rétrécissent. |
Le champ geometryType spécifie le type de géométrie 3D de base. Les types disponibles sont organisés par catégorie (spécifiée via le champ category lorsque nodeType est "geometry" ou "primitive"):
Remarque :
nodeType: "primitive"est un alias pour"geometry". Les deux sont pris en charge et se comportent de manière identique.
Formes de base (category: "basic"):
cube - Boîte à six côtéssphere - Géométrie sphériquecylinder - Géométrie cylindriquecone - Géométrie coniquetorus - Géométrie en forme de donutcapsule - Géométrie en forme de piluledisc - Disque circulaire platPolyèdres (category: "polyhedron"):
pyramid - Pyramide à quatre côtésoctahedron - Polyèdre à huit facesicosahedron - Polyèdre à vingt facesdodecahedron - Polyèdre à douze faceshexPrism - Prisme à six côtéstriangle - Prisme triangulaireLes nœuds paramétriques (nodeType: "parametric") génèrent de la géométrie de manière procédurale :
Extrusion (category: "extrusion"):
Tournage (category: "lathe"):
Balayage (category: "sweep"):
Les nœuds de courbe (nodeType: "curve") créent des courbes et des chemins 3D :
Hélice (category: "helix"):
Nœud de torus (category: "torusKnot"):
Personnalisé (category: "custom"):
Les opérations de topologie (booléenne, tableau, miroir, composé) sont effectuées dans l'éditeur et produisent une sortie de géométrie standard. Ces opérations sont appliquées au moment de l'édition et ne nécessitent pas de traitement spécial dans l'API de rendu.
Les éléments 3D peuvent être créés en extrudant des formes 2D. Lorsque vous convertissez un élément de forme 2D en 3D dans l'éditeur, cela génère un nouvel élément type: "3D" avec les champs supplémentaires suivants :
| Propriété | Type | Requis | Exemple | Plage de valeurs | Description |
|---|---|---|---|---|---|
| extrusionSource | object | false | - | - | Les données de forme 2D originales utilisées pour créer l'extrusion 3D. Contient le ShapeNodeData complet. |
| shapeSizeX | number | false | - | - | Largeur de la forme extrudée, en pixels. |
| shapeSizeY | number | false | - | - | Hauteur de la forme extrudée, en pixels. |
| shapeExtrusion | number | false | - | - | Profondeur de l'extrusion le long de l'axe Z, en pixels. |
| shapeCorner | string | false | - | round | chamfer | straight | Type de coin pour les formes extrudées. |
| shapeRoundnessSmooth | number | false | - | 0 - 1 | Douceur des coins arrondis (0-1). |
| shapeRoundnessArc | number | false | - | - | Rayon d'arc pour les coins arrondis. |
| shapeBevel | number | false | - | - | Profondeur de biseautage pour les bords. |
| shapeBevelSides | number | false | - | - | Nombre de segments pour les bords biseautés. |
Les éléments 3D peuvent également représenter du texte tridimensionnel avec profondeur et biseautage :
| Propriété | Type | Requis | Exemple | Plage de valeurs | Description |
|---|---|---|---|---|---|
| textContent | string | false | - | - | Le contenu textuel à rendre en 3D. |
| textStyle3D | object | false | - | - | Propriétés de style de texte (police, taille, poids, etc.). Réutilise certains champs de style de texte 2D. |
| textDepth | number | false | - | - | Profondeur d'extrusion du texte 3D. |
| textBevelSize | number | false | - | - | Taille du biseautage sur les bords du texte. |
| textBevelSegments | number | false | - | - | Nombre de segments pour le biseautage du texte. |
| textCurveSegments | number | false | - | - | Nombre de segments pour les courbes de texte. |
Les éléments 3D utilisent un système de matériau PBR (Physically Based Rendering) avec un support complet des textures :
| Propriété | Type | Requis | Exemple | Plage de valeurs | Description |
|---|---|---|---|---|---|
| material | object | false | - | - | Configuration complète du matériau, y compris les propriétés PBR et les cartes de texture. |
L'objet material contient :
physicalMaterialData - Propriétés du matériau PBR :
color (string) - Couleur de base au format hexadécimal, par défaut : '#818cf8'roughness (number) - Rugosité de la surface, 0-1, par défaut : 0.4metalness (number) - Propriété métallique, 0-1, par défaut : 0.0opacity (number) - Opacité du matériau, 0-1, par défaut : 1.0transmission (number) - Transmission de la lumière pour les matériaux en verre, 0-1, par défaut : 0.0ior (number) - Indice de réfraction, généralement 1.0-2.5, par défaut : 1.5clearcoat (number) - Intensité de la couche de vernis, 0-1, par défaut : 0.0clearcoatRoughness (number) - Rugosité du vernis, 0-1, par défaut : 0.0sheen (number) - Effet de brillance semblable à un tissu, 0-1, par défaut : 0.0sheenRoughness (number) - Rugosité de la brillance, 0-1, par défaut : 0.0sheenColor (string) - Couleur de teinte de la brillancethickness (number) - Épaisseur du matériau pour la transmissionmaterialXPath (string) - Chemin de préréglage MaterialX optionnel :
Cartes de texture - L'objet matériau peut contenir des URL de cartes de texture :
colorMap - Texture de couleur de base/diffusenormalMap - Carte normale pour les détails de surfaceroughnessMap - Texture de rugositémetalnessMap - Texture de métalaoMap - Carte d'occlusion ambianteemissiveMap - Texture émissive/lumineuseLes cartes de texture sont appliquées à l'aide de fonctions TSL (Three.js Shading Language) pour des performances optimales.
Les éléments 3D avec nodeType: "model" ou nodeType: "import" représentent des modèles 3D importés :
Remarque :
nodeType: "import"est un alias pour"model". Les deux sont pris en charge et se comportent de manière identique.
source.url pour spécifier l'URL du fichier glTF/glb/FBX distantsourceIdanimation.currentIndex pour sélectionner quelle animation jouercurrentIndex (number), speed (number, par défaut 1.0), loop (boolean, par défaut true)sizeParams contient width, height, depth pour les dimensions du modèle
{
"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
}