Skip to main content
Any layer in Masterselects can be promoted to 3D mode. When a layer is in 3D mode, it is rendered by a Three.js scene into an OffscreenCanvas, which is then imported into the WebGPU compositor as a standard texture. 2D layers are unaffected and continue through the existing pipeline.
Three.js is lazy-loaded via a dynamic import and is only initialized when the first 3D layer becomes active. Projects with no 3D layers have zero overhead from this feature.

Architecture

2D layers ──► WebGPU compositor

3D layers ──► Three.js scene ──► OffscreenCanvas ──► copyExternalImageToTexture

             Camera + lighting

Enabling 3D mode on a layer

Select any video or image clip and click the 2D / 3D toggle button in the Transform panel. This switches the layer to a textured plane in the Three.js scene and exposes the full set of 3D transform controls. Toggling back to 2D resets Position Z and Rotation X/Y to zero.

Importing 3D models

1

Add the model to the Media panel

Drag an OBJ, glTF, GLB, or FBX file into the Media panel. The file is stored and appears in the panel’s file list.
2

Add to the timeline

Drag the model from the Media panel onto the timeline. A clip is created with is3D: true set automatically — model clips cannot be switched to 2D mode.
3

Enable 3D mode (if needed)

Model clips are already in 3D mode. For video or image clips, click the 2D / 3D toggle in the Transform panel.
4

Adjust transform

Use Position, Rotation, and Scale in the Transform panel to place the model in the scene. Models are auto-centered and normalized to fit the viewport on import.

Supported formats

FormatLoaderNotes
.objOBJLoaderDefault Blender export. No materials without an accompanying .mtl file — falls back to gray MeshStandardMaterial.
.gltfGLTFLoaderKhronos standard, text-based.
.glbGLTFLoaderBinary glTF — most common format for web delivery.
.fbxGLTFLoader (fallback)Autodesk format. Support is limited.

Primitive meshes

Create 3D geometry without importing a file. In the Media panel, click + Add › Mesh or right-click and choose a primitive from the context menu.
PrimitiveThree.js geometryDefault size
CubeBoxGeometry0.6 × 0.6 × 0.6
SphereSphereGeometryradius 0.35, 32 × 24 segments
PlanePlaneGeometry0.8 × 0.8
CylinderCylinderGeometryradius 0.25, height 0.6
TorusTorusGeometryradius 0.3, tube 0.1
ConeConeGeometryradius 0.3, height 0.6
Mesh items appear in a Meshes folder in the Media panel. Drag one to the timeline to create a 10-second 3D clip. All primitives use a default MeshStandardMaterial (color #aaaaaa, metalness 0.3, roughness 0.6). Enable the Wire button in the Transform panel to render a blue wireframe overlay.

Lighting

The 3D scene uses two default lights:
  • Ambient light — intensity 0.6, illuminates all surfaces equally
  • Directional light — intensity 0.8, casts directional shading
Lighting is per-composition and applies to all 3D layers in the scene.

Camera

Each composition has a single perspective camera with the following configurable properties:
PropertyDefault
FOV50°
PositionAuto-calculated to fill the viewport at default transform
Target (look-at)Center of scene
Near / far planesConfigurable
The camera is not currently keyframeable.

3D transforms

In 3D mode, the full three-axis transform is available:
PropertyControls
PositionX, Y, Z
RotationX, Y, Z (displayed as Nx + remainder°, e.g. 2x +30.0°)
ScaleX, Y, Z (Z available for model clips)
OpacityComposited at the WebGPU layer level
Blend modeAll 37 modes supported
All 3D transform properties are fully keyframeable. Keyframe lanes for position.z, rotation.x, rotation.y, and rotation.z are hidden when the clip is in 2D mode.

GPU effects on 3D layers

GPU effects (blur, color correction, keying, and all other categories) apply as post-processing on the Three.js render output. Because Three.js renders to a texture first, effects behave identically to 2D layers.

Limitations

  • No PBR material editor — models use embedded or default materials only
  • No shadow casting between layers
  • Camera is per-composition and is not keyframeable
  • Model clips require file re-authorization after a page refresh (same behavior as video clips)

Build docs developers (and LLMs) love