You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MasterSelects authorable 3D content now resolves through one shared scene contract.
4
4
5
-
- Stable shared-scene 3D via Three.js for models, primitive meshes, 3D text, camera clips, and the default gaussian-splat route.
6
-
- A native WebGPU gaussian-splat renderer that can be enabled per clip when needed.
5
+
- The native WebGPU scene is the primary runtime for 3D planes, primitive meshes, 3D text, imported OBJ/glTF/GLB models, camera clips, and native gaussian-splat scene objects.
6
+
- Gaussian splat clips render through the native WebGPU scene path and stay inside the same scene camera, object-transform, and effector contract as the rest of the 3D system.
7
+
- The old `three.js` bridge has been removed. Native shared-scene rendering is the only active 3D runtime.
7
8
8
9
Legacy gaussian-avatar support still exists in code for migration and old project data, but new avatar import is disabled.
9
10
@@ -12,45 +13,46 @@ Legacy gaussian-avatar support still exists in code for migration and old projec
12
13
| Surface | Status | Notes |
13
14
|---|---|---|
14
15
| Per-layer 3D toggle | Stable | Any normal video/image layer can be switched between 2D and 3D. |
15
-
| OBJ / glTF / GLB / FBX model import | Stable | Model clips are always 3D and render through Three.js. |
16
-
| Primitive mesh clips | Stable | Cube, sphere, plane, cylinder, torus, cone, and 3D text are created from the Media Panel. |
17
-
| Scene camera clips | Stable | Timeline camera clips control the shared Three.js scene. |
18
-
| Gaussian splat clips | Stable but specialized | Default route is shared-scene Three.js; native WebGPU rendering is optional. |
19
-
| Splat effector clips | Stable but specialized | They deform Three.js splats live at playback time. |
16
+
| 3D video/image planes | Stable |`clip.is3D` video and image layers render as scene planes. |
17
+
| OBJ / glTF / GLB model import | Stable | Model clips are always 3D and render as shared-scene objects. |
18
+
| Primitive mesh clips | Stable | Cube, sphere, plane, cylinder, torus, cone, and 3D text render through the native shared scene. |
19
+
| Scene camera clips | Stable | Timeline camera clips drive preview and export scene navigation. |
20
+
| Gaussian splat clips | Stable | They render as normal shared-scene objects under the native WebGPU path. |
21
+
| Splat effector clips | Stable but specialized | They deform scene-driven splats live at playback time; 3D planes remain excluded in phase 1. |
20
22
| Gaussian avatar import | Legacy only | Import is blocked; existing projects may still expose blendshape editing. |
21
23
| Temporal / particle splat settings | Experimental | Wired in the engine/export path, but not yet exposed as a dedicated properties tab. |
22
24
23
25
## Rendering Model
24
26
25
27
```text
26
-
[2D layers] -------------------------------> Existing WebGPU compositor
28
+
[2D layers] --------------------------------> Existing WebGPU compositor
27
29
|
28
-
+--> [3D model / mesh / text / camera / shared-splat layers]
29
-
| -> Three.js scene -> OffscreenCanvas -> compositor
30
-
|
31
-
+--> [Native gaussian-splat clips]
32
-
-> GaussianSplatGpuRenderer -> texture -> compositor
Three.js is used as the shared 3D scene for classic 3D layers and for the default gaussian-splat route. The native gaussian-splat renderer is a separate WebGPU path, enabled by the clip-level `useNativeRenderer` setting.
36
-
37
-
Camera clips and splat effectors only affect the shared Three.js scene. They do not drive the native gaussian-splat renderer.
38
+
Prepared splat runtime metadata, native splat rasterization, preview, nested compositions, preload, readiness, and export now all converge on the same scene-layer and scene-camera contract.
38
39
39
40
## Stable 3D Features
40
41
41
42
### Per-Layer 3D Toggle
42
43
43
44
- Any video or image clip can be toggled to 3D from the Transform panel.
44
-
- 3D layers become textured planes in the Three.js scene.
45
+
- 3D layers become textured planes in the common 3D scene.
45
46
- Turning 3D off resets the 3D-specific transform state back to 2D defaults.
46
47
47
48
### 3D Model Import
48
49
49
-
- Supported import formats are `.obj`, `.gltf`, `.glb`, and `.fbx`.
50
+
- Supported import formats are `.obj`, `.gltf`, and `.glb`.
50
51
- Model clips are automatically marked `is3D: true` and cannot be switched back to 2D.
51
52
- Models are auto-centered and normalized to fit the viewport.
52
53
- Default lighting is Ambient plus Directional lighting.
53
54
- The Transform panel exposes a wireframe debug toggle for model clips.
55
+
- Imported models use a native runtime/cache path.
54
56
55
57
### Primitive Meshes and 3D Text
56
58
@@ -69,32 +71,33 @@ Create mesh clips from the Media Panel via `+ Add > Mesh` or the context menu:
69
71
- Mesh items live in a `Meshes` folder in the Media Panel.
70
72
- Dragging a mesh item to the timeline creates a 3D clip with `is3D: true` and `meshType`.
71
73
- All transform properties and keyframe animation are supported.
74
+
- Primitive meshes and 3D text render through the native shared scene contract.
72
75
73
76
### Scene Camera
74
77
75
78
There are two camera concepts in the product:
76
79
77
80
- Composition camera: project-level camera settings on the composition itself.
78
-
- Camera clips: timeline clips that control the shared Three.js scene.
81
+
- Camera clips: timeline clips that drive the active shared scene camera.
79
82
80
83
Camera clips expose their own Properties tab with:
81
84
82
85
- FOV
83
86
- Near plane
84
87
- Far plane
85
88
86
-
The Transform tab also turns into camera-orbit controls for the active scene camera. In FPS mode, the preview accepts WASD/QE navigation plus mouse look.
89
+
The Transform tab becomes scene-navigation controls for the active camera clip. In FPS mode, the preview accepts WASD/QE navigation plus mouse look. Free scene navigation now belongs to camera clips rather than gaussian-splat clips.
87
90
88
91
## Gaussian Splats
89
92
90
-
Gaussian splat clips are imported from `.ply` and`.splat` files.
93
+
Gaussian splat clips are imported through the SuperSplat-compatible `@playcanvas/splat-transform` reader path. Supported scene formats include `.ply`, `.compressed.ply`,`.splat`, `.ksplat`, `.spz`, `.sog`, `.lcc`, and zipped SOG-style `.zip` payloads.
91
94
92
95
- Clips are created as `is3D: true`.
93
-
- The clip-level render tab exposes `useNativeRenderer`, `maxSplats`, `sortFrequency`, `splatScale`, `nearPlane`, and `farPlane`.
94
-
-The default renderer is the shared Three.js scene path.
95
-
-Native WebGPU rendering is optional and off by default.
96
-
-The shared-scene route participates in scene cameras and splat effectors.
97
-
- The native route uses its own camera-style navigation controls in the Transform tab.
96
+
- The Gaussian tab exposes the native renderer status together with `maxSplats`, `sortFrequency`, `splatScale`, `orientationPreset`, `nearPlane`, and `farPlane`.
97
+
-Gaussian splats participate in scene cameras, object transforms, object-level effectors, preview, nested compositions, export, preload, and readiness checks through the same native shared-scene path.
98
+
-Realtime splat rendering uses a worker-backed back-to-front order buffer based on the SuperSplat/PlayCanvas sorter approach. Precise export can still fall back to the existing GPU sort path.
99
+
-Sequence splats follow the same shared runtime contract and are no longer treated as a permanent legacy-only scene path.
100
+
- The Transform tab now exposes normal object transforms for gaussian splats. Scene navigation lives on camera clips.
98
101
99
102
Some gaussian-splat settings exist in the data model and export pipeline but are not yet surfaced as a full dedicated UI:
100
103
@@ -106,14 +109,15 @@ Those are wired through the renderer and export code, but they should still be t
106
109
107
110
## Splat Effectors
108
111
109
-
Splat effector clips are timeline clips that only affect Three.js splats.
112
+
Splat effector clips are timeline clips that affect scene-driven splats, including native gaussian-splat clips.
110
113
111
114
- Modes: `repel`, `attract`, `swirl`, and `noise`
112
115
- Controls: strength, falloff, speed, and seed
113
116
- Transform scale acts as the effector radius
114
117
- They do not render visible content on their own
118
+
- 3D planes remain excluded in phase 1 for parity with older projects
115
119
116
-
This is a good example of a specialized 3D feature that is stable in the UI, but limited to the shared-scene splat path.
120
+
This is a specialized 3D feature that is stable in the UI and now follows the sharedscene contract.
117
121
118
122
## Legacy Gaussian Avatars
119
123
@@ -141,55 +145,60 @@ The Transform tab is context-sensitive:
141
145
142
146
- For normal 3D layers, it shows position, scale, rotation, opacity, blend mode, and 3D toggles.
143
147
- For camera clips, it becomes scene-navigation controls.
144
-
- For native gaussian splats, it behaves like orbit/FPS camera controls.
148
+
- For gaussian splats, it now behaves like a normal 3D object transform surface plus 3D effector toggle.
145
149
- The `Speed` field is explicitly marked WIP in the UI.
146
150
147
151
## Export
148
152
149
153
3D layers are included in export.
150
154
151
-
-Shared-scene 3D models, meshes, text, and default gaussian splats render through the Three.js path.
152
-
-Native gaussian splats are handled as a separate WebGPU render target path.
153
-
- Export waits for 3D and splat readiness before capture so preview and export stay aligned.
155
+
-Scene camera resolution, scene-layer collection, splat runtime preparation, preload, and readiness now share the same scene contract across preview, nested, and export.
156
+
-Gaussian splats can export through prepared or direct native scene modes while keeping identical scene-camera semantics.
157
+
- Export waits for shared 3D and splat readiness before capture so preview and export stay aligned.
154
158
155
159
## Key Files
156
160
157
161
| File | Purpose |
158
162
|---|---|
159
-
|`src/engine/three/ThreeSceneRenderer.ts`| Shared Three.js scene renderer |
160
-
|`src/engine/three/types.ts`| Shared-scene 3D and effector runtime types |
161
-
|`src/engine/render/RenderDispatcher.ts`| Route selection for Three.js, native splats, and effectors |
Copy file name to clipboardExpand all lines: docs/Features/Media-Panel.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,8 +36,8 @@ Import, organize, and manage media assets with folder structure, proxy generatio
36
36
37
37
The panel also accepts a few specialized asset types that flow into the timeline as 3D clips:
38
38
39
-
-`model` files: OBJ, glTF/GLB, FBX
40
-
-`gaussian-splat` files: PLY, SPLAT
39
+
-`model` files: OBJ, glTF/GLB
40
+
-`gaussian-splat` files: PLY, compressed PLY, SPLAT, KSPLAT, SPZ, SOG, LCC, and SOG-style ZIP payloads
41
41
42
42
Lottie imports are treated as first-class media items. `.json` files are only accepted when their contents actually match Lottie structure, so arbitrary JSON data is not misclassified as animation.
43
43
@@ -449,7 +449,7 @@ interface MediaFile {
449
449
- Audio-only files restricted to audio tracks
450
450
- Files still importing or missing cannot be dragged to timeline
451
451
- Compositions cannot be dragged into themselves (active comp check)
452
-
- Mesh items create 3D clips with `is3D: true` and `meshType` (rendered via Three.js)
452
+
- Mesh items create 3D clips with `is3D: true` and `meshType` (rendered via the shared 3D scene)
0 commit comments