Quick answer: URP does not support the built-in Nature/Grass shader. Replace grass prototype materials with a URP-compatible shader (Universal Render Pipeline/Nature/SpeedTree or a custom grass shader). Re-add the grass brushes after upgrading.

Here is how to fix Unity Terrain grass not rendering in URP. You migrate a Built-in Render Pipeline project to Universal Render Pipeline. The terrain itself still renders — ground textures look fine after the material upgrade. But the grass is completely gone. Trees might render as pink or invisible. URP’s terrain support is solid for the terrain itself but not for detail meshes unless you explicitly set them up.

The Symptom

After migrating to URP (or creating a new URP project), Terrain detail objects (grass, flowers, small rocks) do not render. Trees may render pink (missing shader), partially invisible, or shadowless. The terrain ground texture renders correctly thanks to automatic material upgrading, but details are skipped.

Selecting the Terrain component, you see grass prototypes configured with textures. Their “Detail Distance” is reasonable. But in-game, nothing.

What Causes This

Grass shader missing from URP. Unity’s built-in Nature/Grass and Nature/Grass (Billboard) shaders are built-in-only. URP has no drop-in replacement, and upgrade tools do not convert grass prototypes.

Tree material not upgraded. Trees are prefabs with materials. Automatic upgrade tools work on scene materials but may miss prefab-referenced materials if the prefab is outside scanning paths.

Detail mesh with Standard shader. Grass made of mesh prototypes (not billboards) uses whatever shader their material has. If that is the Standard shader, URP renders them as pink error.

URP asset not set in Graphics. Project Settings > Graphics > Scriptable Render Pipeline Settings must reference a URP asset. Without it, URP-specific shaders (including URP terrain and grass) may not resolve correctly.

Detail distance zero. The Terrain Settings > Detail Distance controls how far grass renders. If set to 0 (or something tiny), grass vanishes immediately beyond arm’s reach.

The Fix

Step 1: Upgrade terrain materials. Edit > Rendering > Materials > Convert Selected Built-in Materials to URP. This handles terrain, tree mesh, and standard materials. Trees often work after this step; grass does not.

Step 2: Replace grass prototype materials. For each grass Detail Prototype on your Terrain:

  1. Open the grass Detail Prototype properties (Terrain > Paint Details > Edit Details).
  2. Change Render Mode to “Vertex Lit.”
  3. If you were using Billboard mode, create a custom Shader Graph grass shader or use a package like URP Grass Shader from the Asset Store.

For Shader Graph grass: create an Unlit graph, set the Render Face to Both (for two-sided grass), add Wind Vector and Texture inputs, sample the texture, use the Alpha Clip node to produce sharp edges. Assign the shader graph to a material and use that material for the grass prototype.

Step 3: Verify terrain shader on the Terrain component. Select your Terrain. In the Inspector, under Terrain Settings:

Re-paint grass and trees if the upgrade cleared them.

Step 4: For mesh-based details, upgrade prefab materials. If your grass uses mesh prototypes (full 3D blades) rather than texture billboards:

  1. Find the mesh’s material asset
  2. In the Inspector, change Shader from Standard to Universal Render Pipeline/Lit
  3. Re-authenticate texture bindings (URP/Lit may reject some settings)
  4. Rebuild the terrain details atlas (Terrain refresh happens automatically)

Trees with Speed Tree

SpeedTree-imported trees use custom shader code. URP supports SpeedTree via Universal Render Pipeline/Nature/SpeedTree shaders. If your trees look black or have no lighting, their materials point to the Built-in SpeedTree shader. Open each tree’s materials and swap shader to URP/SpeedTree variant (SpeedTree 7 or 8 based on your version).

In the tree asset’s Import Settings, ensure “Regenerate Materials” is checked and re-import to refresh.

Performance Considerations

Grass and detail rendering can be expensive. URP’s default detail settings aim for quality over performance. For mobile or low-end targets:

Profile the Terrain rendering in Frame Debugger — the detail mesh pass should take 1–3 ms on mid-range hardware.

“URP’s terrain support is there — but it requires a manual grass pass. Plan for it in your URP migration.”

Related Issues

For general URP shader issues, see URP Shader Not Rendering in Build. For related terrain issues, Terrain Holes at Chunk Boundaries covers seam issues.

URP-compatible grass shader, re-paint, tune Detail Distance. Terrain is easy; details are not.