3D 요소는 프로젝트에서 3차원 객체를 나타내며, 가져온 3D 모델, 기본 기하학 프리미티브, 2D 형태에서 추출된 형태, 3D 텍스트 및 불리언 연산 결과를 포함합니다.
3D 요소는 기본 요소 및 보기 요소에서 공통 필드를 공유하며, 추가적인 3D 전용 속성을 도입합니다.
| 소품 | 유형 | 필수 | 예시 | 값 범위 | 설명 |
|---|---|---|---|---|---|
| type | string | true | - | 3D | 요소의 유형. 3D 요소의 경우 항상 "3D"입니다. |
| sourceId | string | false | - | - | 3D 모델 또는 기하학 리소스에 대한 내부 식별자입니다. |
| ext | string | false | - | glb | gltf | fbx | obj | geometry | primitive | text3d | parametric | curve | 3D 요소의 파일 확장자 또는 노드 유형입니다. |
| externalUrl | string | false | - | - | 외부 glTF/glb 모델을 로드하기 위한 선택적 URL입니다. 엔진이 모델을 가져오고 캐시합니다. |
| nodeType | string | false | - | primitive | geometry | text3d | import | model | parametric | curve | 3D 노드의 유형입니다. 추가 속성의 구조를 결정합니다. |
| category | string | false | - | For primitive/geometry: basic | polyhedron. For parametric: extrusion | lathe | sweep. For curve: helix | torusKnot | custom | 3D 노드의 하위 카테고리입니다. 사용 가능한 값은 nodeType에 따라 다릅니다. |
| geometryType | string | false | - | - | 기본 기하학의 유형입니다. 아래 "기하학 유형" 섹션을 참조하십시오. |
| originalWidth | number | false | - | - | 세계 단위로 3D 모델의 원래 너비입니다. |
| originalHeight | number | false | - | - | 세계 단위로 3D 모델의 원래 높이입니다. |
| originalDepth | number | false | - | - | 세계 단위로 3D 모델의 원래 깊이입니다. |
| animation | object | false | - | - | 애니메이션이 있는 glTF 모델에 대한 애니메이션 설정입니다. currentIndex, speed 및 loop 속성을 포함합니다. |
표준 2D 변환 속성(x, y, 회전, scaleX, scaleY) 외에도, 3D 요소는 3차원 위치 지정 및 회전을 위한 추가 변환 속성을 지원합니다:
| 소품 | 유형 | 필수 | 예시 | 값 범위 | 설명 |
|---|---|---|---|---|---|
| z | number | false | - | - | 3D 공간에서 요소의 깊이 위치입니다. 단위는 픽셀에 정렬되어 있으며, z=0은 캔버스 평면에 해당합니다. |
| rotationX | number | false | - | - | X축을 중심으로 한 회전, 도 단위입니다. |
| rotationY | number | false | - | - | Y축을 중심으로 한 회전, 도 단위입니다. |
| scaleZ | number | false | - | > 0 | Z축을 따라 스케일링 팩터입니다. 값이 1보다 크면 확대되고, 0과 1 사이의 값은 축소됩니다. |
geometryType 필드는 기본 3D 기하학의 유형을 지정합니다. 사용 가능한 유형은 카테고리별로 정리되어 있으며(nodeType이 "geometry" 또는 "primitive"일 때 category 필드를 통해 지정됨):
참고:
nodeType: "primitive"는"geometry"의 별칭입니다. 두 가지 모두 지원되며 동일하게 작동합니다.
기본 형태 (category: "basic"):
cube - 여섯 면의 상자sphere - 구형 기하학cylinder - 원통형 기하학cone - 원뿔형 기하학torus - 도넛 모양의 기하학capsule - 알약 모양의 기하학disc - 평면 원형 디스크다각형 (category: "polyhedron"):
pyramid - 네 면의 피라미드octahedron - 여덟 면의 다각형icosahedron - 스무 면의 다각형dodecahedron - 열두 면의 다각형hexPrism - 여섯 면의 프리즘triangle - 삼각형 프리즘매개변수 노드(nodeType: "parametric")는 기하학을 절차적으로 생성합니다:
압출 (category: "extrusion"):
선반 (category: "lathe"):
스윕 (category: "sweep"):
곡선 노드(nodeType: "curve")는 3D 곡선과 경로를 생성합니다:
나선 (category: "helix"):
토러스 매듭 (category: "torusKnot"):
사용자 정의 (category: "custom"):
위상 연산(불리언, 배열, 미러, 복합)은 편집기 내에서 수행되며 표준 기하학 출력을 생성합니다. 이러한 연산은 편집 시간에 적용되며 렌더 API에서 특별한 처리가 필요하지 않습니다.
3D 요소는 2D 형태를 압출하여 생성할 수 있습니다. 편집기에서 2D 형태 요소를 3D로 변환하면 다음과 같은 추가 필드를 가진 새로운 type: "3D" 요소가 생성됩니다:
| 소품 | 유형 | 필수 | 예시 | 값 범위 | 설명 |
|---|---|---|---|---|---|
| extrusionSource | object | false | - | - | 3D 압출을 생성하는 데 사용된 원래 2D 형태 데이터입니다. 전체 ShapeNodeData를 포함합니다. |
| shapeSizeX | number | false | - | - | 압출된 형태의 너비, 픽셀 단위입니다. |
| shapeSizeY | number | false | - | - | 압출된 형태의 높이, 픽셀 단위입니다. |
| shapeExtrusion | number | false | - | - | Z축을 따라 압출 깊이, 픽셀 단위입니다. |
| shapeCorner | string | false | - | round | chamfer | straight | 압출된 형태의 모서리 유형입니다. |
| shapeRoundnessSmooth | number | false | - | 0 - 1 | 둥근 모서리의 부드러움 (0-1). |
| shapeRoundnessArc | number | false | - | - | 둥근 모서리를 위한 호 반지름입니다. |
| shapeBevel | number | false | - | - | 모서리를 위한 베벨 깊이입니다. |
| shapeBevelSides | number | false | - | - | 베벨 모서리를 위한 세그먼트 수입니다. |
3D 요소는 깊이와 베벨링을 가진 3차원 텍스트도 나타낼 수 있습니다:
| 소품 | 유형 | 필수 | 예시 | 값 범위 | 설명 |
|---|---|---|---|---|---|
| textContent | string | false | - | - | 3D에서 렌더링할 텍스트 내용입니다. |
| textStyle3D | object | false | - | - | 텍스트 스타일 속성(글꼴, 크기, 두께 등). 일부 2D 텍스트 스타일 필드를 재사용합니다. |
| textDepth | number | false | - | - | 3D 텍스트의 압출 깊이입니다. |
| textBevelSize | number | false | - | - | 텍스트 모서리의 베벨 크기입니다. |
| textBevelSegments | number | false | - | - | 텍스트 베벨링을 위한 세그먼트 수입니다. |
| textCurveSegments | number | false | - | - | 텍스트 곡선을 위한 세그먼트 수입니다. |
3D 요소는 포괄적인 텍스처 지원을 갖춘 PBR(물리 기반 렌더링) 재료 시스템을 사용합니다:
| 소품 | 유형 | 필수 | 예시 | 값 범위 | 설명 |
|---|---|---|---|---|---|
| material | object | false | - | - | PBR 속성과 텍스처 맵을 포함한 전체 재료 구성입니다. |
material 객체는 다음을 포함합니다:
physicalMaterialData - PBR 재료 속성:
color (string) - 16진수 형식의 기본 색상, 기본값: '#818cf8'roughness (number) - 표면 거칠기, 0-1, 기본값: 0.4metalness (number) - 금속성 속성, 0-1, 기본값: 0.0opacity (number) - 재료 불투명도, 0-1, 기본값: 1.0transmission (number) - 유리 같은 재료의 빛 투과율, 0-1, 기본값: 0.0ior (number) - 굴절률, 일반적으로 1.0-2.5, 기본값: 1.5clearcoat (number) - 클리어 코팅 층 강도, 0-1, 기본값: 0.0clearcoatRoughness (number) - 클리어 코트 거칠기, 0-1, 기본값: 0.0sheen (number) - 직물 같은 광택 효과, 0-1, 기본값: 0.0sheenRoughness (number) - 광택 거칠기, 0-1, 기본값: 0.0sheenColor (string) - 광택 색상thickness (number) - 투과를 위한 재료 두께materialXPath (string) - 선택적 MaterialX 프리셋 경로:
텍스처 맵 - 재료 객체는 텍스처 맵 URL을 포함할 수 있습니다:
colorMap - 기본 색상/확산 텍스처normalMap - 표면 세부 사항을 위한 노멀 맵roughnessMap - 거칠기 텍스처metalnessMap - 금속성 텍스처aoMap - 주변 차폐 맵emissiveMap - 발광/빛나는 텍스처텍스처 맵은 최적의 성능을 위해 TSL(Three.js Shading Language) 함수를 사용하여 적용됩니다.
nodeType: "model" 또는 nodeType: "import"가 있는 3D 요소는 가져온 3D 모델을 나타냅니다:
참고:
nodeType: "import"는"model"의 별칭입니다. 두 가지 모두 지원되며 동일하게 작동합니다.
source.url을 사용하여 원격 glTF/glb/FBX 파일의 URL을 지정합니다.sourceId를 사용하여 모델을 가져오고 캐시합니다.animation.currentIndex를 사용하여 재생할 애니메이션을 선택합니다.currentIndex (number), speed (number, 기본값 1.0), loop (boolean, 기본값 true)sizeParams는 모델 치수를 위한 width, height, depth를 포함합니다.
{
"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
}