V1 — Available Now

GPU Instanced
Foliage Renderer

A GPU-driven, compute-shader-based instanced renderer for scattering large amounts of foliage, grass, rocks, or any repeated mesh — with real terrain-aware placement, natural distribution, and slope-based culling built in.

$15.99 Available on Fab
Foliage scattered across a wide field, extending to the horizon
Infinite Scatter Density
Ground-level view of scattered foliage against a clear sky
Natural, Wind-Swept Growth

Built for Real Scale

This is a renderer, not a content pack — bring your own mesh and this asset handles GPU-driven placement, culling, and instanced drawing at scale.

← Swipe to explore features →
💻

Fully GPU-Driven Pipeline

Placement, culling, and drawing all happen on the GPU via compute shaders and Graphics.RenderMeshIndirect. No per-instance CPU overhead.

🏔️

Real Terrain-Aware Placement

Samples your active Unity Terrain's actual heightmap directly. Detected automatically — no manual alignment required.

📐

Slope-Normal Alignment

Instances lean to match the terrain's slope instead of always standing world-vertical, with a tunable blend between the two.

⛰️

Slope-Based Placement Filtering

Thin or fully cull instances on terrain that's too steep, with a soft per-instance gradient rather than a hard, poppy cutoff.

🌾

Natural, Organic Distribution

Noise-driven density creates clumpy, irregular coverage instead of a uniform lawn. A single Scatter Amount slider blends between that and a perfectly even grid.

🚀

GPU Frustum Culling

Runs every frame, keeping only what's actually visible in the draw call.

🌬️

Dynamic Wind System

Six built-in presets (Calm through Tornado) or fully custom direction/turbulence/gust tuning, switchable live at runtime via a public API.

🎯

Distance-Based Texture LOD

A tunable near/far blur ramp keeps close-up detail sharp and distant, densely-packed instances free of aliasing/noise.

✂️

Alpha Cutout Support

Built in for cards, billboards, or any cutout-style foliage texture.

🔄

Runtime Instance-Count Changes

A public Reinitialize(int) method supports streaming or density changes at runtime.

🌱

Works With Any Mesh You Supply

Grass, flowers, rocks, debris, anything — this is a renderer, not a content pack.

"You bring the mesh — we handle placement, culling, and scale."

Real-World Performance

Numbers from a standalone Release build — not Editor Play mode — on a 4GB legacy/budget GPU (NVIDIA Quadro M1200).

Instance Count Avg Frame Time Avg FPS Min Max P95
500 14.89 ms 67 2.81 ms 39.65 ms 24.32 ms
2,000 20.78 ms 48 3.74 ms 62.73 ms 24.18 ms
5,000 38.61 ms 26 22.95 ms 54.23 ms 53.64 ms
10,000 63.66 ms 16 47.64 ms 78.80 ms 64.42 ms
Takeaway: Smooth, real-time performance up to ~2,000 instances even on legacy hardware, scaling down gracefully to 10,000+ for scenes that can afford it.
Note: Always benchmark in a real build. Unity's Editor Play mode reports misleadingly poor frame times due to present-wait/VSync overhead that isn't present in a built player — don't judge real-world performance from the Editor.

Ready to scatter at scale?

Get it on Fab Read the Documentation

🔔 Developer Updates

Loading updates...