Một phần tử 3D đại diện cho các đối tượng ba chiều trong dự án của bạn, bao gồm các mô hình 3D nhập khẩu, các hình học nguyên thủy cơ bản, các hình dạng được đùn từ các hình 2D, văn bản 3D và kết quả của các phép toán boolean.
Các phần tử 3D chia sẻ các trường chung từ Phần Tử Cơ Bản và Phần Tử Xem, đồng thời cũng giới thiệu các thuộc tính cụ thể cho 3D bổ sung.
| Thuộc tính | Loại | Bắt buộc | Ví dụ | Phạm vi giá trị | Mô tả |
|---|---|---|---|---|---|
| type | string | true | - | 3D | Loại của phần tử. Đối với các phần tử 3D, điều này luôn là "3D". |
| sourceId | string | false | - | - | Định danh nội bộ cho mô hình 3D hoặc tài nguyên hình học. |
| ext | string | false | - | glb | gltf | fbx | obj | geometry | primitive | text3d | parametric | curve | Đuôi tệp hoặc loại nút của phần tử 3D. |
| externalUrl | string | false | - | - | URL tùy chọn để tải các mô hình glTF/glb bên ngoài. Động cơ sẽ lấy và lưu trữ mô hình. |
| nodeType | string | false | - | primitive | geometry | text3d | import | model | parametric | curve | Loại nút 3D. Xác định cấu trúc của các thuộc tính bổ sung. |
| category | string | false | - | For primitive/geometry: basic | polyhedron. For parametric: extrusion | lathe | sweep. For curve: helix | torusKnot | custom | Phân loại con của nút 3D. Các giá trị có sẵn phụ thuộc vào nodeType. |
| geometryType | string | false | - | - | Loại hình học cơ bản. Xem phần "Các Loại Hình Học" bên dưới. |
| originalWidth | number | false | - | - | Chiều rộng ban đầu của mô hình 3D tính bằng đơn vị thế giới. |
| originalHeight | number | false | - | - | Chiều cao ban đầu của mô hình 3D tính bằng đơn vị thế giới. |
| originalDepth | number | false | - | - | Độ sâu ban đầu của mô hình 3D tính bằng đơn vị thế giới. |
| animation | object | false | - | - | Cài đặt hoạt hình cho các mô hình glTF có hoạt hình. Chứa các thuộc tính currentIndex, speed và loop. |
Ngoài các thuộc tính biến đổi 2D tiêu chuẩn (x, y, xoay, tỉ lệX, tỉ lệY), các phần tử 3D hỗ trợ các thuộc tính biến đổi bổ sung cho việc định vị và xoay ba chiều:
| Thuộc tính | Loại | Bắt buộc | Ví dụ | Phạm vi giá trị | Mô tả |
|---|---|---|---|---|---|
| z | number | false | - | - | Vị trí độ sâu của phần tử trong không gian 3D. Các đơn vị được căn chỉnh với pixel, trong đó z=0 tương ứng với mặt phẳng canvas. |
| rotationX | number | false | - | - | Xoay quanh trục X, tính bằng độ. |
| rotationY | number | false | - | - | Xoay quanh trục Y, tính bằng độ. |
| scaleZ | number | false | - | > 0 | Hệ số tỉ lệ dọc theo trục Z. Các giá trị > 1 làm lớn lên, các giá trị giữa 0 và 1 làm nhỏ lại. |
Trường geometryType xác định loại hình học 3D cơ bản. Các loại có sẵn được tổ chức theo danh mục (được chỉ định qua trường category khi nodeType là "geometry" hoặc "primitive"):
Lưu ý:
nodeType: "primitive"là một bí danh cho"geometry". Cả hai đều được hỗ trợ và hoạt động giống nhau.
Hình Dạng Cơ Bản (category: "basic"):
cube - Hình hộp sáu mặtsphere - Hình cầucylinder - Hình trụcone - Hình nóntorus - Hình donutcapsule - Hình viên thuốcdisc - Đĩa tròn phẳngĐa Diện (category: "polyhedron"):
pyramid - Kim tự tháp bốn mặtoctahedron - Đa diện tám mặticosahedron - Đa diện hai mươi mặtdodecahedron - Đa diện mười hai mặthexPrism - Lăng trụ sáu mặttriangle - Lăng trụ tam giácCác nút đối số (nodeType: "parametric") tạo ra hình học theo quy trình:
Đùn (category: "extrusion"):
Quay (category: "lathe"):
Quét (category: "sweep"):
Các nút đường cong (nodeType: "curve") tạo ra các đường cong và đường đi 3D:
Helix (category: "helix"):
Nút Torus (category: "torusKnot"):
Tùy Chỉnh (category: "custom"):
Các phép toán địa hình (boolean, mảng, gương, hợp chất) được thực hiện trong trình chỉnh sửa và tạo ra đầu ra hình học tiêu chuẩn. Những phép toán này được áp dụng tại thời điểm chỉnh sửa và không yêu cầu xử lý đặc biệt trong API kết xuất.
Các phần tử 3D có thể được tạo ra bằng cách đùn các hình 2D. Khi bạn chuyển đổi một phần tử Hình 2D thành 3D trong trình chỉnh sửa, nó tạo ra một phần tử mới type: "3D" với các trường bổ sung sau:
| Thuộc tính | Loại | Bắt buộc | Ví dụ | Phạm vi giá trị | Mô tả |
|---|---|---|---|---|---|
| extrusionSource | object | false | - | - | Dữ liệu hình dạng 2D ban đầu được sử dụng để tạo ra phần đùn 3D. Chứa dữ liệu ShapeNodeData đầy đủ. |
| shapeSizeX | number | false | - | - | Chiều rộng của hình dạng đùn, tính bằng pixel. |
| shapeSizeY | number | false | - | - | Chiều cao của hình dạng đùn, tính bằng pixel. |
| shapeExtrusion | number | false | - | - | Độ sâu của phần đùn dọc theo trục Z, tính bằng pixel. |
| shapeCorner | string | false | - | round | chamfer | straight | Loại góc cho các hình dạng đùn. |
| shapeRoundnessSmooth | number | false | - | 0 - 1 | Độ mịn của các góc tròn (0-1). |
| shapeRoundnessArc | number | false | - | - | Bán kính cung cho các góc tròn. |
| shapeBevel | number | false | - | - | Độ sâu vát cho các cạnh. |
| shapeBevelSides | number | false | - | - | Số lượng đoạn cho các cạnh vát. |
Các phần tử 3D cũng có thể đại diện cho văn bản ba chiều với độ sâu và vát:
| Thuộc tính | Loại | Bắt buộc | Ví dụ | Phạm vi giá trị | Mô tả |
|---|---|---|---|---|---|
| textContent | string | false | - | - | Nội dung văn bản để hiển thị trong 3D. |
| textStyle3D | object | false | - | - | Các thuộc tính kiểu dáng văn bản (phông chữ, kích thước, độ dày, v.v.). Tái sử dụng một số trường kiểu văn bản 2D. |
| textDepth | number | false | - | - | Độ sâu đùn của văn bản 3D. |
| textBevelSize | number | false | - | - | Kích thước của vát trên các cạnh văn bản. |
| textBevelSegments | number | false | - | - | Số lượng đoạn cho việc vát văn bản. |
| textCurveSegments | number | false | - | - | Số lượng đoạn cho các đường cong văn bản. |
Các phần tử 3D sử dụng hệ thống vật liệu PBR (Rendering Dựa Trên Vật Lý) với hỗ trợ kết cấu toàn diện:
| Thuộc tính | Loại | Bắt buộc | Ví dụ | Phạm vi giá trị | Mô tả |
|---|---|---|---|---|---|
| material | object | false | - | - | Cấu hình vật liệu hoàn chỉnh bao gồm các thuộc tính PBR và bản đồ kết cấu. |
Đối tượng material chứa:
physicalMaterialData - Các thuộc tính vật liệu PBR:
color (string) - Màu sắc cơ bản ở định dạng hex, mặc định: '#818cf8'roughness (number) - Độ nhám bề mặt, 0-1, mặc định: 0.4metalness (number) - Thuộc tính kim loại, 0-1, mặc định: 0.0opacity (number) - Độ trong suốt của vật liệu, 0-1, mặc định: 1.0transmission (number) - Độ truyền ánh sáng cho các vật liệu giống như kính, 0-1, mặc định: 0.0ior (number) - Chỉ số khúc xạ, thường là 1.0-2.5, mặc định: 1.5clearcoat (number) - Cường độ lớp phủ trong suốt, 0-1, mặc định: 0.0clearcoatRoughness (number) - Độ nhám của lớp phủ trong suốt, 0-1, mặc định: 0.0sheen (number) - Hiệu ứng bóng giống như vải, 0-1, mặc định: 0.0sheenRoughness (number) - Độ nhám bóng, 0-1, mặc định: 0.0sheenColor (string) - Màu sắc bóngthickness (number) - Độ dày vật liệu cho độ truyềnmaterialXPath (string) - Đường dẫn tùy chọn cho preset MaterialX:
physicalMaterialData bằng các giá trị presetBản Đồ Kết Cấu - Đối tượng vật liệu có thể chứa các URL bản đồ kết cấu:
colorMap - Kết cấu màu cơ bản/khuyếch tánnormalMap - Bản đồ bình thường cho chi tiết bề mặtroughnessMap - Kết cấu độ nhámmetalnessMap - Kết cấu kim loạiaoMap - Bản đồ che bóng môi trườngemissiveMap - Kết cấu phát sángCác bản đồ kết cấu được áp dụng bằng cách sử dụng các hàm TSL (Ngôn Ngữ Đổ Bóng Three.js) để tối ưu hóa hiệu suất.
Các phần tử 3D với nodeType: "model" hoặc nodeType: "import" đại diện cho các mô hình 3D nhập khẩu:
Lưu ý:
nodeType: "import"là một bí danh cho"model". Cả hai đều được hỗ trợ và hoạt động giống nhau.
source.url để chỉ định URL của tệp glTF/glb/FBX từ xasourceIdanimation.currentIndex để chọn hoạt hình nào để phátcurrentIndex (number), speed (number, mặc định 1.0), loop (boolean, mặc định true)sizeParams chứa width, height, depth cho kích thước mô hình
{
"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
}