3D
3D in JOS: USD basics
JOS's 3D is built on USD (Universal Scene Description). Objects are nodes: cards, primitives, cameras, lights and whole USD files. A Scene node gathers them, and a Scene inside a Scene is a group with its own transform. RenderScene renders the result with a Hydra renderer into ordinary image channels for compositing.
Your scene files are never written to. Every change made in JOS (a light, a material, a hidden prim, a moved object) lives in the comp. It is applied over the files as a layer of its own, and it goes into a file only when you export with WriteUSD.
- Formats:
.usd,.usda,.usdcand.usdz. Also Gaussian splats (.ply,.spz,.splat) and VDB volumes (.vdb): see Splats and volumes. - Where the nodes are: every 3D node is in the node picker's 3D category, and in the 3D view's create menu (see The 3D viewport).
- Drag and drop: dropping a USD file on the graph makes a ReadUSD, a splat file a ReadSplat, and a VDB file or sequence a ReadVDB.
How 3D nodes connect
3D nodes pass data, not images, along their wires: a scene, a camera or a material. You can't plug them into an image input. A Dot carries them like it carries images.
A typical tree:
ReadUSD ───┐
Card ──────┤
Light3D ───┼─ Scene ─┐
Camera3D ──┘ ├─ RenderScene ─ (comp as usual)
Camera3D ────────────┘
- Groups: plug a Scene into another Scene's input to make a group. A group's transform moves everything in it. The Outliner shows the same tree.
- Materials: a Material node plugs into a Card's or primitive's mat input. One Material can dress many objects.
- Your first object: creating a 3D object when the comp has no Scene yet makes one (Scene1) and puts the object in it.
The nodes
| Node | What it does |
|---|---|
| ReadUSD | Opens a USD file as one object of the scene. time offset shifts the file's time against the comp's frames. Moves and materials you give the file's prims (in the 3D view or the Outliner) are stored on it, and they animate like any setting. |
| Scene | Gathers objects (any number of inputs). A Scene inside a Scene is a group, moved by its translate, rotate, scale and pivot. |
| Card | An image on a card, one unit wide, as tall as the image's aspect makes it. img is the picture, mat a Material. |
| Cube, Sphere, Cylinder, Cone, Torus | Primitives, with Nuke's knobs (rows, columns, radius...). img is the texture, mat a Material. |
| Camera3D | A camera with Nuke's knobs: translate, rotate, focal length, apertures, near and far. The 3D view can drive it (Lock). Its img inputs are image planes: the picture fills its gate at distance, with opacity, scale and offset; connecting one adds another (img2, img3...). |
| Light3D | A light: distant, sphere, spot (Nuke's cone angle, penumbra and falloff), rect, disk or dome (with an HDR or EXR image). Colour, intensity, exposure, shadows, and light and shadow linking. |
| Material | An OpenPBR material (MaterialX): see Materials. Its img inputs take comp images. |
| RenderScene | Renders a scene through a camera into image channels. See below. |
| Project3D | Projects an image through a camera onto a render (its position pass), with occlusion. |
| WriteUSD | Writes a new USD file that layers your changes over the source files: the scene's tree as the Outliner shows it, cards and primitives, lights, materials (textures beside the file), prim moves and settings, the camera (keyed every frame), tracked points, splats and volumes. Use a .abc name to write only the camera and points as Alembic. |
| FocalFinder | A camera from vanishing lines on a still frame: see FocalFinder. |
| CameraTracker | Solves a camera from the plate. Track, Solve and Create Camera3D are in its panel. |
| PositionToPoints, DepthToPoints, PointCloudGenerator | Point clouds from a position pass, a depth pass and a camera, or a CameraTracker's solve. They show in the 3D view and export with WriteUSD. |
| ReLight | Relights an image from its normal and position passes with Light3Ds. |
RenderScene
RenderScene turns a scene into pictures for the comp. Connect a scene and a camera. Without a camera node, it uses the scene camera named in camera, else the scene's first camera, else a three-quarter view.
- renderer: the Hydra renderer. Empty means Embree. See Hydra renderers.
- samples (16): more samples give smoother edges and less noise.
- scene colours: turn off to render everything white (a clay render).
- ambient occlusion, motion vectors, object IDs: extra passes.
It renders at the project format and proxy level, and only the region you are looking at.
Output channels
| Channels | Content |
|---|---|
R G B A |
Colour, premultiplied |
depth.Z |
1 / distance |
P.X P.Y P.Z |
World position |
N.X N.Y N.Z |
World normal |
forward.u/v, backward.u/v |
Motion vectors in pixels (with motion vectors on) |
CryptoObject00... |
A Cryptomatte of prim paths (with object IDs on) |
Holdouts set in the Outliner are cut out of colour and alpha but keep depth, position and normal, so they still hide what's behind them.
Project3D
Project3D projects img through the camera on its camera input onto the render on its render input. Connect the scene to its scene input too: with occlusion on, what the projector can't see stays black instead of smearing behind objects. crop leaves black what falls outside the projector's frame. A plate without alpha projects opaque.
Colour
- Scenes that declare a colour space (USD's colour space on the default prim) are converted into your working space through OpenColorIO. Others are taken as already in the working space.
- Textures: 8- and 16-bit textures are read as sRGB; float textures as linear.
- Viewer settings never change the rendered images.
Not yet
- Choosing USD variants or payloads, population masks.
- Deep output from RenderScene.
- Renaming a file's prims (the file's names stay).
