Textures & PBR packs
How images become materials, which formats are supported, and how 3dCMS streams textures so big scenes stay light on memory.
Open in the interactive manual →The interactive version has full-text search, a table of contents, and light/dark themes.
A texture is an image used as a material channel: a wood photo for color, a normal map for surface detail, a packed map for roughness/metal. They come into the graph through Raster Map and Channel Splitter nodes.
Adding a texture
Each texture field has a URL box, a Library button (browse built-in textures and your own uploads), and an Upload… button. Click an image in the Asset Library and 3dCMS even creates a textured plane for it automatically. A texture can also scroll or play as a flipbook instead of sitting still.
Supported formats
| Where | Formats |
|---|---|
| Built-in textures | PNG, JPG, WebP, AVIF, GIF |
| Uploaded images | PNG, JPG, WebP, AVIF, GIF, SVG, plus HDR / EXR (as HDRIs) |
Texture streaming
Image-heavy scenes (especially imported websites) could exhaust a phone's GPU memory if every picture loaded at once. 3dCMS streams them intelligently:
- Lazy by distance: a texture only loads when the camera comes near it; until then a placeholder holds its place.
- Proxied & sized: external images load through a CORS-safe proxy and are requested no larger than the device can use.
- Bounded residency: once too many textures are in memory, the farthest ones are released and re-stream if you return.
You can cap how many image textures stay resident in Settings ▸ Viewport Feel, a useful knob for big mobile scenes.
When a map can't load
A texture that 404s, gets refused by a server's CORS rules, or simply hasn't decoded yet stands in with a neutral chosen for the channel it feeds: white for roughness, occlusion and the other multiplied maps, black for metalness, and flat for a normal map. A missing map therefore contributes nothing, and the surface renders as though that slot were empty.
This matters most for roughness. Left to itself an unloaded map samples black, and black roughness is a perfect mirror, so a freshly applied material could sparkle like diamond dust for a frame, or for the rest of the session if the image never arrived at all. The browser console names each failing source once, because a broken map is otherwise invisible: the surface still renders, just wrongly.
Sharpness at grazing angles
Nothing to configure here, but worth knowing what you're looking at: every texture on a PBR surface (colour, roughness, normal, ORM) is sampled with anisotropic filtering at whatever level your GPU supports. That's what keeps a tiled floor or a brick wall legible as it recedes toward the horizon instead of smearing into grey mush, and it steadies the shimmer such surfaces show when the camera moves. Editor and published scene use the same setting, so what you author is what visitors get.