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.
Set the tile dimensions before adding detailed height or paint data.
- Select GameObject → 3D Object → Terrain.
- Open Terrain Settings and set Terrain Width, Length, and Height.
- Sculpt broad landforms, add Terrain Layers, then test the space at player scale.
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:
- creating adjacent Terrain tiles
- sculpting and painting the Terrain
- adding trees
- adding grass, flowers, rocks, and other details
- 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.
- Choose a brush shape.
- Set Brush Size for the affected area.
- Set Opacity for the strength of each brush stroke.
- Click or drag to raise the Terrain.
- 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.
- Select Paint Terrain → Paint Texture.
- Select Edit Terrain Layers → Create Layer.
- Save the new Terrain Layer asset.
- 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
- Select the Paint Trees tool.
- Select Edit Trees → Add Tree.
- Assign a tree prefab.
- Adjust Brush Size, Tree Density, and size variation.
- 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:
- Place the VRChat spawn in the intended start area.
- Enter Play mode or use the SDK's local world test.
- Walk the main routes at player scale.
- Check steep slopes, terrain edges, texture scale, and sightlines.
- Inspect the Console and profile representative views.
- 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
- Unity Manual 2022.3: Creating and editing Terrains
- Unity Manual 2022.3: Raise or Lower Terrain
- Unity Manual 2022.3: Paint Texture
- Unity Manual 2022.3: Trees
- Unity Manual 2022.3: Grass and other details
- Unity Manual 2022.3: Terrain settings
- VRChat Creation: Android Content Optimization
Continue Learning
- Install and Use Unity Terrain Tools 5.0
- ProBuilder Blockout Workflow for VR Worlds
- Create an Animated Cartoon Water Shader for VRChat
- Simple Occlusion Culling
- Unity Performance Basics for VRChat Worlds