Skip to content

AcresRenderTier.h#

Acres/Source/Acres/AcresRenderTier.h Generated

Render tiers and the pinned sensor render profile.

The game renders at one of two tiers, chosen once per session from the GPU's dedicated memory (or -RenderTier=):

  • low (under 11.5 GiB of GPU memory: the 6-11 GB cards): the September 2026 6 GB settings: the main view at 60 % resolution reconstructed by TSR, Lumen's irradiance-field gather, screen-space reflections, a 2048 surface cache, coarse virtual shadow maps and Nanite, cheaper cloud shadows, foliage animation and leaf masks only near the camera.
  • high (11.5 GiB and more: 12 GB cards and up): full Lumen global illumination and reflections, fine Nanite and shadows, an 8192 surface cache, the main view at native resolution (TSR anti-aliasing only).

The sensors do not follow the tier. Most of what shapes the sensor camera's image and the GPU LiDAR's hits is global render state (scalability groups, the surface cache, shadow maps, Nanite and mesh LOD, which the ray-tracing scene uses too), so while a vehicle's camera records, the render state is pinned to one sensor render profile, whatever the tier:

  • calibrated: the render state the Polaris camera and LiDAR were validated with (Calibration/Polaris/ camera_results.md, lidar_results.md), plus the tier optimisations that leave the sensor images unchanged within the renderer's run-to-run spread (Tools/SimControl/render_check.py; Documentation/Modelling/sensors.md, Render Tiers). The high tier always renders with it.
  • reduced-6gb: the low tier's profile when the calibrated one does not fit a 6 GB GPU (measured on the RTX 5060 Ti: see sensors.md). Its images differ from the calibrated ones by a stated amount; episode.json and the episode log say so, so a reduced dataset never passes as calibrated. -SensorRenderProfile=calibrated forces the calibrated profile on the low tier (for a GPU with the memory for it).

Only the main view's resolution stays with the tier while pinned (scene captures do not use r.ScreenPercentage). Every setting is written with ECVF_SetByCode, above the project's ini files; -ExecCmds and the console still override it. Game thread only. Logs ACRES_RENDER_TIER tier=... vram_mb=... source=... sensor_profile=... at every change.

Startup#

Registers the first application after the engine has initialised the RHI (the GPU's memory is known then). Called once from the module's StartupModule.

static void Startup();

Refresh#

Reads -RenderTier=low|high|auto and -SensorRenderProfile=calibrated|reduced from the command line (the menu appends them before it reloads the map), chooses the tier and applies its render state (pinned if a camera records). Called after engine init and at the start of every map (the game mode's StartPlay).

Argument Description
World The map's world, whose foliage distances are applied (null after engine init).
static void Refresh(UWorld* World = nullptr);

Tier#

The session's tier.

static EAcresRenderTier Tier();

TierName#

"low" or "high".

static FString TierName();

VideoMemoryMiB#

Dedicated GPU memory the RHI reports, MiB (0 with -nullrhi).

static int64 VideoMemoryMiB();

PinSensors#

A camera starts (+1) or stops (-1) recording. While any records, the render state is the sensor render profile.

Argument Description
World The world whose foliage the profile's animation and mask distances apply to (may be null).
static void PinSensors(UWorld* World);

UnpinSensors#

See PinSensors.

static void UnpinSensors(UWorld* World);

IsPinned#

True while a camera records (the render state is the sensor render profile).

static bool IsPinned();

SensorRenderProfile#

The sensor render profile a camera recording now gets: "calibrated" or "reduced-6gb".

static FString SensorRenderProfile();

IsSensorRenderCalibrated#

True when SensorRenderProfile() is the calibrated one.

static bool IsSensorRenderCalibrated();

Describe#

The tier, GPU memory, sensor render profile and its settings, for episode.json and the episode log's metadata.

static TSharedRef<FJsonObject> Describe();

ApplyFoliageDistances#

Applies the foliage animation (acres.FoliageWindDistance) and leaf-mask (acres.FoliageMaskDistance) distances to every foliage component of the world, from each component's authored values (kept on first sight), so the distances can change with the render state. Called at StartPlay and whenever the state changes.

static void ApplyFoliageDistances(UWorld* World);