Page cover

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

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 MeshRenderers 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 instance

  • Only 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

Feature
GPU Resident Drawer
Flora

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