GPU Resident Drawer
Details on how Flora works with Unity's GPU Resident Drawer.
Flora can be used alongside Unity’s GPU Resident Drawer, but there are important technical differences between the two systems that affect performance, memory usage, and instance flexibility.
GameObjects
GPU Resident Drawer requires active GameObjects with MeshRenderer components in the scene.
Flora does not require GameObjects. It can render prefab instances directly, supporting:
This makes Flora a better fit for large-scale instancing scenarios where managing thousands of GameObjects would be impractical.
Memory Usage
GPU Resident Drawer treats each MeshRenderer as a separate instance, which leads to significantly higher GPU memory usage, especially with complex LOD groups.
For example:
Each MeshRenderer instance may include:
Motion vector data
Light probe coefficients
SpeedTree animation parameters
Bounding sphere for GPU occlusion
Wind parameters if a
Tree
component is present
A single SpeedTree LODGroup
with four MeshRenderer
s can consume over 0.5 MB per instance.
At 400,000 instances, this approaches 1 GB of GPU memory—though GameObject overhead becomes a bottleneck long before that.
In contrast, Flora:
Treats each
LODGroup
as a single instanceOnly allocates:
Motion vectors (previous frame transforms) when enabled
Light probe data if required
Avoids per-renderer duplication, resulting in significantly reduced memory usage
This allows Flora to scale more efficiently in high-density scenes.
Terrain Rendering
GPU Resident Drawer cannot render Unity terrain details or trees, as it only supports MeshRenderers in the scene.
Flora (and similar instancing solutions) support instanced terrain foliage.
GPU Occlusion Culling
Both systems use GPU-based occlusion culling, but:
Each system maintains its own occlusion resources
Using both simultaneously causes duplicate depth sampling, increasing GPU load
Unity does not expose the internal resources used by GPU Resident Drawer, so Flora cannot integrate with its occlusion system.
Recommendation: Use only one GPU occlusion system per scene to avoid redundant work—especially on lower-end GPUs.
Feature Comparison
Requires GameObjects
✅ Yes
❌ No
Supports Terrain Trees/Details
❌ No
✅ Yes
Per-instance Motion Vectors
✅ Yes
✅ Yes (on demand)
Per-instance Light Probes
✅ Yes
✅ Yes (on demand)
Child Renderer Support
✅ Full
⚠️ Limited (parent-only)
GPU Occlusion Culling
✅ Yes
✅ Yes
Memory Efficiency
❌ High Overhead
✅ Optimized
Max Practical Instance Count
🚫 GameObject Limited
✅ Scales to hundreds of thousands
Last updated