Drop-In Terrain Renderer: GPU Trees & Grass
Your terrain's trees and grass, culled and drawn on the GPU in Unity URP: your shaders untouched, no settings changed, nothing to edit.
The video plays from YouTube (youtube-nocookie.com) once you press play.
Overview
Drop-In Terrain Renderer takes over drawing a Unity Terrain's trees and grass. Culling, LOD selection and the draws run on the GPU, so the main thread stops paying for every tree. Add one component to a terrain; remove it, and Unity draws them again.
Your shaders untouched, no settings changed, nothing to edit. Your trees and detail meshes keep their own materials, drawn through patched copies of their shaders: URP Lit and Simple Lit, any Shader Graph with no node to add, SpeedTree 8, NatureManufacture and The Visual Engine were each compared with Unity's own image. There is no renderer feature to add and no URP asset or project setting to change, and the terrain stays the source of truth: paint with Unity's tools, keep your tree colliders. Hand-written URP shaders built like URP's own need nothing either; one without URP's instancing setup in its vertex functions stays drawn by Unity, and the Inspector names the pass and the lines to add. Whatever cannot be drawn stays drawn by Unity, with the reason and its fix in the Inspector: nothing vanishes.
It says where the speedup is, and measures it in your scene. LOD Group trees gain the most: Unity culls them and picks their LODs one by one on the main thread. At the demo valley's Lookout (about 522,000 trees and rocks, 8.2 million grass clumps and plants at full density), a 2560x1440 development player measured 0.07x Unity's frame time (255 → 17.5 ms) at 0.96x Unity's GPU time, on an RTX 5080 with a Ryzen 9 7950X3D. Where the GPU already sets the frame, the gain is main-thread time for your game, not frame rate: the built-in before/after benchmark says which, and why.
On top, all optional: Drop-In Leaves, Bark and Grass shaders with light through the leaves and wind from the scene's Wind Zone, impostors for far forests, grass that bends round characters and creatures, grass past Unity's 250 m thinned with distance, and, with Drop-In Sky & Weather or Drop-In Water in the scene, wet leaves, snow and no grass under the water. Neither is required.
Key features
- One component per terrain: GPU culling, LOD selection and indirect draws for its trees and grass; remove it and Unity draws them again
- Your shaders untouched: drawn through patched copies; URP Lit, Simple Lit, any Shader Graph with no node to add, SpeedTree 8, NatureManufacture, The Visual Engine and a hand-written URP shader built like URP's own (our test shader, in the editor) tested
- No settings changed: no renderer feature, no URP asset or project setting; the TerrainData stays the source of truth
- Exact Unity grass in Match Unity, one indirect draw per kind, or Extended: grass past Unity's 250 m, thinned with distance
- Nothing vanishes: what it cannot draw stays drawn by Unity, with the reason and its fix in the Inspector
- Before/after benchmark in your own scene, in Play mode or a development build: whether it helped, why, and what to try next
- Stats Overlay (F8): trees and grass on screen, what Unity draws and why, GPU memory
- Drop-In Leaves, Bark and Grass shaders: light through the leaves, wind from the Wind Zone, wind groups
- Impostors for far forests and grass interaction round characters and creatures
- Drop-In Sky & Weather and Drop-In Water hooks: wet leaves, snow, no grass under water; neither is required
- Game quality menus: the quality level followed, with its terrain overrides, and grass distance, density and tree LOD scales for an options menu's sliders
Good to know
URP only, Unity 6.3 or newer, on GPUs with compute shaders; only Windows has been run. Mobile, Quest and mesh terrains are not supported. One tree or detail kind Unity must draw hands that terrain's trees (or details) back to Unity until it is fixed. Hand-written shaders need URP's instancing setup in their vertex functions; CG and Built-in shaders and shaders made for another renderer's instancing stay Unity's. SpeedTree 8 leaves show a fine speckle along their edges; SpeedTree 9 has not been tested and its wind is not read. Impostors cast no shadows. A tree edit by script or a streamed terrain reads every terrain's trees again, a short hitch. The speedup is on the CPU: a scene the GPU already holds gains main-thread time, not frame rate.

