Skip to content

Apex Radiance 3.0.0

Choose a tag to compare

@loinyx loinyx released this 09 Nov 22:06
· 5 commits to main since this release

Indoor lights run on the GPU

On Steam 1.67.2 and EA app 1.69.47, Lamp lighting: Instant (GPU) draws indoor lamps as well as outdoor ones, so a lamp edit shows on walls, floors, ceilings, furniture and stairs with no wait for the room's solve. In every mode, lamp light passes through diagonal walls and each opening's real shape, and double-height rooms and attics under a roof light their upper walls in the room's own tone.

Indoor lamps on the GPU

  • Each room solve of the active lot is kept (base without lamps, each lamp's tests, samples, the game's 3D records), and the GPU draws every map from each lamp's law
  • Colour, intensity, switch, move and new-lamp edits solve no room in the frame of the edit; a settle solves the rooms 2 s later for their normalisation and bounce
  • Against the game's own solves, 95.46% of 2,691,056 lamp texels in 10 recordings are within 2/255: walls 92.8%, floors 96.2%, ceilings 97.0%, objects 97.8%
  • The game's furniture test runs in a pixel shader: its replay matches 100.000% of 75,503 texels within 0.02
  • TubeLight, Rectangle and Disc area lights have GPU laws read from the game's evaluations; 78,048 tube texels from the game are within 2/255
  • On by default on Steam 1.67.2 and EA app 1.69.47; the EA exe is encrypted on disk, so the 16 addresses it needs are found by a signature scan at start
  • An update moves Lamp lighting to Instant (GPU) once, Classic included; Classic stays in the menu and keeps the game's solves

Lamp drags

  • Timing stamps written as GetTickCount() | 1 sat 1 ms in the future, so "within N ms" reads came back false; fixed at 35 sites, and solves escaping the drag hold fell from 6-14 per 10 s to 0
  • Rooms the GPU draws are held out of the solve queue during a drag, about 3,900 picks per 10 s; a recording before this had 2,695 game writes over the GPU's maps in 40 s
  • A drag stays on one quality until 750 ms still, in place of 677 exact relights in 10 s that flipped the shadow's softness
  • Directional maps are kept per lamp, so only moved lamps are traced; tracing all of them took about 520 ms for 194 lamps in 8 rooms
  • A moved lamp's directional part comes from the solve's own code, so furniture keeps its tone through the keep, where a model stepped -23% and +27%
  • Rigs are gathered again every 100 ms of a drag, on the lamp's rooms and its whole story: a fridge used to stay lit 4.5 s after the lamp left
  • Room reflection cubes were only taken 2 s after a solve; they are now taken again every 100 ms in turn, each in one frame during a drag, so metal follows the lamp
  • The indoor shadow atlas held 32 lamps and evicted on every drag step; it grows up to 120 lamps, and on a 120-lamp bench the cube shadows rendered a step go from 534 to 1
  • Growing the atlas wiped it, so every lamp's shadow was rendered again in the first minutes after a load (2,178 tiles in one drag step); the old tiles are now copied over, and a 120-lamp lot renders each lamp once (322 renders before)
  • An occluder read that returns the same lot keeps its generation, where it re-rendered every shadow tile
  • A room-0 relight redrew every room of its story's map, about 47 maps a drag step where the lamp reaches about 8; unchanged rooms are copied back from the previous map, bit for bit the same
  • The relights of a drag step landed in one frame, about 98 ms of GPU; other stories' maps now share a 6 ms GPU budget a frame, measured per map, while the dragged lamp's own story updates in the same frame

Furniture shadows

  • A table moves with the lamp standing on it, by object identity: the round shadow sat 1-2 m away on the far side; offline, 100.0% within 2/255 against 73.5-87.3%
  • A lamp on furniture takes true-size edges, so a 0.36 m table casts a shadow of its size; ceiling lamps keep their soft shadows
  • Table legs are 205 capsules for 36 models baked from the game's meshes; offline, 0.52 mean light where the mesh gives 0.55
  • Leg shadows stopped at a lamp 1.5 m over the leg's top; past it the streak now fades and widens up to 3 m, with a deepest shadow of 0.095 from a lamp at 2.6 m on a 0.72 m table
  • Vertical tube lamps test 4 heights in place of the game's low end, so a floor lamp beside a table casts its shadow
  • Stairs by floor holes enter the shadow tiles, up to 4,096 triangles a lot
  • An object's shadow follows it in a drag: the blockers the game writes in place are read at most every 100 ms, and in every frame an object moved once a record of the room has moved, where the table waited 1.1 to 1.4 s for the room's solve
  • A table dragged with its lamp flickered: at a read every 100 ms it stood up to 0.9 m behind the lamp, its floor shadow swung by 2.3 times that and its fill went off
  • The game drops a furniture record where the line leaves its sphere, which cut the shadow in a crisp round arc; the band now fades over the sphere's last 0.12 m, the step on a recorded scene goes from 0.80 to 0.16, and ceiling lamps keep their soft shadows
  • Box-type sofas and chairs hold their arms as zero-thickness sheets at full height, which drew a thin streak; the GPU's copy takes short arms and a level cap, on 22 of 72 slant records in a recorded scene

Sharper floor light

  • Floor maps are drawn at twice their size, 4 sub-texels a texel, with a footprint-averaged shadow, removing the 25 cm steps of light through doors
  • Sub-texels also cover room 0, up to 16,384 a map, removing the 25 cm diamonds on decks outside diagonal glass doors
  • Whole room-0 tiles beside a diagonal wall keep their texels in the split atlas, while outdoor floors read the map by position and found only a border fill; those texels are now relit at the tile's place too, removing the steps on decks along the wall
  • Maps use 16-bit floats when the device filters them, else 8-bit with a dither of their own

Doors, windows and diagonal walls

  • Diagonal cut posts were rejected (96 in one lot), and diagonal windows and doors never reached the door lists; all three open to lamp light
  • Opening shapes come from the game's cutout masks, 822 shapes from 1,489 masks baked offline, in place of each kind's default shape; two windows side by side keep their wall
  • The smooth read takes the game's bilinear on split maps, removing the diamonds along diagonal walls

Double-height rooms

  • Room 0 of a story takes the lamps of the story below through their open tops: the upper half of the walls was dark, with a hard cut at the story line
  • Rooms opened above take no reach share, where the upper half sat at about 36% of the lower, and their upper walls take only the room's own lamps
  • A room counted as open to the story above only when that story's walls covered three quarters of its outline; under a sloped roof only the gables stand, so the room's lamps never reached the attic. The test now takes the upper story's own walls, as the shadows already did
  • Rooms bounded by diagonal walls were never found open: their outline runs across a tile, and only tile sides were counted
  • The game draws an attic over an open room as an outside wall: sky cube, moon, the sky's reflection, the outside haze and a shade strip that halves the foot of each wall. Those texels now take the interior wall's response, light map plus the room's live ambient, at every hour
  • The attic's map held no daylight, so it read bluish by day; it now carries the room's own window light and bounce from the top row of the wall below
  • The attic switches with the game's night level, as the rooms below do, in about 0.7 s where it waited out the lamps' 8 s fade
  • Lamp light leaked through a floor slab: points on the floor line lay in the plane of the slab; they are moved 12 cm to their own side of it, and a lamp of the other story passes 0 light there in place of 1

Light between rooms

  • The floor's arch blend took its place from the map uv: on denser maps it sat at 2 or 4 times its place and never reached the doorway, and on a tile kept in the split atlas it held an address over 20 m away, the dark 1 m diamonds beside a diagonal arch; it now reads the lot position from the floor vertex shader's TEXCOORD4
  • A lamp of another room is tested against the furniture of the rooms joined by an arch, so a shadow runs through the doorway; a room's own lamps walk the same records
  • The game's tone halves light at mean 0.01; on GPU rooms that step is spread over 0.004 to 0.02, and pairs where more light showed darker go from 39 of 803 to 0 on a simulated kitchen floor
  • On that floor, the median ratio across a doorway's seam goes from 1.90 to 1.00, and columns stepping over 1 level from 18 of 19 to 0
  • The arch blend stopped at a fixed 1.5 m; its reach now grows with the rooms' contrast, up to 1.25 times the opening and 4 m, and the steepest fall per 25 cm on a 2.66 m arch goes from 26.5% to 11.3%
  • Two rooms joined by an arch read different reflection cubes, a line on the floor (top face 0.405 against 0.016); the dark side now takes the neighbour's cube under the blend's weight, for 15 more instructions and one more cube read per pixel of those floors
  • The GPU path charged no glass, so light through two panes came out 1.71 times too strong; each pane now passes 76.5%, after the soft cut, on the directional maps too
  • Light bounces between rooms: each arch adds its form factor times the neighbour's lamp ambient, at most 0.9/255 with steps of 0.15/255, follows a drag with no solve, and takes the blend's reach

Dawn and dusk

  • At dawn the sky's night level fell from 1 to 0 in under 0.6 s, with the sun 6.9 degrees under the horizon, and outdoor lamp light cut to its daytime 3%
  • Lamps now follow the sun's part of the game's lamp curve, from 13.9 to 2.3 degrees under the horizon, moving at most their full range in 8 s of real time
  • The largest lamp step in a frame goes from 0.040 to 0.003 at dawn and at dusk; day stays at 3% and night at 1

Day and night switches

  • Rooms that share a stairwell's light were refused their cached day or night solve and waited in the game's queue; Apex now sends them for a solve when the switch starts
  • A lamp edit's settle solved the same 8 rooms again on every pass; rooms already solved since the switch are now skipped
  • A lamp edit dropped a room's cached solve of the other end, and the room kept the old light; such rooms are sent at the switch
  • On a recorded Build mode switch, the last room goes from +15.53 s to +2.14 s, and story 1 room 2 from +10.01 s (3 solves) to +1.35 s, with at most 33 ms of solving a frame
  • A room solved again rebuilt its four GPU maps on the render thread in one frame: 76 ms for a 47,681-texel room, 128 ms for a switch's first rooms
  • The maps are now built on worker threads while the previous solve keeps drawing, and uploads stop for the frame past 2 ms; in game, 119 maps took 813 ms on workers, with the largest upload frame at 7.49 ms

RTX Remix bridge

  • An optional download, Apex-Radiance-RTX-Remix-bridge.zip, runs DXVK in its own 64-bit process, so the game keeps about 600 MB more free memory
  • Settings > Compatibility shows the bridge when it is installed and offers the download while DXVK runs inside the game
  • NVIDIA's RTX Remix bridge (MIT), ported to The Sims 3 by dalexlol and alexvixell35-stack; on the EA app, set client.targetProcess = TS3.exe in both bridge.conf files

Long sessions

  • A map that failed to draw or upload stayed dead until a solve; it is made again after 5 s, doubling up to 320 s
  • Shader objects gave up for the session after 5 failures; they are tried again once a minute
  • Room 0 stopped going to its solve after 3 tries until the lot changed; it now goes once a minute
  • The memory budget flag never cleared within a lot; it clears under 80% of the budget
  • Maps watched for game writes go from 64 to 128: a round relit 87

Outdoor lamp shadows

  • The blocker search walks the rim of the ball's cone at depth steps of one ratio, so a far blocker is found as well as a near one
  • A step counts only where the segment crosses a surface, keeping the outer half of the penumbra at door jambs

Furniture and curtains

  • Directional maps hold about 0.35 of the room law, so a cabinet beside a lit wall read a fifth of it; furniture takes up to x2 at its draw, weighted by the night level
  • The set-in-a-wall test fired for almost every piece along a wall; curtains and furniture there read a masked B-spline copy of the room light, and doors keep the rig

Menu

  • Rooms at Night > Light bounces between rooms: new row, on by default, in Reset and the presets, applied live, in all 21 languages
  • System > Performance > Lamp lighting: the description and the Instant (GPU) status cover indoor and outdoor lamps, in all 21 languages
  • Report a problem > Record a few seconds: up to 60 s, from 20 s, in every text and language
  • The stop key and Stop wait 8 s for the light to settle and show "Saving the capture and screenshot..." in place of the red dot; a second press saves at once
  • Recording.txt gains [camera], [effect], [ran], [cube] and [settle] lines; the CSV gains frame times
  • Captures copy the crash file only when it is recent
  • Light capture also records, at the captured pixel, every texture read and input of each draw that uses a room light map, on ps_3_0 and ps_2 shaders
  • System > Compatibility shows DXVK as installed under the RTX Remix bridge
  • Developer > Compare lighting paths lists Compare indoor lamps with GPU, Keep indoor lamps for GPU, Indoor lamp model, Sharper floor light and True-size furniture shadows

Defaults

  • Ground light 1.0 to 0.90; Objects, Seamless light and Fence brightness 0.75 to 1.0; Walls 0.30 to 0.56; Roofs 0.45 to 0.6; Reflection brightness 1.56 to 1.0
  • Lot lamps take their own colour by default, and the Natural style's ground light goes from 1.67 to 0.90
  • An update moves these values once, only where a key is still at its old default; a value you set stays
  • Ambient Occlusion, Depth Blur and Edge Smoothing take new defaults on new installs and presets: Depth Blur's automatic focus on, FXAA as the edge method
  • The three built-in presets carry the same look and differ in what is on and in quality levels

Shaders

  • Vertex shaders that write their free TEXCOORDk themselves now take the Banding Fix grain: all 22 saved vs_2_0 pass
  • 13 of 25 refused glossy indoor furniture shaders are patched: their diffuse chain was interleaved or used dp3_sat, and they take the smooth room light
  • The log's refusal line carries the shader's PS hash
  • The built-in shader cache holds all 105 shaders, where the old file matched 50 and Steam Deck had to compile the rest

Fixes

  • Issue 55: the story map scan walked 4 map classes where a story manager has 3, raising 250-1,000 handled access violations a second on the main thread; a slot is now read only when it holds an address
  • Issue 55: with Light detail off, the layout check copied from address 8 on every room solve; it returns first, and memory reads below 0x10000 are refused before the read
  • Issue 59: under the RTX Remix bridge the window stayed black, because GetBackBuffer and render target 0 were two objects; Apex's own calls now get render target 0, and the game's are left alone
  • The RTX Remix bridge is detected and logged, and the Vulkan driver guard stays off under it
  • Issue 56: a model left past the scene budget with a shorter LOD was drawn past its part array; such models now update past the budget
  • Household photos: the object lamp patch zeroed the rig off screen with no lamp to replace it; blond hair goes from RGB 93,84,65 to 194,177,140 (Apex off: 191,174,137)
  • Street-class lamps: the cap now carries the street factor, so within about 1.5 m they reach the game's 6.67 where the GPU drew at most 2
  • Sconces: the wall raise follows the Cmax cut as in the game, 2.7 at 0.3 m where it was held at 2.0
  • A lamp's shade and base take the game's own-light exclusion on cross-room rigs, ending spikes of x1.2-1.6
  • Sharpening multiplied the Banding Fix grain about 5 times; it now fades out on flat areas, from 8/255 to 3/255 of local range
  • Arch rows on floors are read once a frame, not at each of about 21 floor draws