3D
three.js viewer, primitives and trajectory nodes.
9 nodes. Right-click any node in the editor to read this documentation in the app.
3Dโ
๐ 3D Model (glTF)โ
id threejs_load_gltf ยท 3D ยท Python export: yes
Load a glTF / GLB 3D model file (a relative path is relative to the project folder) with scale, position and rotation. Use a self-contained .glb: plain .gltf files that reference separate .bin / texture files won't load. Give it a Name so a Strut or the viewer's camera can follow it, and wire in a Path to move it (the Model offset fields then just orient the model, e.g. to make it face forward). It can play the file's own animation, spin named parts (such as propellers), turn or steer parts from a path channel (a car's wheels follow its real speed and steering), sit on the surface of another model (Follow the ground of), and leave a trail.
Inputs
| Port | Type | Description |
|---|---|---|
path | dict | Optional keyframe path (from Path or Path from Series) that animates this object. |
Outputs
| Port | Type | Description |
|---|---|---|
object | dict | 3D scene object description โ wire into a 3D Viewer. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| Model file (.glb/.gltf) | text | ||
| Scale | float | 1.0 | |
| Model offset: Position X | float | 0.0 | |
| Model offset: Position Y | float | 0.0 | |
| Model offset: Position Z | float | 0.0 | |
| Model offset: Rotation X (deg) | float | 0.0 | |
| Model offset: Rotation Y (deg) | float | 0.0 | |
| Model offset: Rotation Z (deg) | float | 0.0 | |
| Name | text | ||
| Play the model's built-in animation | checkbox | false | |
| Animation speed (x) | float | 1.0 | |
| Spin parts named (comma-separated, e.g. Propeller) | text | ||
| Spin rate (rev/s) | float | 10.0 | |
| Part motion, one per line: part-name regex, spin|steer, axis (x/y/z, - flips), source (a path channel, or rate=REV_PER_S) | textarea | ||
| Follow the ground of (object name; blank = off) | text | ||
| Ground meshes (name regexes, comma-separated; blank = all) | text | ||
| Wheelbase (m) | float | 2.9 | |
| Track width (m) | float | 1.7 | |
| Leave a trail | checkbox | false | |
| Trail color | text | #4dd0ff | |
| Trail length (s, 0 = whole route) | float | 0.0 |
๐ฃ๏ธ 3D Path (keyframes)โ
id threejs_path ยท 3D ยท Python export: yes
A hand-written motion path: one keyframe per line as t,x,y,z,rx,ry,rz (t from 0 to 1, positions, rotations in degrees), interpolated over the duration. Wire it into a 3D Primitive or 3D Model to animate it.
Outputs
| Port | Type | Description |
|---|---|---|
path | dict | Keyframe path โ wire into a 3D object's Path input. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| Keyframes: t,x,y,z,rx,ry,rz (t in 0..1, one per line) | textarea | 0,0,0,0,0,0,0 1,5,0,0,0,180,0 | |
| Loop | checkbox | true | |
| Duration (s) | float | 4.0 |
๐ 3D Path from Seriesโ
id threejs_path_from_series ยท 3D ยท Python export: yes
Turn a simulation time series into a motion path: one state column (by label or index) drives one axis of an object's position over the simulation's duration, with a value scale to exaggerate small motions and a downsample limit. A drop-in replacement for a hand-written Path.
Inputs
| Port | Type | Description |
|---|---|---|
result | SimulationResult | DataFrame | A simulation result (time + state) or a DataFrame with a time column. |
Outputs
| Port | Type | Description |
|---|---|---|
path | dict | Keyframe path โ wire into a 3D object's Path input. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| State column (label or index) | text | 0 | |
| Drives axis | select | y | x, y, z |
| Base X | float | 0.0 | |
| Base Y | float | 0.0 | |
| Base Z | float | 0.0 | |
| Rotation X (deg) | float | 0.0 | |
| Rotation Y (deg) | float | 0.0 | |
| Rotation Z (deg) | float | 0.0 | |
| Value scale (visual amplification) | float | 1.0 | |
| Max keyframes (downsample) | int | 60 | |
| Loop | checkbox | false |
๐ฉ๏ธ 3D Pose from Seriesโ
id threejs_pose_from_series ยท 3D ยท Python export: yes
Turn a time series with position (x, y, z) and attitude (roll, pitch, yaw) columns into a full 6-DOF motion path for a 3D Primitive or 3D Model โ a drone, aircraft or vehicle that banks and turns as it moves. Y is up, the model faces +Z; roll banks right, pitch tips the nose down, yaw is the heading. Works with the Drone Flight Path generator, a simulation result, or any DataFrame with those columns. Leave a column name blank to hold that value at 0. Extra channels carries further columns (such as a car's steer and wheel_angle) for a 3D Model's Part motion.
Inputs
| Port | Type | Description |
|---|---|---|
result | SimulationResult | DataFrame | A simulation result (time + state) or a DataFrame with a time column plus x/y/z and roll/pitch/yaw columns. |
Outputs
| Port | Type | Description |
|---|---|---|
path | dict | 6-DOF keyframe path โ wire into a 3D object's Path input. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| X column (label or index; blank = 0) | text | x | |
| Y (up) column | text | y | |
| Z column | text | z | |
| Roll column | text | roll | |
| Pitch column | text | pitch | |
| Yaw column | text | yaw | |
| Angle unit | select | deg | deg, rad |
| Position scale | float | 1.0 | |
| Max keyframes (downsample) | int | 1200 | |
| Loop | checkbox | true | |
| Draw the whole route | checkbox | true | |
| Extra channels: columns to pass through (e.g. steer, wheel_angle) | text |
๐ฆ 3D Primitiveโ
id threejs_primitive ยท 3D ยท Python export: yes
A simple 3D object โ box, sphere, cylinder, cone or plane โ with size, colour, position and rotation (degrees). Give it a Name so a Strut can link to it, and wire in a Path to animate it. Wire the output into a 3D Viewer.
Inputs
| Port | Type | Description |
|---|---|---|
path | dict | Optional keyframe path (from Path or Path from Series) that animates this object. |
Outputs
| Port | Type | Description |
|---|---|---|
object | dict | 3D scene object description โ wire into a 3D Viewer. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| Shape | select | box | box, sphere, cylinder, cone, plane |
| Size X | float | 1.0 | |
| Size Y | float | 1.0 | |
| Size Z | float | 1.0 | |
| Color | text | #3399ff | |
| Position X | float | 0.0 | |
| Position Y | float | 0.0 | |
| Position Z | float | 0.0 | |
| Rotation X (deg) | float | 0.0 | |
| Rotation Y (deg) | float | 0.0 | |
| Rotation Z (deg) | float | 0.0 | |
| Name | text | ||
| Leave a trail | checkbox | false | |
| Trail color | text | #4dd0ff | |
| Trail length (s, 0 = whole route) | float | 0.0 |
๐ 3D Strutโ
id threejs_strut ยท 3D ยท Python export: yes
A spring / damper-style linkage drawn between two other named objects (a thin cylinder stretched and re-oriented every frame to follow them as they move independently). Type the Names of the two objects to connect; wire the strut into the same 3D Viewer as they are.
Outputs
| Port | Type | Description |
|---|---|---|
strut | dict | Strut scene object โ wire into a 3D Viewer. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| From object name | text | ||
| To object name | text | ||
| Radius | float | 0.05 | |
| Color | text | #999999 |
๐ฅ 3D Viewerโ
id threejs_viewer ยท 3D ยท Python export: yes
Render the wired-in 3D objects in an interactive Three.js view (drag to orbit, scroll to zoom; the button top-right opens it enlarged). Connect any number of 3D Primitive / 3D Model / 3D Strut nodes. Camera mode: orbit (fixed target), follow (orbits the followed object as it moves) or chase (sits behind it and banks with its heading); the followed object is the one named in Follow object name, else the first moving object. Realistic look adds reflections, soft shadows and fog; the telemetry overlay shows the followed object's altitude, speed and attitude. Three.js is bundled, so it works offline. In exported Python it writes scene.html (loading Three.js from a CDN) and opens it in your browser.
Inputs
| Port | Type | Description |
|---|---|---|
objects | list[dict] | dict | One or more 3D objects (Primitive, Model, Strut). |
Outputs
| Port | Type | Description |
|---|---|---|
objects | list[dict] | The objects that were shown. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| Background color | text | #1e1e1e | |
| Show grid | checkbox | true | |
| Camera distance (0 = auto) | float | 0.0 | |
| Camera mode | select | orbit | orbit, follow, chase |
| Follow object name (blank = first moving object) | text | ||
| Realistic look (reflections, shadows, fog) | checkbox | false | |
| Show telemetry for the followed object | checkbox | false |
๐ Drone Flight Pathโ
id drone_flight_path ยท 3D ยท Python export: yes
Generate a smooth multirotor flight through waypoints (x, y, z per line, y up) as a table of time, position and attitude: the route is a spline, speed eases into corners (tighter turns are taken slower, limited by the max tilt), the heading follows the velocity, and roll / pitch are the lean the thrust needs to produce the path's acceleration. Output columns: time, x, y, z, roll, pitch, yaw (deg), speed, thrust_g. Wire it into 3D Pose from Series โ a simulation with the same columns can replace it later.
Outputs
| Port | Type | Description |
|---|---|---|
flight | DataFrame | time, x, y, z, roll, pitch, yaw (deg), speed, thrust_g โ one row per sample. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| Waypoints: x, y, z per line (y is up, metres) | textarea | 0.0, 5.0, 0.0 7.0, 6.2, 3.5 12.1, 7.2, 3.5 14.0โฆ | |
| Closed loop | checkbox | true | |
| Cruise speed (m/s) | float | 6.0 | |
| Max tilt (deg) - caps the cornering speed | float | 35.0 | |
| Attitude smoothing (s) - larger = lazier banking | float | 0.35 | |
| Samples per second | float | 30.0 |
๐๏ธ Ground Vehicle Pathโ
id vehicle_path ยท 3D ยท Python export: yes
Generate a car's drive around waypoints (x, z per line) as a table of time, position and attitude: a smooth line, speed limited by top speed, cornering grip and acceleration (bends are taken slower), heading along the velocity, and body roll / pitch from the accelerations. Also outputs the front-wheel steering angle and the wheel rotation angle (both in degrees) so a 3D Model's wheels can steer and turn with the car's real speed. Height is left at 0: turn on 'Follow the ground' on the 3D Model to sit it on the road. Wire it into 3D Pose from Series, listing steer and wheel_angle under Extra channels.
Outputs
| Port | Type | Description |
|---|---|---|
drive | DataFrame | time, x, y, z, roll, pitch, yaw, speed, steer, wheel_angle (deg), lat_g, long_g โ one row per sample. |
Fields
| Field | Type | Default | Choices |
|---|---|---|---|
| Waypoints: x, z per line (metres; the road surface sets the height) | textarea | 0, 0 40, 0 70, 25 40, 50 0, 50 -30, 25 | |
| Closed loop | checkbox | true | |
| Top speed (m/s) | float | 30.0 | |
| Cornering grip (g) - caps the speed through bends | float | 0.8 | |
| Acceleration / braking (m/s^2) | float | 6.0 | |
| Wheelbase (m) - for steering angle | float | 2.7 | |
| Wheel radius (m) - for wheel spin | float | 0.33 | |
| Body roll (deg per g of cornering) | float | 3.0 | |
| Body pitch (deg per g of braking) | float | 2.0 | |
| Samples per second | float | 30.0 |