Demo & Runtime Guide
Chain environment profiles to animate terrain, scatter and lighting, then connect surface information to your own gameplay.
On a small screen, scroll wide tables sideways to read every column.
The demo components let you inspect terrain, chain live environment transitions, control biome and scatter responses, and test which biome a physics raycast reports. They are examples you can learn from and adapt; they do not provide a complete character controller, physical weather simulation or footstep audio system.
You do not need to write code to try the demo. The integration example later in this page is for developers who want to use surface information in their own gameplay.
Try the demo and identify its parts
- Open
Assets/DPTGames/Vertex_3D_Terrain/Vertex3DTerrain_Demo/VertexTerrain_DemoScene.unity. - Inspect the terrain material and Ground Library. Assign that material to the Dynamic Biome Demo Controller and optionally assign a directional Sun light.
- Set up the first appearance in the terrain material Inspector. Click + Capture Current Settings as NEW Profile on the demo controller. Name the profile, for example Spring.
- Change the actual material settings to create the next appearance. Capture again and name the new profile Summer. Continue for Autumn, Winter or other appearances.
- To revisit a saved appearance, click Apply Profile To Material on its profile. This loads the stored settings into the actual shared material for further editing. If you want to keep the edits, click Capture Profile From Material afterward.
- Set Transition Seconds, Easing and Channels to Animate on each profile, including the first. Choose its biome slots, lighting and optional Wind. Click that profile’s Animate To Profile to reach it and stay there.
- To test an entire sequence, capture at least two profiles and click Run Sequence From Start. Both playback methods work in Edit Mode and Play mode. Use Pause, Resume and Stop & Restore. Edit Mode scrubbing applies to the full sequence.
- Optionally enable Play On Start to run the sequence automatically when entering Play mode. Use the demo camera to explore the results.
- Use Surface Raycast Tester to inspect the biome IDs returned for painted surfaces.
| Component / asset | Its job | Needed for your own game? |
|---|---|---|
| Dynamic Biome Demo Controller | Captures material and Sun snapshots, then blends dynamic biome, scatter and optional lighting settings between Environment Profiles. | Optional. Use the example timeline or integrate your own gameplay logic. |
| Surface Raycast Tester | Displays a physics hit and the biome returned for it. | Optional debugging tool. Your gameplay can call the same surface-query API directly. |
| Terrain Demo Camera | Provides free camera movement for inspection. | Optional. Replace it with your own player/camera system. |
| Terrain Surface Data | Baked triangle-to-biome information. | Required for the supplied triangle-based biome query. |
| Terrain Surface Target | Links a renderer to baked data and evaluates surface queries. | Use on terrain that should support the supplied surface query. |
Dynamic Biome Demo Controller
Click Open Documentation at the top of the component Inspector, or the component header’s Help icon, to open this online guide: Demo & Runtime Guide.
Add DPT → Dynamic Biome Demo Controller to a GameObject. Assign Terrain Material or place the component on a GameObject with a Renderer so it can resolve that Renderer’s shared material. Assign Sun if you want to blend a directional light’s rotation, intensity and colour.
The material Inspector is the authoring interface. Set your dynamic biome slots, target IDs, dusting, scatter density and colour, surface overrides and flow settings there. The demo controller deliberately does not duplicate those controls. It reads and stores material values only when you click a capture button.
All terrain objects using the same material receive the same changes. This is useful when several neighbouring tiles need to change together. Use separate materials if you need independent behaviour.
Single-script component: The custom Inspector and its capture buttons are included in DPT_DynamicBiomeDemoController.cs inside an Editor-only conditional. No second Editor script is required. If you previously installed DPT_DynamicBiomeDemoControllerEditor.cs, remove that old file to avoid duplicate Inspector classes.
Inspector sections
| Section | Purpose |
|---|---|
| Open Documentation | Opens this online guide. Unity’s component Help icon also links here. |
| Target Setup | Assign Terrain Material and optional Sun. |
| Test Environment Sequence | Use Run Sequence From Start, Pause, Resume and Stop & Restore to test changes without automatic playback. |
| Environment Profiles | Capture independent snapshots, choose their transition time, easing and affected channels, then use Animate To Profile to reach and hold one state. Apply Profile To Material remains available for an instant full-snapshot edit. Profiles can also be recaptured, reordered or removed. |
| Playback | Configure Play On Start, Loop, optional Loop Return Seconds and Playback Speed. |
| Edit Mode Preview | Enable Preview In Edit Mode and scrub with Preview Normalized. Use Stop Preview & Restore Material when finished. |
What the profile stores
Each profile captures an independent copy of all four modifier slots, including active states, biome IDs, weight, smoothness, normals, parallax, emission, flow, dusting and scatter response. It also captures supported stylized lighting values, the assigned Sun’s rotation, intensity and colour, and the terrain material’s Wind enabled state, strength, direction and Height To Tip.
A profile does not keep a link to the material’s live values. Changing the material to create Winter does not change a previously captured Autumn snapshot. To change an existing snapshot, capture again using that profile’s own button.
Apply Profile To Material instantly loads the entire captured snapshot into the shared material and optional Sun, regardless of Channels to Animate. Use it in Edit Mode, with playback and preview stopped, to return quickly to a saved appearance and edit it. It supports Unity Undo and does not change the saved profile.
Animate To Profile instead blends from the current appearance, changes only the destination profile’s checked channels and holds the result. It works in Edit Mode, Play mode and while another profile transition is running.
See Terrain Material Settings for the shader settings themselves and 3D Scatter Guide for how a biome’s scatter-response settings affect instanced vegetation.
Environment Profiles & Timeline
Use Environment Profiles for seasons, droughts, flooding and temperature shifts. Run Sequence From Start uses the first profile’s checked channels as its starting appearance, then moves through the later profiles. Animate To Profile requests any captured profile directly, including the first.
Profile 1 has the same controls as every other profile: Transition Seconds, Easing, Slot 1–4, Stylized Lighting, Directional Light and Wind. Unchecked channels retain their current settings. A newly captured first profile selects all channels by default; later captures detect changes from the previous resolved state. Existing checkbox selections are preserved.
Capture a sequence
- Spring: configure the material and optional Sun, then click + Capture Current Settings as NEW Profile. Rename the new profile Spring. This defines the beginning of the timeline.
- Summer: edit the material and light to show summer, then click the same button again. Name this profile Summer and set Transition Seconds to the desired duration.
- Autumn: adjust dusting, scatter and lighting as required, then capture a third profile and name it Autumn.
- Winter: finish configuring snow dusting, reduced vegetation and colder lighting. Capture another profile and set its transition duration.
- After the first profile, captures automatically check the biome, lighting and wind channels that differ from the previous resolved state. Adjust Channels to Animate manually on any profile, including the first. Unchecked channels keep their current values.
- Preview the full sequence with Preview In Edit Mode and Preview Normalized, then use Stop Preview & Restore Material. With Loop enabled, the final state returns through the first profile’s checked channels. Unchecked channels remain unchanged.
Editing an existing profile: click Apply Profile To Material on the profile you want to edit, change the material or Sun, then click Capture Profile From Material and confirm. Only the selected snapshot is overwritten. Stop any preview or playback before applying or capturing.
Controls
| Setting / button | Behaviour |
|---|---|
| + Capture Current Settings as NEW Profile | Appends a new, independent snapshot of the assigned material and Sun, without changing any earlier profiles. |
| Capture Profile From Material / Capture Current Settings into Profile | Copies the current material and Sun into the selected profile. Replacing an already captured profile asks for confirmation. |
| Apply Profile To Material | Immediately loads all stored biome slots, the live-biome master setting, lighting values and any captured wind into the shared material and optional Sun. It ignores Channels to Animate and leaves the saved snapshot unchanged. Stylized lighting values are restored without changing that shader feature’s enabled state. Available in Edit Mode with playback, holding sessions and preview stopped. |
| Animate To Profile | Blends from the current appearance using this profile’s checked channels, duration and easing, then holds it until another request. Works with a single captured profile and on the first profile too. Can interrupt an existing transition. |
| Name | Descriptive label such as Spring, Winter, Drought or Flooding. |
| Transition Seconds | Incoming duration when this profile is requested, including profile 1. Zero applies immediately and holds. Run Sequence starts at profile 1 without an incoming transition; its closing transition uses Loop Return Seconds. |
| Easing | AnimationCurve controlling the speed through a transition. |
| Channels to Animate | Select Slot 1–4, Stylized Lighting, Directional Light and Wind independently on every profile, including the first. The selection applies to direct profile requests and sequence playback. Unchecked channels retain their current values. Apply Profile To Material loads the full snapshot instead. |
| Run Sequence From Start / Pause / Resume | Run Sequence tests the full sequence. Pause and Resume control either a sequence or an unfinished profile request. Resume does not restart a completed profile that is already holding. |
| Stop & Restore | Stops playback, profile holding or scrubbing and restores the material, Sun and wind as they were when the session began. After several profile requests, restoration still returns to the original pre-session state. Disabling or removing the component also restores that state. |
| Play On Start | Optional automatic playback on entering Play mode when two or more complete snapshots exist. Off by default for newly added controllers. |
| Loop / Loop Return Seconds | Controls the full sequence’s closing transition into the first profile’s checked channels. It does not affect Animate To Profile, which holds its destination and waits for another request. |
| Playback Speed | Time-progression multiplier for sequences and direct profile requests. 1 is normal speed; 0 stops time progression. |
| Preview In Edit Mode / Preview Normalized | Scrubs the full sequence in Edit Mode, including its return transition when Loop is enabled. Disabled during a direct profile request or holding session; use Stop & Restore first. |
| Stop Preview & Restore Material | Restores the material and light settings captured when the preview session began. Required before editing the source material or capturing another profile. |
Animate to one profile and hold it
- Capture the appearance you want. One captured profile is enough for a direct request.
- Choose the destination profile’s Transition Seconds, Easing and checked channels. The first profile has these controls too.
- Click its Animate To Profile button. Completion shows Holding: profile name in the progress bar.
- When another state is needed, request that profile. If a transition is still running, the new request starts from the current blended appearance without jumping back to its original start.
The destination stays active until another request, Stop & Restore, a sequence restart or component cleanup. Loop never advances a direct request automatically. Pause holds an unfinished transition; Resume continues it. A completed holding state has nothing left to resume.
Instant swap or animated swap: use Apply Profile To Material in Edit Mode to load the complete snapshot immediately for editing. To switch selected channels immediately during gameplay, set the destination’s Transition Seconds to 0 and call Animate To Profile.
Edit Mode requests and holding sessions use temporary shared-material values. Stop and restore before editing, capturing or saving source material settings. Run Sequence From Start is still available to test the full sequence.
Wind in environment profiles
Author Enable Wind, Wind Strength, Wind Direction and Height To Tip in the terrain material Inspector, then capture the profile. Check its Wind channel to animate these settings. An unchecked Wind channel leaves the current wind unchanged.
Turning wind off fades strength toward zero before disabling its shader feature at the destination. Turning it on fades from zero toward the captured strength. Direction and Height To Tip also blend. Unlike stylized lighting, this selected channel can change wind’s enabled state.
Older profiles without captured wind data leave wind alone, even if their Wind checkbox is selected. To add wind settings, stop and restore, apply the old profile, configure wind on the material, then recapture it. Scatter groups also need their own Enable Wind selection and a compatible material; capturing global wind does not change per-group wind selections.
Request profiles from code or UnityEvents
Call AnimateToProfile(string profileName) by name or AnimateToProfile(int profileIndex) by list position. Indices start at 0, so controller.AnimateToProfile(0) requests the first profile. Names are case-insensitive; duplicate names select the first match, so use unique names. Invalid or uncaptured requests warn and leave the current transition unchanged.
Save this example as EnvironmentProfileRequests.cs, add it to a GameObject and assign the Demo Controller reference. Prepare captured profiles named Winter and Summer, then call the appropriate request from your game logic or UI.
using UnityEngine;
using DPT.Vertex3DTerrain.Demo;
public class EnvironmentProfileRequests : MonoBehaviour
{
[SerializeField] private DPT_DynamicBiomeDemoController controller;
public void RequestWinter()
{
if (controller != null)
controller.AnimateToProfile("Winter");
}
public void RequestSummer()
{
if (controller != null)
controller.AnimateToProfile("Summer");
}
}
Connect a UnityEvent without a wrapper script
- Add an event entry, such as a UI Button’s On Click().
- Assign the GameObject containing the Dynamic Biome Demo Controller.
- Select its AnimateToProfile method accepting a string or integer.
- Enter the profile name, such as Winter, or its zero-based index. Invoking the event uses the same transition-and-hold behaviour as the Inspector button.
Read playback status
| Public property | Meaning |
|---|---|
| IsPlaying | A sequence or requested transition is advancing. |
| IsProfileSession | A direct request session exists, including paused transitions and completed holding states. |
| HasPendingProfileTransition | The requested transition has not finished. This can remain true while paused. |
| RequestedProfileIndex | The requested profile’s zero-based index. |
| ActiveProfileIndex | -1 during a transition, then the held profile’s index after completion. Restoring clears it to -1. |
| CurrentTimeSeconds / CurrentPlaybackDuration | Elapsed timeline time and duration of the current request or sequence, in seconds. Playback Speed affects real elapsed time. |
PlayFromStart() runs the full sequence. PauseTimeline(), ResumeTimeline() and StopAndRestore() control either playback method. SetTimelineNormalized(float) seeks a direct request from 0 to 1 while that session exists, or controls the sequence outside a direct session. ApplyProfileToMaterial(int) and CaptureCurrentMaterialIntoProfile(int) are Edit Mode authoring methods used with playback and preview stopped.
Lighting and transition limits
- Stylized lighting is optional. Its values are animated only when
_STYLIZED_LIGHTINGwas already enabled when preview or playback began. The controller never turns the keyword on or off. The Sun transition works independently. - Numeric values and colours blend. Parameters such as weight, dusting strength, scatter density and colour, flow speed, emission, shading and Sun rotation can change over the selected duration.
- Identifiers and switches are discrete. Biome target IDs, overlay biome IDs and shader feature switches do not continuously blend. Keep target biome IDs consistent across transitions where possible, and use strength, weight or density for gradual changes.
- Dynamic biomes must be enabled on the terrain material. Profile transitions will not make live modifier effects visible when the material’s master switch is disabled.
- Preview modifies the shared material temporarily. Stop and restore before saving assets or editing the material. Keep a saved source material as a precaution against editor crashes during a preview.
Profiles do not repaint terrain, change terrain geometry or seams, physically raise water or implement precipitation. Live weight changes act on existing painted biome contributions; snow dusting requires suitable biome IDs and existing painted dusting masks.
Stable scatter fades and editing visibility
Scatter placements are generated from painted biome coverage. Dynamic Weight Multiplier and Scatter Density thin a stable set of existing clumps at draw time. Reducing grass strength for mud, yellow grass or drought no longer rebuilds placement at every step. Returning to the original strength restores the same placements. Colour changes remain live too.
Strength is a fade control, capped at 1 for scatter. Strength 0 hides matching animated scatter; strength 0.5 retains roughly half; strength 1 or higher shows the configured painted amount. Values above 1 can still affect terrain shading, but do not increase scatter density. Increase the scatter group’s configured Density to author a denser maximum. Strength and Scatter Density Response multiply; overlapping slots combine their weight multipliers before the cap.
For crystals or other scatter that should ignore seasonal biome changes, enable that group’s Static Scatter beside Wind. Static groups ignore dynamic biome weight, scatter density and colour/surface overrides. Painting or sculpting still updates placement, and the shared instance limit still applies.
In Scatter Settings, Disable While Brushing hides scatter and pauses placement updates whenever any surface or geometry tool is selected, including between strokes. It returns when both selections are None or the terrain tool window closes. This option affects Edit Mode only. Update After Stroke separately keeps placement visible during a stroke and updates affected sources after release when hiding is off.
Surface Raycast Tester
A raycast asks Unity, “What collider is along this line?” The tester displays that hit and then asks the terrain’s surface target for a biome. These are separate steps: hitting a collider does not mean it has terrain surface data.
Set up a probe on your own terrain
- Finish a small painted test terrain and save its mesh.
- Give it a MeshCollider whose triangle layout matches the mesh you are baking.
- Use Bake Surface Data in the terrain tool.
- Check that DPT → Terrain Surface Target is on the appropriate terrain object, with the baked Surface Data asset assigned. It requires a Renderer.
- Create a separate empty object above the terrain and add DPT → Surface Raycast Tester.
- Choose Downward Probe, a sufficient Max Ray Distance and a layer mask that includes the terrain collider.
- Enable Scene Gizmos or Game HUD and check the hit object, triangle index, biome ID and name. Move the probe between two clearly different painted areas.
| Setting | Meaning | Common mistake |
|---|---|---|
| Downward Probe | Casts along world-down from the tester object. | It does not automatically follow a planet’s gravity direction. Use a suitable forward/custom ray for that setup. |
| Transform Forward | Casts along the object’s local forward direction, +Z. | The object may be pointing away from the terrain. Rotate it and inspect the gizmo line. |
| Mouse Cursor | Casts through the pointer using the main camera, with a Scene view camera fallback in the editor. | Check that a suitable camera exists. If none is available, the tester falls back to a downward ray. |
| Max Ray Distance: 1–500 | The furthest distance the probe can hit. | A short ray above a high terrain cannot reach it. Increasing distance will not fix an excluded layer. |
| Raycast Layers | Which collider layers can be hit. | Another collider may intercept the ray. Use a terrain-only layer mask while debugging. |
| Override Surface Data | Reads a specific baked asset directly instead of resolving the hit object’s surface target. | Leave empty for the normal target-based live query. An override uses static data and must match the hit mesh; assigning one asset for unrelated terrains gives misleading results. |
| Scene Gizmos | Shows the probe and hit in Scene view. | Also check Unity’s Scene view gizmo visibility. |
| Game HUD | Shows the hit result in Game view. | It is a debug display, not a player interaction UI. |
| Log Clicks To Console | Logs the current hit when the left mouse button is pressed. | A click reports the current probe result; it does not change a downward probe into a pointer ray. |
Read the result
Hit Object is the collider that intercepted the ray. Triangle Index identifies the triangle used for the lookup. Biome ID and Name are the surface query result. Hit Point, Normal and Distance describe the physical intersection.
If a collider is hit but the biome is unknown, check for the surface target and its data. A box or sphere collider is not a replacement for a matching terrain MeshCollider in a triangle-based lookup. Do not treat a negative or otherwise invalid triangle index as a valid terrain query.
Terrain Demo Camera
Add DPT → Terrain Demo Camera to your inspection camera. It provides free movement and mouse look. It does not supply walking physics, collision avoidance, grounded movement or planet gravity.
| Input | Action |
|---|---|
| W / A / S / D | Move forward, left, backward and right relative to the camera. |
| Space | Move up in world space. |
| Ctrl or C | Move down in world space. |
| Hold right mouse button | Look around with the mouse. |
| Hold Shift | Multiply movement speed for faster travel. |
Movement Speed sets the ordinary travel rate, Fast Multiplier sets the Shift boost, and Mouse Sensitivity changes the look response. The optional controls overlay is useful while learning. Use a slower speed when examining a small feature and a faster one when crossing a large terrain.
The camera can pass through the terrain because it is an inspection rig. Replace it with your own gameplay controller when testing whether a bridge, cave or staircase is traversable.
Use surface data in gameplay
The intended flow is: paint terrain → bake its surface data → link that data to the terrain → raycast the matching collider → read a biome ID → choose your gameplay response.
The baked asset records representative biome information per triangle, including candidate IDs and weights used for live reweighting. The surface target reads that information and the terrain material’s current modifiers. It returns one biome ID for a hit, rather than a full texture or a list of every visible surface.
A small integration example
Save the following as TerrainSurfaceProbe.cs and add it to an object above your test terrain. Set its terrain layer mask and distance. Use Read Surface from the component context menu to perform one query. The Console message is only an example; replace it with your own sound, particle or movement lookup when connecting gameplay.
using UnityEngine;
using DPT.Vertex3DTerrain;
public class TerrainSurfaceProbe : MonoBehaviour
{
public LayerMask terrainLayers = ~0;
public float distance = 2f;
[ContextMenu("Read Surface")]
public void ReadSurface()
{
if (!Physics.Raycast(transform.position, Vector3.down,
out RaycastHit hit, distance, terrainLayers))
{
Debug.Log("No collider within the probe distance.");
return;
}
if (hit.triangleIndex < 0)
{
Debug.Log("This collider has no usable terrain triangle index.");
return;
}
if (DPT_TerrainSurfaceTarget.TryGetHitBiome(
hit, out int biomeID, out string biomeName))
{
Debug.Log($"Surface: {biomeName} (ID {biomeID})");
// Choose your project's response using biomeID.
}
else
{
Debug.Log("The hit has no linked terrain surface data.");
}
}
}
For footsteps, call your query at the time a footstep occurs, using the appropriate foot or character position. Map the returned ID to your own audio/effects table. Keep that table in step with library changes; biome names are helpful labels, but library IDs are the numeric values the query returns.
For a planet or custom gravity system, replace the example’s world-down direction with your game’s local gravity direction. The tool does not infer that direction for this script.
When to rebake
- After repainting areas that your gameplay will query.
- After adding, deleting or reordering biomes when this changes the IDs used by the data.
- After subdivision, deletion, tunnel creation, simplification or another operation that changes triangles.
- After other geometry changes that affect the bake or its representative surface information.
- When switching to a different collider mesh, including a simplified LOD collider.
Ordinary supported live material multipliers can be evaluated without repainting or rebuilding the triangle data, because the target reads them at query time. They still operate on the baked candidates; they cannot recover newly painted information from a stale bake.
How closely does a query match the picture?
The supplied query is useful for choosing a representative terrain surface, but it is not a pixel-perfect sample of what the shader renders. Test it against your gameplay needs rather than promising that every edge or snow patch returns exactly what is visible beneath the cursor.
| Situation | What the query does | What this means for gameplay |
|---|---|---|
| Several biomes on one triangle | Returns one representative ID. The static bake uses its coverage/priority rule; live reweighting chooses from stored candidate weights. | A very small painted patch or a blend edge may not return a different ID at every point. |
| Height-blended shader detail | Does not reproduce every per-pixel height/detail blend. | The visible mixture can differ locally from the triangle’s representative surface. |
| Live weight changes | Reweights baked candidate surfaces using material slot multipliers. | It cannot choose a newly painted candidate absent from the bake. |
| Dusting | Uses a simplified world-up slope/strength test. It does not include the shader’s painted dusting mask. | It can report the overlay where the visible masked overlay is absent. Validate this before using it for snow-specific movement or footsteps. |
| Override Surface Data on the tester | Reads the baked asset directly. | This bypasses the target’s live material evaluation. Clear the override to test the normal live path. |
| Different collider topology | The hit triangle index refers to the collider, not necessarily the visible render mesh. | The bake must match that collider’s triangle order. A simplified LOD2 collider cannot safely use an unrelated original-mesh mapping. |
If your gameplay needs exact small patches, local gravity-aware snow or precise per-pixel coverage, build and validate an appropriate query for those rules. The supplied components are a starting point with the limits described above.
Runtime and demo problems
| Symptom | What to check |
|---|---|
| Capture buttons are missing | Check for C# compile errors and confirm only the single-file controller is installed. The buttons appear near the top of its custom Inspector. Delete the old separate Editor script. |
| The demo controller does nothing | Assign Terrain Material and capture a profile, then use Animate To Profile for a direct request. For Run Sequence From Start, capture at least two profiles. Alternatively enable Play On Start or Edit Mode preview for the sequence. Check Playback Speed, the material’s live biome master switch and the destination’s checked channels. |
| Apply Profile To Material is disabled | Capture the profile and use Stop & Restore to end preview, playback or a holding session. Apply is for instant full-snapshot material editing in Edit Mode. For a gameplay swap, use Animate To Profile; set Transition Seconds to 0 for an immediate selected-channel change. |
| I changed Winter and Autumn changed too | Captured values are independent. Stop any active preview before adjusting the source material. Only pressing Autumn's Capture Profile From Material button can intentionally replace Autumn's saved values. |
| The profile captured the wrong settings | Stop preview and Play mode before capture. Verify the assigned Terrain Material is the one you edited and that Sun is assigned if you want light settings captured. |
| A profile does not change its biome | Check the saved profile's Slot 1–4 channel checkboxes, material modifier target IDs, active state, painted surface contribution and relevant dusting mask/slope threshold. |
| Snow appears but vegetation stays unchanged | Check the captured Scatter Density response and biome IDs, and confirm the scatter renderer uses the material updated by the controller. Groups with Static Scatter intentionally ignore seasonal biome changes. See the 3D Scatter Guide. |
| The stylized lighting profile has no effect | Enable stylized lighting on the material before preview or playback and check that the relevant profile has Stylized Lighting selected. The controller does not toggle the shader keyword. |
| The sun does not rotate or darken | Assign the Sun Light and enable Directional Light on the affected profile. Capture a meaningfully different rotation, intensity or colour. |
| The profile jumps instead of blending | Use nonzero Transition Seconds and check the easing curve. Changes to biome IDs and some on/off modes are necessarily discrete. |
| The loop jumps to the beginning | Enable Loop and set a nonzero Loop Return Seconds for the final-to-first blend. The first profile’s checked channels control that return. Loop applies to the full sequence; a direct Animate To Profile request holds its destination. |
| Preview settings disappear when stopped | This is intentional. Stop and Restore puts the material and light back as they were before preview. To save a new appearance, edit the real material outside preview and capture it. |
| The probe reports a hit but no biome | Check the collider's layer, surface target and assigned bake. Use a matching MeshCollider with a valid triangle index. |
| The wrong name or ID is reported | Clear an inappropriate override, rebake current surface data, recheck library IDs and match collider topology. |
| The probe misses on a planet | Downward Probe is world-down. Use Transform Forward or a ray based on the game's gravity. |
| Several terrains change together | The controller edits a shared material. Use independent materials when separate terrain behaviour is required. |
| The demo camera passes through a bridge | It has no collision controller. Test traversal using your own gameplay character and the terrain collider. |
| Animate To Profile does not change anything | Check the material reference, captured destination, checked channels, Dynamic Biomes master switch and Playback Speed. One captured profile is enough for a direct request; a full sequence needs at least two. |
| Resume is disabled after a profile swap | Holding means the transition has finished. Request another profile to change appearance. Resume is for an unfinished paused transition. |
| Wind changes when entering Play mode | The Wind toggle now saves its shader keyword and matching material value together. Set wind on the material and save it. Check the requested profile’s Wind channel; older profiles without wind data preserve it until recaptured. Per-group Enable Wind is separate. |
| Cave crystals react to seasons | Enable Static Scatter on the crystal group and check profile slot targets. Overlapping slots targeting the same biome combine their modifiers. |
| Scatter remains hidden after releasing the brush | With Disable While Brushing enabled, selected tools keep it hidden between strokes. Set both surface and geometry selections to None or close the terrain tool window. |
| Strength above 1 does not make grass denser | Scatter strength is capped at 1. Increase the group’s configured Density for a denser maximum, then fade that amount with strength or Scatter Density Response. |
Support
If you need help, describe the result you expected, the control you used, and what appeared instead. Include your Unity version, the selected surface pipeline, and a screenshot of the relevant settings. For a runtime query problem, also include the collider type and when you last baked surface data.
Use the DPT Games contact form or join the DPT Games Discord.