NAMEFRAME Frame the world. Name the frames.

Weather, sky and Ultra Dynamic Sky

Every weather profile NameFrame ships, what each one actually does to the sun, fog and clouds, and the full compatibility surface for Ultra Dynamic Sky and Ultra Dynamic Weather. All the numbers on this page are read out of the shipping code.

Two drivers, pick one#

Built-in weather

Works in any project with no extra assets. NameFrame drives the directional light, exponential height fog and, where the profile calls for it, the volumetric cloud layer.

environment:
  weather_driver: builtin
  weather: rain

Ultra Dynamic Sky / Weather

For projects that already own the UDS/UDW marketplace assets. NameFrame finds the actors and sets their Blueprint properties directly, then hands precipitation placement to UDW.

environment:
  weather_driver: ultra_dynamic
  ultra_dynamic_weather:
    Weather: [clear_skies, rain_light]
You do not mix them

Selecting the dynamic driver clears the built-in sun, fog and cloud keys from the compiled job, and forces suppress_precipitation and suppress_clouds off, because UDW owns those now. In Studio, only the selected driver's controls are visible.

The nine built-in profiles#

Each profile drives the sun, the fog and, where it matters, the cloud layer. Every value below is a range sampled per frame, so two rain frames are not the same frame.

ProfileSun elevation (deg)Fog densityCloud base (km)Cloud height (km)Cloud tracing (km)Cloud sample scalePrecipitation
clear_sun30.0 to 65.00.0scene defaultscene defaultscene defaultscene defaultoff
daytime12.0 to 71.00.0 to 0.02scene defaultscene defaultscene defaultscene defaultoff
golden_hour4.0 to 14.00.0 to 0.006scene defaultscene defaultscene defaultscene defaultoff
overcast18.0 to 48.00.018 to 0.0601.0 to 2.57.0 to 12.080.0 to 180.01.2 to 2.0off
fog10.0 to 42.00.090 to 0.2200.8 to 2.05.0 to 10.060.0 to 150.01.2 to 2.4off
rain8.0 to 34.00.055 to 0.1300.8 to 2.08.0 to 14.055.0 to 150.01.3 to 2.4on
storm0.0 to 22.00.090 to 0.2000.4 to 1.59.0 to 16.040.0 to 120.01.8 to 3.2on
snow12.0 to 38.00.075 to 0.1700.8 to 2.57.0 to 13.050.0 to 140.01.4 to 2.8on
night-8.0 to 2.00.0 to 0.012scene defaultscene defaultscene defaultscene defaultoff
ProfileWhat you getAlso accepted as
clear_sunFull sun, no cloud layer, no precipitation.clear, soare, sun, sunny
daytimeGeneric daylight. Wider sun range than clear_sun, and clouds left alone.day
golden_hourSun near the horizon, long shadows, warm light.golden
overcastSolid cloud layer, flat diffuse light, no precipitation.clouds, cloudy, nori
fogDense ground fog, short visibility.ceata, foggy
rainRain with a low cloud base and moderate fog.ploaie
stormHeavy rain, very low cloud base, dark.furtuna
snowSnowfall with a bright, high-fog look.ninsoare
nightSun below the horizon.none

Random weather#

Set weather: random and NameFrame samples a profile per frame. Without explicit weights it uses this distribution:

ProfileDefault weight
clear_sun20
fog20
overcast20
rain20
storm10
snow10

Overriding a profile#

A profile sets a starting point. Any of these keys, set alongside it, replaces that part of it and leaves the rest alone:

environment:
  weather: overcast
  sun_elevation_deg: [40, 55]     # narrower than the profile's 18 to 48
  fog_density: [0.02, 0.03]
  cloud_layer_bottom_km: [1.2, 1.8]
  cloud_layer_height_km: [8, 11]
  cloud_tracing_max_distance_km: [90, 160]
  cloud_view_sample_count_scale: [1.4, 1.9]
  suppress_precipitation: false
  suppress_clouds: false
  weather_settle_seconds: 1.0

Touching any cloud key turns the cloud layer on for that profile, unless you explicitly say suppress_clouds: true. That is deliberate: asking for a cloud base and getting no clouds would be surprising.

Mixing several profiles in one run

environment:
  weather_profiles:
    - {name: clear_sun, weight: 40}
    - {name: overcast,  weight: 25, fog_density: [0.02, 0.04]}
    - {name: rain,      weight: 20}
    - {name: fog,       weight: 15}

Each entry can carry its own overrides, so "rain, but never darker than this" is one line rather than a separate run. Entries with a weight of zero or less get dropped.

Ultra Dynamic Sky and Ultra Dynamic Weather#

NameFrame drives UDS/UDW as an ordinary Blueprint actor, so it works with the assets you already own and does not need a patched copy.

How the actors get found

By default NameFrame looks for an actor whose class name contains Ultra_Dynamic_Sky for the sky role, and Ultra_Dynamic_Weather for the weather role. If your project renamed them, say so:

environment:
  weather_driver: ultra_dynamic
  ultra_dynamic_sky:
    actor: BP_MySky_C            # exact actor name
    class_contains: MySkyClass   # or match on class
    params:
      Time of Day: [900, 1700]

Parameters can go under params: (or parameters:), or directly on the section as shown elsewhere on this page. Both compile to the same thing.

When both roles are present, NameFrame also links them: the weather actor's UltraDynamicSky reference gets pointed at the sky actor, so a UDW preset change drives the sky as well.

Values a property accepts

You writeYou get
1430That exact value on every frame
[900, 1700]A range sampled per frame
[clear_skies, rain_light, snow]One of these per frame
true / falseA boolean property
noonA named time-of-day range, see below
defaultLeave the property alone entirely

From Studio's text fields the same thing is written inline, because a text box cannot hold YAML:

Time of Day=900,1700;Cloud Coverage=0,10
Weather=clear_skies|rain_light|snow

Weather presets NameFrame knows about#

10 stock Ultra Dynamic Weather presets, reachable under 19 names. Write the short name in your recipe and NameFrame resolves the asset path. A full asset path also works, which is how you use a preset of your own.

Write thisUDW preset asset
clear, clear_raw, clear_skies, clear_skies_raw, clear_sun, sunnyClear_Skies
cloudyCloudy
overcastOvercast
fog, foggyFoggy
rain, rain_lightRain_Light
rain_heavy, rain_rawRain
storm, thunderstormRain_Thunderstorm
snowSnow
snow_lightSnow_Light
blizzardSnow_Blizzard

Defaults NameFrame applies#

Turn the dynamic driver on without listing parameters and these are the values it drives. Anything you set explicitly replaces the matching entry.

Ultra Dynamic Sky

PropertyDefault
Time of Day900 to 1700
Cloud Speed0.1 to 1.2
Use Cloud Shadowstrue

Ultra Dynamic Weather

PropertyDefault
WeatherClear_Skies
Overcast
Rain_Light
Snow
Snow_Blizzard
Weather Transition Seconds0
Apply Custom Weather Particle Camera Transformtrue
Max Spawn Distance2500 to 4500
Spawn Box Height3000 to 5500
Spawn Direction Forward Bias1.5 to 4
Minimum Particle Distance0 to 80

Particle placement support#

These get filled in automatically whenever you drive Ultra Dynamic Weather, even if you only asked for a preset. They are what makes rain and snow land in front of the capture camera instead of around the player pawn.

PropertyValue
Weather Transition Seconds0
Apply Custom Weather Particle Camera Transformtrue
Max Spawn Distance2500 to 4500
Spawn Box Height3000 to 5500
Spawn Direction Forward Bias1.5 to 4
Minimum Particle Distance0 to 80

Named times of day#

Instead of a number, Time of Day takes these names, which expand to a range sampled per frame.

NameExpands to
morning, dimineata800 to 1030
sunrise, rasarit800 to 930
noon, midday, pranz1100 to 1400
afternoon, dupa_amiaza1400 to 1600
golden, golden_hour, sunset, apus1600 to 1730
night, noapte2000 to 2300

Manual overrides and why they are handled separately#

UDW exposes two ways to control weather: pick a preset, or set the individual manual-override values for rain, snow, fog, cloud, thunder and lightning. They fight each other, because applying a preset resets the manual values.

NameFrame treats any property whose name contains manual override, rain, snow, fog, cloud, thunder, lightning and similar as a manual override, and applies it after the preset has settled. The particle-placement properties and Weather itself are explicitly excluded from that rule, since they are how the preset gets applied in the first place.

Practically: you can ask for rain_light and then push the rain intensity higher, and the second instruction will not get wiped by the first.

Three things that catch people out#

Precipitation is invisible in captures

UDS/UDW rain and snow are GPU Niagara systems, and Unreal does not render those inside editor scene captures. The frame comes out with wet-looking ground and no rain in the air.

NameFrame composites the precipitation onto the report and dataset images instead. It is on by default. In Studio it is Composite rain and snow particles into generated output, and on the CLI it is --precipitation, with --precipitation-strength to scale the density. It works with both weather drivers.

Blueprint defaults come back after settling

Some UDS/UDW Blueprints reassert their own values during the transition. NameFrame reapplies the requested values after the settle period for exactly that reason. If you see a property snapping back, that reapply step is what stops it, and it is on by default.

Exposure across many times of day

A fixed negative exposure bias, inherited from a sunny-only render profile, turns valid daytime UDS frames nearly black. If you have not set render.fixed_exposure explicitly, the compiler switches to adaptive exposure for the dynamic driver. Set it yourself only when you know the range of times you are capturing.

Settle time#

weather_settle_seconds is the pause between applying weather and capturing. Default is 0.75, and the shipped dynamic-weather profile uses 1.5. It exists because sky, fog and lighting transitions are not instantaneous. Set it to zero and you capture frames mid-transition, which looks like weather that does not match the recorded environment values.

For long runs, Frames per weather batch lets several frames share one weather state, so you pay the settle cost once per batch rather than once per frame.

See also#