> 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/getting-started/upgrading-from-6-3-35.md).

# Upgrade from 6.3.35

Upgrade projects and runtime code from Flora 6.3.35.

Review these changes when upgrading runtime code or serialized settings.

## Instance relationships

Instance relationship APIs now use three concrete roles: `Prefab`, `RenderDefinition`, and `Owner`.

| Previous API                                | Replacement                                   |
| ------------------------------------------- | --------------------------------------------- |
| `FloraInstanceFilter.ByIdentitySource(...)` | `FloraInstanceFilter.ByPrefab(...)`           |
| `FloraInstanceFilter.ByRenderSource(...)`   | `FloraInstanceFilter.ByRenderDefinition(...)` |
| `IdentitySourceGameObjectID`                | `Prefab`                                      |
| `RenderSourceGameObjectID`                  | `RenderDefinition`                            |
| `OwnerGameObjectID`                         | `Owner`                                       |
| `GetInstanceIdentitySource(...)`            | `GetInstancePrefab(...)`                      |
| `GetInstanceRenderSource(...)`              | `GetInstanceRenderDefinition(...)`            |

The previous names remain as obsolete compatibility aliases until a future version. Serialized `FloraInstanceFilter` fields migrate automatically. Constructor named arguments use `prefab`, `owner`, and `renderDefinition`.

`GetInstancePrefab(...)` now returns null for scene-only renderers instead of returning the scene object as an identity fallback. Use `GetInstanceRenderDefinition(...)` when you need the object supplying render data.

See [System](/scripts/system.md#instance-relationships) for the role definitions and common mappings.

## Rendering configuration

* **Enable GPU Occlusion Culling** replaces **Disable GPU Occlusion Culling**. Serialized behavior is preserved.
* Renderer, LODGroup, Terrain, and Camera settings replace the removed scene-level feature gates.
* Range-density controls now belong to [`FloraRenderSettings`](/scripts/render-settings.md).

Writable Volume Profiles under `Assets/` migrate density overrides to `FloraRenderSettings` automatically. Copy package profiles into `Assets/` and update references to the copies. Replace `GetGlobalDensitySettings()` and `GetGlobalVolumeSettings<FloraDensitySettings>()` with `GetGlobalRenderSettings()`.

See [Density Settings migration](https://github.com/MagneticArcade/Flora/tree/dev/Packages/com.ma.flora/Documentation~/scripts/density-settings.md) for override conflicts and detached legacy components.

## Terrain details

Terrain details are transient GPU data. They have no `FloraInstanceHandle` and do not appear in instance-handle queries. `ByDetails()` and `TerrainDetail` are obsolete and never match.

Code that previously used `ByDetails()` to identify nearby vegetation should use the dedicated terrain-detail query API:

| Previous workflow                                                    | Replacement                                                                                                                                                                                                    |
| -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Query detail instance handles with `FloraInstanceFilter.ByDetails()` | Create a `FloraTerrainDetailQuery` for the required prototype and call `FloraSystem.ScheduleTerrainDetailQuery(...)`, `RunTerrainDetailQuery(...)`, or submit a batch with `ScheduleTerrainDetailQueries(...)` |
| Inspect an instance to determine its prototype                       | Read `FloraTerrainDetailQueryResult.Prototype`                                                                                                                                                                 |
| Count matching detail instances                                      | Read `FloraTerrainDetailQueryResult.Count` or test `Present`                                                                                                                                                   |

For scheduling, disposal, and handling `NotResident` results, see [Query nearby detail prototypes](/scripts/terrain-provider.md#query-nearby-detail-prototypes).

Terrain details now stream automatically. The former streaming mode, responsiveness, and work-budget controls have been removed. Use [DetailUnloadHysteresisSeconds](/scripts/scene-settings.md#detailunloadhysteresisseconds) to set the unload grace period.

## Runtime-created instance layers

The `CreateInstance(...)` and `CreateInstances(...)` overloads accept `FloraPrefabLayerSource`:

* `Owner` uses the owner or parent layer and remains the default.
* `Prefab` uses the prefab's layer.

## Variation colors

Submit colors with `SetInstanceVariationColor(...)` or `SetInstanceVariationColors(...)`. Keep readable state in caller-owned data.

The obsolete `GetInstanceVariationColor(...)` always throws `NotSupportedException` and will be removed in the future.
