TOOLS DEVELOPMENT / MAYA SCATTERING
Worldbrush
Paint with assets.
Build with a live node graph.
Worldbrush is a GPU-accelerated asset-scattering tool for Maya, developed for environment building and set dressing in film and VFX. It brings direct brush control and procedural scattering into one workflow, from the first placement to a published USD scene.
Scatter foliage across terrain, build up ground litter, or art-direct a field of rocks. Use the graph to establish the distribution, then shape it in the viewport with brushes. Layers, masks, and asset variation keep the result organised as the environment develops.
01 / THE LIVE NODE GRAPH
A scatter you can
keep working on.
The live node graph is the spine of Worldbrush. It describes where instances come from, how their attributes change, and which masks influence them. Connections carry either a stream of instances or a field of mask weights.
Paint and Fill produce instances; Instance Attributes varies transforms and prototypes; Prune removes instances reversibly. Mask sources and processors form their own connected branches. Named ports make the difference between instance streams and mask weights explicit.
Individual node outputs can be viewed independently, so you can inspect the scatter before and after a stage. Brushes edit an existing Paint or Fill stage; a separate node is not created for every brush stroke. The graph stays focused on meaningful stages of the setup.
Bypass controls, backdrops, and portals help organise larger graphs. Cache and freeze controls serve explicit stages; the normal workflow keeps recipes editable.
02 / PAINTING & ART DIRECTION
Work on the scatter
with your hands.
Brushes give artists local control over the distribution. Build up a region, open a gap, soften a crowded patch, or change the asset mix without reconstructing the entire setup.
Brush shape, falloff, and transform controls define how an edit affects the area beneath the cursor. Use broad edits to establish the composition and smaller passes to refine the areas closest to the camera.
Paint / Erase add and remove placements. Move / Relax / Pinch reshape the distribution. Edit changes transforms and prototype IDs. Comb directs orientation; Clone repeats a sampled arrangement; Pile gathers placements. Mask paints local protection with add, remove, and smooth operations.
03 / LIBRARY & PRESETS
Reuse a setup.
Keep its controls.
The Library brings brushes, brush shapes, falloff curves, transform presets, modifiers, asset lists, and node-graph templates into a searchable browser. Select a brush to activate it, or apply a preset to its matching panel.
Built-in graph templates include Meadow Carpet, Pocket Litter, Bloom Islands, Crease Rocks, Lowland Moss Band, Talus Breakup, Crop Furrows, and Shade Understory. Each stores node recipes and connections; it does not freeze a finished scatter or package the target geometry.
Save a useful setup as a user preset, or point the Library at a shared preset folder. Graph templates retain parameters and texture references, so portable setups still need their source assets and textures to resolve.
04 / SURFACE-AWARE MASKS
Give the distribution
a reason to be there.
Geometry masks expose slope, ambient occlusion, curvature, and height controls. Use them to favour flat ground, find recesses, follow an elevation band, or distinguish ridges from cavities.
Procedural noise and tile patterns provide breakup. Texture masks read authored imagery, including UDIM textures; UV Transform adjusts the sampling coordinates. Merge combines mask branches, while Levels, Remap, Clamp, Invert, and Blur reshape the result.
Masks can control Fill generation or Prune existing instances. Previewing a mask separately helps explain why a region receives coverage before you judge the final asset mix.
05 / INSTANCE ATTRIBUTES
Control the variation,
axis by axis.
Translation, rotation, and scale use per-axis modifier stacks rather than a single randomise switch. Stack constants, random values, curves, noise, and expressions; enable axes independently and lock uniform scale where the asset needs to keep its proportions.
The Instance Attributes node exposes transform and asset-ID variation in the graph, including local or world space. The Edit brush applies changes locally, with Set, Blend, Multiply, Min, Max, Add, and Subtract modes.
Asset IDs choose prototypes, while weights in the asset list control the mix of newly created placements. Material and look assignment remain part of the downstream look-development pipeline.
06 / LAYERS, ASSETS & TARGETS
Keep the environment
easy to revise.
Separate ground cover, rocks, and hero dressing into scatter layers. Each layer carries its graph, asset slots, visibility, and target settings. Duplicate, merge, or hide layers as the environment develops.
Bring scene assets into a layer or resolve them through a filesystem asset library. The import workflow includes updating library-backed assets to their latest version and reimporting the source while retaining asset IDs and painted placements.
Target lists support more than one surface, with a grid fallback. Maya meshes and gpuCache geometry can supply scatter surfaces. Keep the target binding separate from a reusable graph template so the same recipe can be applied to another landscape.
07 / VIEWPORT & SCALE
Built around
dense environments.
Worldbrush is designed around GPU-accelerated evaluation and viewport interaction. The goal is to keep the artist working directly with the scatter as instance counts grow, including the start, movement, and end of a brush stroke.
The viewport system includes levels of detail, distance and screen-size culling, and optional occlusion culling. These controls reduce the amount of geometry that needs to be displayed while an artist navigates and edits a dense scene.
Performance at millions of instances is a development target. The practical limit depends on asset complexity, hardware, viewport settings, and the graph being evaluated.
High, Balanced, and Low representations provide different asset detail levels. Motion and stroke LOD can reduce display cost during navigation or painting. The renderer also includes paged instance handling and optional distant-page impostors.
08 / USD & PIPELINE HANDOFF
From Maya
into the VFX pipeline.
The finished scatter is published as USD, with a PointInstancer for each layer. Prototypes and per-instance position, orientation, and scale carry the arrangement into the downstream scene.
The publishing workflow also carries target-surface UV data and ShotGrid look-resolution metadata. This connects the scatter to a pipeline where Katana resolves published look files and Arnold renders the finished assets.
USD import brings PointInstancers back into editable layers. Baking to native Maya geometry provides another output when the scene requires it. Material and look development belong to the downstream rendering workflow.
Target-surface UVs are published as mgsp_target_st, allowing a downstream shader to sample a texture using each instance’s landing position. USD bake settings include overwrite or version-up policies. The newer graph-owned publish/import actions sit alongside the generic USD import and bake workflow.
09 / IN DEVELOPMENT
Physics-assisted
placement.
A newer Physics Paint implementation adds a settling step to asset placement, with per-asset, surface, and environment controls.
This development work is separate from the earlier physics tools, with a focus on settling behaviour and integration with the layer graph.
10 / AN EXAMPLE WORKFLOW
From a broad distribution
to deliberate placement.
A useful scatter needs both coverage and composition. Procedural tools establish the broad rules; painting lets an artist respond to a camera, a silhouette, or a specific patch of terrain. Worldbrush brings those two ways of working together inside Maya.
Choose the surface and assets
Set up the target geometry and organise assets into scatter layers. A layer can contain multiple asset slots, with weights to control the mix of newly created instances.
Paint, fill, and shape
Paint placements directly or generate a distribution with Fill. Introduce masks and transform variation, then use brushes to refine the arrangement where the composition needs attention.
Inspect, revise, and publish
View individual stages of the graph, adjust the upstream setup, and inspect the downstream result. Publish the finished layers as USD PointInstancers for look development and rendering.
11 / DEVELOPMENT
An ongoing
tools-development project.
I’m developing Worldbrush around three connected priorities: a live, inspectable node graph; responsive brush interaction at scale; and reliable USD output for a film and VFX pipeline.
The project combines a native Maya plug-in, CUDA-based GPU work, a Python/PySide interface, and USD integration. It is actively evolving, with development focused on preserving edits as the graph changes and keeping the viewport and published result consistent.