Pattern Painter is a Unity Editor tool for placing Game Objects in geometric patterns across your scene. Drag a Paint Volume over meshes and terrain, or select one object and fit the volume to it. It is built for fast level-design iteration, from small props to dense prefab runs.

  • Grid
  • Checkerboard
  • Line
  • Circle
  • Oval
  • Triangle
  • Rectangle
  • Pentagon
  • Hexagon
  • Zigzag
  • Arrow
  • Star
  • Concentric Circles
  • Radial Spokes
  • more to come!

Getting Started

The basic workflow is:

  1. Place a Paint Volume: drag it over your scene, or select one object and press Fit Volume to Selection.
  2. Project a pattern of Placement Points and tweak its settings to your needs.
  3. Instantiate a Prefab at each Placement Point.

Optionally:

  • Adjust the rotation of generated Game Objects.
  • Align objects to other surfaces, like terrains and other meshes.

Surface Source

Open the Pattern Painter UI via Tools > Pattern Painter

Pattern Painter tool menu

Section 1 of the window decides which surfaces receive Placement Points. It offers two options: Paint Volume, or Off to hide every Scene view preview. Your choice is remembered from then on.

Section 1, Surface Source, showing the mode toggle, volume shape and dimension fields, Surface Layers, Highlight Surfaces In Volume, and the three volume buttons

Paint Volume (default)

Drag a box or cylinder over geometry you have already built. Whatever surface lies inside it receives points, whoever owns it: several meshes at once, a terrain, or geometry you cannot re-parent. The volume is editor state: it never enters the Hierarchy, never adds a component, and never dirties a scene.

Painting onto one object

Select the object and press Fit Volume to Selection. The volume wraps around it, and its surfaces receive points like any other surface inside a volume. As of 4.1.0 this replaces Selected GameObject, which is no longer a Surface Source; if you last used it, the tool opens in Paint Volume.

Off

Use Off when you do not need a preview. It hides the Paint Volume wireframe, shell, surface highlight, and grips, plus prefab ghosts and placement-point spheres. It does not clear the volume, pattern, or prefab settings, so choose Paint Volume again when you are ready to continue.

A box Paint Volume dragged over several separate meshes, with the caught surfaces tinted and placement points on each of them

Placing a volume

Drag the grips in the Scene view, or type exact numbers into the window. Three buttons do the rest:

  • Fit Volume to Selection wraps the volume around whatever you have selected. It is how you paint onto a single object.
  • Move Volume to View lands the volume on the surface under the middle of the Scene view, centered so half its height sits above that surface. It is not a recenter on the camera pivot.
  • Reset Volume returns the volume to its default size and position.
A cylinder Paint Volume in the Scene view with its four radius grips at the compass points
Tip:Hold Alt (Option on macOS) while dragging a grip to resize symmetrically: the side under the cursor keeps following it, the opposite side mirrors, and the volume's center stays put. Press Alt after starting the drag. Pressing it first lets the Scene view claim it for camera orbit.

The volume is bounded at both ends

Projection starts at the volume's top face and travels exactly the volume's height. Geometry above the volume no longer occludes what is inside it, and geometry below the volume is no longer caught. This is what lets you paint one floor of a building, or the ground under a canopy.

A Paint Volume under a ceiling places points on the floor below it and none on the ceiling above

Terrain

Terrain is a first-class surface. Terrains are sampled directly, so they need no Collider and the heights are exact. A terrain that has been rotated cannot be sampled and is skipped with a message saying so. Terrain trees and detail meshes are never targets.

Placement points following the exact contours of a Unity terrain across a hillside

Create floors in empty space

Enable Fill Misses at Volume Bottom to create new floors, bridges, and floating platforms without a temporary base mesh. Each point still uses the nearest eligible mesh or terrain hit; only misses fall back to the volume's bottom face. The setting is off by default and never fills outside the true box or cylinder footprint.

Surface Layers

Decides which layers can receive points. Objects Pattern Painter created are always excluded, whatever this is set to, so a second run never paints on the first run's output.

Highlight Surfaces In Volume

On by default. Tints the surfaces that will receive points, so you can see what the volume has caught before pressing anything. Terrain gets its footprint draped over it instead. Turn it off on weak hardware.

Volume Color, in Settings and Support, tints the volume's wireframe, shell, highlight, and grips independently of Preview Color. Both are saved per user, so upgrading does not reset them.

The Settings and Support section, showing Select Language, Preview Transparency, Preview Color, and Volume Color
Note:A volume is world-space rather than scene-bound, so it is still there in the next scene you open. Move Volume to View is the quickest way to bring it back to where you are working.
Warning:Projection is straight down. A volume pushed into a vertical wall cannot place points on the wall. With Fill Misses at Volume Bottom off it produces almost nothing; with the setting on, misses land on the volume bottom. Use volumes for ground, floors, and roofs.

Placement Mode

Open the Pattern Painter UI via Tools > Pattern Painter

Pattern Painter tool menu

With a Surface Source set in section 1, section 2 is where you choose the pattern itself. Pick Grid, Line, or Circle, then adjust its settings.

For modular floors, assign your pieces in Prefab Settings, choose Grid, then click Adjust to Mesh under Cell Size. It copies the shared X/Z mesh footprint into the grid so a Paint Volume can fill with edge-to-edge tiles. The button is available only when every assigned prefab has matching X/Z mesh bounds; empty slots and colliders are ignored.

Line Shapes

Under Line > Shapes, the Line pattern traces an outline. Every shape places exactly one object on every corner, with even spacing along each side, so points never bunch up or double at a corner.

  • Zigzag runs Size X long and Size Y from peak to peak. Teeth sets the number of peaks. It is an open path, so both ends get a point.
  • Arrow fills Size (width × length) and points forward.
  • Star is a five-pointed star whose Size is its outer diameter, pointing forward.
  • Arc: a partial arc, less than 360 degrees, has a point on both ends. A full circle places its seam point once.
Note:A shape's Size stops at 1.5 times the longest side of the Paint Volume.

You will see a live preview of Placement Points (green spheres) projected onto the surface. Live preview keeps updating automatically up to 50,000 placement points.

Live preview of Placement Points
Tip:Live preview updates automatically up to 50,000 placement points. For denser patterns, reduce density or click Calculate Placement Points when you are ready for the progress dialog.

If they don't appear:

  • Move the camera closer to the object.
  • Adjust pattern settings to reduce point density, or use Calculate Placement Points when you are ready for a dense pattern.

Select a pattern and click “Calculate Placement Points”.

message-example-3

Prefab Settings

Assign one or more Prefabs in the “Prefab to Instantiate” field. The preview updates to the Prefab silhouette before you create anything.

Multiple Prefabs and Empty Slots

Use + to add prefab slots and x to remove them. Assigned Prefabs repeat in slot order across every projected point, and the ghost preview uses that same order.

Note:Empty slots are ignored. They do not show point spheres between assigned Prefab ghosts, consume projected points during creation, or shift the Prefab used when rotations are recalculated. If an assigned object still previews as spheres, make sure it or one of its children has a MeshFilter or SkinnedMeshRenderer with a Mesh.

Optionally, assign a Parent Object from the scene to keep prefabs organized.

Assign Parent for Game Objects

Click “Create Prefabs at Placement Points” to generate prefabs at the Placement Points. Pattern Painter reports both the previewed point count and the created object count when it finishes.

Note:Create, Align With Surface, and Recalculate Prefabs Rotation are undoable. Enable Number Created Instances when you want each object named with an order number.

Alignment Settings (Optional)

Adjust the rotation of generated Game Objects using the “Prefab Rotation Mode” dropdown, then click “Recalculate Prefabs Rotation”.

Face Toward Center Line and Face Away From Center Line turn each object toward, or away from, the nearest point on a line through the middle of the pattern, rather than one center point. The line runs along the longer side of the pattern and turns with it. Two rows face straight across at each other, like guards lining a hallway, and the ones at the ends no longer turn inward.

Rotation Offset (Y) adds one extra turn, from -180 to 180 degrees, on top of any mode, so turning every object a quarter turn, or all of them the other way, is a single slider. The preview shows it immediately; press Recalculate Prefabs Rotation to apply it to objects you already created.

Align to Terrain (Optional)

To align objects to another surface, such as terrain, choose a target surface below the objects.

Then select the Alignment Layer of the terrain and click “Align With Surface”.

Cones placed in circular and line patterns sitting flush on the contours of a terrain after Align With Surface
Warning:For best results, put the target terrain or mesh on its own Alignment Layer. The target should be below the objects, and generated prefabs should not be on the selected target layer.

Important:

  • Target surface must be on a selected, target-only Alignment Layer.
  • No Collider needs adding: alignment follows the target mesh surface, borrowing a Collider temporarily where there is none, and a terrain already carries its own.
  • It must be below the objects in world space (Y axis).

Developer Notes

  • Pattern Painter supports Undo & Redo for placement operations.Undo Placement
  • The high-density warning appears above 50,000 points when you click Calculate Placement Points.Long Running Process Warning
  • Press Space Bar to cancel long-running generation, projection, creation, rotation, or alignment work.Long running process progress bar
  • Dense patterns are dramatically faster as of 4.0.0, but baking or combining complex meshes still improves projection and alignment cost.
  • Minimum point spacing is half your pattern's own spacing, capped at 0.5 units. Before 4.0.0 it was a flat 0.5, which silently discarded points from patterns finer than that.
  • A Paint Volume is editor state, not a scene object. It adds no component, never enters the Hierarchy, and dirties no scene.

Known Limitations

  • Designed for 3D editor workflows with world up = Y; not tested as a dedicated 2D workflow.
  • Projection is straight down. A Paint Volume pushed into a vertical wall cannot place points on the wall. With Fill Misses at Volume Bottom off it produces almost nothing; with the setting on, misses land on the volume bottom. Use volumes for ground, floors, and roofs.
  • Very large, terrain-scale object placement can still be expensive. Split massive scatter jobs when a dedicated terrain scatterer would be a better fit.
  • A terrain that has been rotated cannot be sampled and is skipped. Terrain trees and detail meshes are never placement targets.

Release History

  • Three new Line shapes, rotation that faces a center line, a Rotation Offset slider, and a preview that matches what you create. Fit Volume to Selection replaces Selected GameObject.

    • New Line shapes under Line > Shapes: Zigzag, Arrow, and Star. Zigzag runs Size X long and Size Y from peak to peak, with a new Teeth setting for the number of peaks, and gets a point on both ends. Arrow fills Size (width × length) and points forward. Star is five-pointed, with Size as its outer diameter.
    • New Face Toward Center Line and Face Away From Center Line rotation modes. Each object faces the nearest point on a line through the middle of the pattern, so two rows of guards down a hallway look straight across at each other.
    • New Rotation Offset (Y): one extra turn from -180 to 180 degrees on top of any rotation mode. The preview shows it immediately; press Recalculate Prefabs Rotation to apply it to objects you already created.
    • Now also available for Unity 6.6 (URP), alongside Unity 2022.3, 6.0, and 6.3.
    • Changed: Selected GameObject is no longer a Surface Source, so section 1 offers Paint Volume and Off. To paint onto one object, select it and press Fit Volume to Selection. If you last used Selected GameObject, the tool opens in Paint Volume.
    • The Scene view preview now matches the objects you create. A prefab with a scaled root no longer previews at the wrong size, a rotated root is respected under Default Prefab Rotation, and a prefab whose pivot is off-center no longer drifts when facing the pattern center.
    • Line patterns with an offset now face the right center under Face Toward Center of Pattern and Face Away From Center of Pattern, in the preview, on creation, and in Recalculate Prefabs Rotation.
    • Line shapes place exactly one object on every corner, with even spacing along each side. The triangle no longer leaves a gap at its base, and the oval no longer crowds its narrow ends. Outlines and positions are unchanged; the number of points along them may differ slightly.
    • Partial arcs now have a point on both ends, so a 180 degree arc is no longer lopsided. A full circle still places its seam point once.
    • A shape's Size no longer jumps to around 1000 when you drag its label past the edge of the window. It now stops at 1.5 times the longest side of the Paint Volume.