Create and Sculpt Terrain in Unity for VRChat Worlds

Unity's built-in Terrain system stores the landscape shape in a heightmap and provides Inspector tools for sculpting, texture painting, trees, grass, rocks, and adjacent Terrain tiles.

This guide creates one Terrain tile, sets its dimensions, sculpts the playable landform, and adds a basic texture pass.

First terrain pass

Set the tile dimensions before adding detailed height or paint data.

  1. Select GameObject → 3D Object → Terrain.
  2. Open Terrain Settings and set Terrain Width, Length, and Height.
  3. Sculpt broad landforms, add Terrain Layers, then test the space at player scale.
VRChat Android note

VRChat's Android optimization guidance recommends keeping texture size, material count, mesh complexity, and real-time lighting costs low. Test terrain textures, trees, grass, shadows, and view distances on the Android build target instead of judging them only in the PC Scene view.

Terrain or Mesh?

Use Terrain when the ground needs heightmap sculpting, tiled texture painting, or Terrain-managed foliage. Use meshes for structures and landforms that require overhangs, caves, sharp vertical faces, custom UV layouts, or exact topology.

Requirement Better starting point
Rolling hills or broad natural ground Terrain
Painted grass, dirt, rock, or sand regions Terrain Layers
Caves, arches, cliffs with overhangs Meshes
Stairs, platforms, roads, and buildings Meshes or ProBuilder
Natural ground around modular structures Terrain combined with meshes

A Terrain heightmap represents one height at each horizontal position. It cannot form an overhang by itself.

1. Create the Terrain

Select GameObject → 3D Object → Terrain. Unity adds:

  • a Terrain GameObject to the Scene
  • a corresponding Terrain Data asset to the Project window
  • a large, flat Terrain surface

Select the Terrain GameObject to display its tools in the Inspector.

The Terrain toolbar provides controls for:

  1. creating adjacent Terrain tiles
  2. sculpting and painting the Terrain
  3. adding trees
  4. adding grass, flowers, rocks, and other details
  5. changing Terrain settings

2. Set the Tile Dimensions

Open Terrain Settings with the gear icon. In the mesh-resolution section, set:

Setting Controls
Terrain Width Tile size along the X axis
Terrain Length Tile size along the Z axis
Terrain Height Maximum height range stored by the heightmap
Heightmap Resolution Pixel resolution of the Terrain heightmap

Set Width, Length, and Height before detailed sculpting. Unity rescales existing Terrain content when these dimensions change.

Heightmap Resolution must be a power of two plus one, such as 513. A higher resolution can store smaller height changes but also increases memory and processing requirements.

3. Sculpt the Heightmap

Select the Paint Terrain icon, then choose Raise or Lower Terrain.

  1. Choose a brush shape.
  2. Set Brush Size for the affected area.
  3. Set Opacity for the strength of each brush stroke.
  4. Click or drag to raise the Terrain.
  5. Hold Shift while painting to lower it.

Build large forms with a broad brush first. Use Set Height when an area needs a consistent elevation, and Smooth Height to soften sharp heightmap changes.

Useful built-in shortcuts include:

Shortcut Action
[ and ] Decrease or increase Brush Size
- and = Decrease or increase Brush Opacity
, and . Cycle through brushes
F while pointing at Terrain Focus the Scene view on that Terrain area

4. Paint the First Terrain Layer

Terrain surface textures are stored in Terrain Layer assets.

  1. Select Paint Terrain → Paint Texture.
  2. Select Edit Terrain Layers → Create Layer.
  3. Save the new Terrain Layer asset.
  4. Assign its diffuse texture and configure its tile settings.

The first Terrain Layer added to a tile fills the entire Terrain. Add another Terrain Layer for a second surface such as rock, dirt, or sand, select it in the palette, then paint it with the active brush.

Each layer can reference surface textures and tiling settings. Keep the layer count deliberate: Unity's supported layer count and rendering behavior depend on the render pipeline, and VRChat uses the Built-in Render Pipeline.

5. Add Trees and Details

Unity separates larger tree objects from smaller Terrain details.

Trees

  1. Select the Paint Trees tool.
  2. Select Edit Trees → Add Tree.
  3. Assign a tree prefab.
  4. Adjust Brush Size, Tree Density, and size variation.
  5. Paint trees onto the Terrain.

Unity can replace distant 3D trees with billboards. The transition and culling distances are configured in Terrain Settings.

Grass and other details

Use the detail tool for grass, flowers, rocks, or other small repeated objects. Unity can render details as textured quads or meshes depending on the detail prototype.

Add a small test region first. Detail Distance, Detail Density Scale, and the prototype configuration determine how much foliage Unity draws.

6. Review Terrain Rendering Settings

Open the gear icon again and review these settings:

Setting Effect
Draw Instanced Enables instanced Terrain rendering
Pixel Error Higher values reduce Terrain accuracy and rendering overhead
Base Map Dist. Distance at which Unity switches to a lower-resolution composite Terrain texture
Tree Distance Distance beyond which trees are culled
Billboard Start Distance where tree billboards replace 3D tree meshes
Detail Distance Distance beyond which grass and details are culled
Detail Density Scale Scales the amount of rendered detail
Cast Shadows Controls Terrain shadow casting

These settings trade visible distance and detail against rendering cost. Change one setting at a time and compare the same viewpoint in the target build.

7. Test the Playable Area

Before adding dense decoration:

  1. Place the VRChat spawn in the intended start area.
  2. Enter Play mode or use the SDK's local world test.
  3. Walk the main routes at player scale.
  4. Check steep slopes, terrain edges, texture scale, and sightlines.
  5. Inspect the Console and profile representative views.
  6. Repeat the test for each platform the world will support.

Terrain rendering settings do not measure the cost of tree prefabs, detail meshes, materials, or shadows by themselves. Test the complete scene.

The whole Terrain changed texture when I added a layer.

This is expected for the first Terrain Layer: Unity fills the tile with it. Add a second layer, select that layer in the Paint Texture palette, and paint the areas where it should appear.

I cannot sculpt below the Terrain's starting level.

The heightmap cannot store a value below its minimum. Raise the broader land surface first or move the Terrain GameObject upward, then sculpt the lower area within the available Terrain Height range.

The terrain looks blocky when sculpted.

Use a larger, softer brush and Smooth Height first. If the heightmap genuinely lacks enough samples for the required shape, review Heightmap Resolution before continuing detailed work.

The painted texture is much too large or small.

Select the Terrain Layer asset and adjust its tile-size settings. The texture file's pixel dimensions and the layer's world-space tiling are separate controls.

Trees suddenly become flat images.

Unity uses tree billboards beyond the Billboard Start distance. Adjust Billboard Start and Tree Distance in Terrain Settings, then retest the result and its rendering cost.

Grass disappears near the camera or too early.

Review Detail Distance and Detail Density Scale in Terrain Settings and the selected detail prototype. Increasing either value can increase rendering cost, so test the target platform.

Official References

Continue Learning

Related Documentation