Skip to content

Season system

APLM’s season system gives every biome its own seasonal personality. A Temperate Forest can shift from saturated summer green into autumn orange, then desaturated winter gray, while a neighbouring Desert stays unchanged. The whole pipeline runs through one Material Parameter Collection (MPC_Seasons) and one controller Blueprint (BP_APLMController).

Each biome layer exposes the same seasonal override set:

ParameterEffect
Season ColorColor tint applied on top of the base albedo.
Season OffsetTonal offset, shifts shadows.
Season GainTonal gain, shifts highlights.
Season BrightnessOverall brightness shift.
Season ContrastContrast adjustment.
Season SaturationColor saturation.
Season SpecularSpecular intensity.
Season RoughnessSurface roughness override.

These are the same eight knobs every biome has. Combined with the per-biome data asset, you can author wildly different seasonal cycles per biome with the same authoring vocabulary.

Base layers (Beach, Cliff, Gravel, Mud, Snow) are not bound to MPC_Seasons out of the box. They use their own per-surface color correction parameters instead. If you want a base layer to follow the seasonal cycle, add the variables you need to MPC_Seasons yourself and read them inside the base material function.

The reason for the split: base layers apply through automatic geometry-driven blending and are usually expected to look the same year round (snow is snow, gravel is gravel). Biome layers represent ecosystems, and ecosystems have seasons.

  1. A BP_APLMController instance lives in your level (or in a sky/weather actor).
  2. The controller reads a per-biome Data Asset (or a Sequencer track) that holds the seasonal target values.
  3. On EventTick (or any time you choose), the controller pushes the current seasonal values into MPC_Seasons through Set Vector Parameter Value calls.
  4. The biome materials sample MPC_Seasons and apply the overrides on top of the base color correction.

The transition between seasons is just an interpolation. Smooth lerp between the spring values and the summer values across N seconds and you get a smooth season change.

APLM ships four reusable structs you can compose into your own data assets:

  • F_ColorGrade: a packed offset / gain / brightness / contrast / saturation block.
  • F_SeasonCore: the eight seasonal parameters listed above.
  • F_SeasonMetadata: identity and labelling fields for a season entry.
  • F_SeasonParameters: the full seasonal block (metadata + core values).

You can use these as is, or define your own structs. The wiring pattern is the same either way: write the current seasonal values into MPC_Seasons from your Blueprint, then let the materials read them.

The full Blueprint setup is in the Driving seasons from Blueprint guide.