3D Geometry
Eleven nodes that feed the 3D scene: six built-in primitives, a mesh importer (OBJ / USDZ / USD / PLY, plus FBX / glTF and more via Assimp), 3D text, two Gaussian-splat loaders and a depth point cloud. Connect their geometry (or splat) output into a scene3d composer or directly to a Root geo_N port to render.
Every geometry node shares a few things: a position / rotation / scale transform and an auto-rotate field on the inspector, an albedoColor input that becomes the diffuse color when no material port is wired, and a material input that, when connected to a pbrMaterial or one of the baked presets , replaces the default shading entirely.
Cube 3D
cube3d3D / GeometryAxis-aligned cube primitive with sharp corners and proper UV unwrapping per face. The simplest test object.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| size | float | 1 | 0.01 – 10 | Edge length in scene units. |
| albedoColor | color | 0.8, 0.8, 0.8, 1 | , | Diffuse color when no material is connected. |
| material | material | , | , | Optional PBR Material override. |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
24 vertices (4 per face × 6 faces) so per-face normals and UVs are crisp. Indexed as 12 triangles. Cheap enough to instance heavily, a field of 200 cubes still hits frame rate on M-series.
Pair with noiseDisplace3d + a chromeMirror3d material for a quick "melted chrome" look.
Sphere 3D
sphere3d3D / GeometryUV-sphere with adjustable tessellation. Mesh density doubles every 2× of the segments value.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| radius | float | 0.5 | 0.05 – 5 | Sphere radius in scene units. |
| segments | float | 32 | 4 – 128 | Longitude segments, rings = segments / 2. |
| albedoColor | color | 0.8, 0.8, 0.8, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Polar UV mapping, there's a slight pinch at the poles, like every UV sphere. For procedural displacement (noise, twist, wave), 64 segments is the sweet spot. Below 16 you start to see the polygons.
The reference object for any new shader: it has every surface orientation in one place, so it's the fastest way to debug a PBR Material.
Plane 3D
plane3d3D / GeometryFlat quad facing +Y. Useful as a floor, a screen for projection, or a backdrop.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| width | float | 1 | 0.1 – 50 | |
| height | float | 1 | 0.1 – 50 | |
| albedoColor | color | 0.8, 0.8, 0.8, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Two triangles, one normal. UV coordinates run 0–1 across the entire plane, useful when you want to sample a 2D texture as a sky-ground map or to set up screen-space projection.
Torus 3D
torus3d3D / GeometryDonut. Two radii independently controlled. The crowd-favourite test geometry for materials.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| majorRadius | float | 0.5 | 0.05 – 5 | Distance from center to the tube center. |
| minorRadius | float | 0.15 | 0.01 – 2 | Tube thickness. |
| segments | float | 32 | 4 – 128 | Segments around the major axis. |
| rings | float | 24 | 4 – 96 | Segments around the tube. |
| albedoColor | color | 0.8, 0.8, 0.8, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Slow auto-rotation on Y + chrome material + a single warm directional light is the original VJ test pattern for a reason. The double-curved surface stresses materials better than a sphere does.
Cylinder 3D
cylinder3d3D / GeometryCapped cylinder, axis-aligned to Y. Inputs control radius, height and segment count.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| radius | float | 0.5 | 0.01 – 5 | |
| height | float | 1 | 0.1 – 10 | |
| segments | float | 32 | 3 – 96 | |
| albedoColor | color | 0.8, 0.8, 0.8, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Includes top and bottom caps. UV mapping wraps once around the side and projects radially on the caps. Useful as a column, a pillar, or (with low segment count) a faceted prism.
Cone 3D
cone3d3D / GeometryCone or pyramid, the segment count determines whether it reads as smooth or faceted.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| radius | float | 0.5 | 0.01 – 5 | Base radius. |
| height | float | 1 | 0.1 – 10 | |
| segments | float | 32 | 3 – 96 | 3 = tetrahedron, 4 = square pyramid, 32 = smooth cone. |
| albedoColor | color | 0.8, 0.8, 0.8, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Drop segments to 3 or 4 to use this as a low-poly pyramid. Beyond 32 the silhouette is indistinguishable from a true cone but the GPU cost grows linearly.
Mesh Loader 3D
meshLoader3d3D / GeometryLoads a 3D mesh from disk. Supports OBJ, USDZ, USD, USDA, USDC, PLY, ABC, STL natively, plus FBX, GLTF, GLB, DAE, 3DS, BLEND and others through the bundled Assimp bridge.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| scale | float | 1 | 0.01 – 100 | Uniform scale applied at load time. |
| albedoColor | color | 0.85, 0.85, 0.85, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Use the Load… button on the inspector. ModelIO handles the Apple-native formats (OBJ / USD family / PLY / ABC / STL). Anything else routes through Assimp 6, it's included inside the app bundle, no extra install required.
Missing normals and UVs are generated automatically. Multi-mesh files get merged into a single vertex / index buffer at load time, so the whole asset shares a single transform and material.
Text 3D
text3d3D / GeometryA 3D-positioned text card. CoreText rasterizes the string at the chosen font + size, the result becomes an alpha-tested quad with crisp glyph silhouettes that take light, fog, DoF and bloom like any other geometry.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| height | float | 1 | 0.1 – 50 | World-space height of the rendered text. Width follows the rasterized aspect ratio. |
| albedoColor | color | 1, 1, 1, 1 | , | |
| material | material | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Type the string, font name and pixel size in the inspector. The node sets materialData.alphaTest = true internally so transparent areas around the glyphs are discarded in the G-buffer pass, the result feels native, not like a billboard.
Combine with chromeMirror3d for hard reflective type, or neon3d for a glowing emissive look that interacts with bloom.
Gaussian Splat 3D
gaussianSplat3d3D / GeometryLoads a real 3DGS .ply splat cloud — full SH degree-3 view-dependent color, GPU-sorted every frame and auto-framed on load. Capped tile rasterizer (fast).
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| scale | float | 1 | , | Overall splat size multiplier. |
| opacity | float | 1 | , | |
| relight | float | 0 | 0 – 1 | Blend in scene-light diffuse + specular. |
| specular | float | 0 | 0 – 1 | |
| clip | geometry | , | , | Wire a Cube / Sphere to crop the cloud to its volume. |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| splat | splat | , | , |
Drop in a .ply trained with 3D Gaussian Splatting. A Point-cloud view toggle in the inspector renders flat colored dots instead of gaussians (with point-size and density dials), and the Splat Quality dial on scene3d trades resolution for FPS. Connect the splat output into a scene3d or directly into the Root.
Gaussian Splat (Global) 3D
gaussianSplatGlobal3d3D / GeometryThe same 3DGS .ply loader with a global-sort rasterizer — no per-tile splat cap, for very dense clouds the capped node drops splats on.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| scale | float | 1 | , | |
| opacity | float | 1 | , | |
| relight | float | 0 | 0 – 1 | |
| specular | float | 0 | 0 – 1 | |
| clip | geometry | , | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| splat | splat | , | , |
Use this when the capped gaussianSplat3d visibly drops splats in dense scenes. It sorts all splats globally each frame (heavier, no per-tile cap), so the cloud stays complete at the cost of some performance.
Depth Point Cloud
depthCloud3d3D / GeometryTurns a color texture + a depth map into a real 3D point cloud: a grid of points displaced in Z by depth and tinted by the color, orbitable and depth-tested in the scene.
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| color | texture | , | , | |
| depth | texture | , | , | |
| depthScale | float | 1 | , | |
| pointSize | float | 3 | , | |
| density | float | 1 | , |
| Port | Type | Default | Range | Notes |
|---|---|---|---|---|
| geometry | geometry | , | , |
Feed a picture or videoPlayer → depthEstimation into the color and depth inputs and it builds a 3D cloud you can orbit in the scene. Grid resolution, near / far, depth bias and invert live in the inspector.
A minimal scene
Three nodes plus the Root. This is the smallest reproducible 3D scene in R3NE:
Pasted into the MCP create_composition tool, this paints a slowly rotating chrome-ish torus on screen. From there you stack: add a light or two, swap in chromeMirror3d, wrap the geometry through noiseDisplace3d, etc.