> For the complete documentation index, see [llms.txt](https://flora.magneticarcade.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://flora.magneticarcade.com/scripts/scene-settings.md).

# Scene Settings

Provides scene-wide configuration settings.

The **Scene Settings** singleton controls Flora rendering and terrain foliage for one scene. Create or select it from **GameObject > Flora > Scene Settings**.

## Inspector

* **Global** - terrain registration, foliage, detail streaming, and SpeedTree wind sampling.
* **Stats** - live CPU culling, GPU culling, and graphics-buffer data.
* **Rendering Inspector** - opens [Rendering Inspector](/rendering/rendering-inspector.md).
* **Rendering Debugger** - opens [Debugging](/rendering/debugging.md).
* **Flora Graphics Settings** - opens project-wide Runtime Settings.
* **Add Render Settings Volume** - adds a global Volume with `FloraRenderSettings`.

The **Stats** tab collects data only while visible. [Static Spatial Caching](/rendering/static-spatial-caching.md) adds cache status and rebuild controls.

## Properties

### `EnableRendering`

Master toggle for Flora rendering.

### `EnableTerrainFoliage`

Enables Flora rendering for Terrains with an active Terrain Provider. Disabling it returns foliage rendering to Unity.

### `AutoRegisterTerrains`

Adds a Terrain Provider to active Terrains in this scene. Disabled providers remain opted out. Turning this setting off does not remove existing providers.

### `AllowedTreeFeatures`

Limits optional tree data inherited from prototypes. Defaults to `Everything`. A Terrain's explicit **Tree Motion Vectors** mode takes precedence.

### `TerrainSpeedTreeWindProxyMode`

Controls where Flora samples [SpeedTree wind](/rendering/speedtree-wind.md) for Terrain trees:

* `PerPrototype` shares one sample between matching render prototypes and samples position-dependent wind at the world origin. This is the default and preserves the most batching.
* `PerTerrain` samples separately at the center of each Terrain.

### `SceneSpeedTreeWindProxyMode`

Controls the default SpeedTree wind sampling policy for scene-backed `FloraInstanceRenderer` components:

* `PerPrototype` shares one sample between matching render prototypes and samples position-dependent wind at the world origin. This is the default.
* `PerInstance` samples separately at each Instance Renderer or its assigned proxy anchor. Every renderer using it creates a separate proxy and rendering binding, reducing batching; reserve it for a limited number of trees that require position-dependent wind.

An individual [Instance Renderer](/scripts/instance-renderer.md) can override this setting.

### `AllowedDetailFeatures`

Limits optional data for GPU-generated details. Defaults to `None`. Random ID is supported; Variation Color is not.

### `GlobalDetailDensity`

Multiplies detail density across every Terrain. Defaults to `1`; `0` removes all details. Layers using local density apply `GlobalDetailDensity * localDetailDensity`.

### `DetailUnloadHysteresisSeconds`

Seconds to retain details after they leave range. Defaults to `0.5`; higher values reduce reload churn but retain GPU data longer.

Terrain detail streaming is automatic. Requested density maps are imported in coalesced patch ranges, ready patch layers are generated atomically through batched GPU dispatches, and out-of-range allocations are released immediately after the unload grace period. Detail placements are transient GPU data and have no instance handles.

## Runtime values

Apply runtime values through Scene Settings and its global Volume component:

```csharp
var sceneSettings = FloraSceneSettings.GetOrCreate();
sceneSettings.GlobalDetailDensity = userDetailDensity;
sceneSettings.TerrainSpeedTreeWindProxyMode = FloraTerrainSpeedTreeWindProxyMode.PerTerrain;
sceneSettings.SceneSpeedTreeWindProxyMode = FloraSceneSpeedTreeWindProxyMode.PerInstance;

var render = sceneSettings.GetGlobalRenderSettings();
render.MaxRenderDistance.Override(userRenderDistance);
render.RangeDensityMode.Override(FloraDensityMode.RenderersOnly);
render.RangeDensity.Override(userDensity);
```

Use `Override(...)`; assigning `.value` does not enable the override.

For removed scene-level feature gates and culling-pipeline fields, see [Upgrade from 6.3.35](/getting-started/upgrading-from-6-3-35.md).
