Repository navigation
Aura3D 4.6.0
Pre-releaseSuperseded. This version is deprecated. Upgrade to Aura3D 4.7.12.
Fixes from the live-games and 4.5.0 audit (docs/audits/live-games-4.5.0-audit-2026-10-29.md), one branch per lane (audit-fix/e1..e5, audit-fix/g01..g25; lane reports in docs/audits/lanes/). This release carries the engine lanes E1 to E5 and 18 games: G01 to G09, G12 and G15 to G17. The other twelve games (Aura Links 3D, Bunker Zero, Glint Courier, Cross Hop, Gridlock Courier, Ion Circuit, Shadowstep Gauntlet, Lamplight Line, Saltwind Highway, The Bellkeeper's Walk, Duneglide, Cumulus Dash) get their fixes in 4.6.1; they run on the 4.6.0 engine meanwhile. All browser measurements are software WebGL2 on the remote runner; no real-GPU run has been made.
Two visual changes, read them before upgrading: hemisphere lights now light scenes that also have an environment, applied as sky over ground per normal; and a scene that adds a look at runtime next to an authored ambient light no longer gets the look's fill on top.
Engine and rendering
- A typo in a debug URL switch no longer stops the page mounting (engine). An unknown
?aura3d-render=or?aura3d-bloom-fusion=value used to throw inside mount (RENDERER_MOUNT_FAILED QUALITY_OPTION_INVALID) on every game. It is now ignored with aQUALITY_URL_IGNOREDwarning inapp.diagnostics().warnings. Option values passed in code still throw. diagnostics().fpsmeasures presented frames (engine). It was a constant 60 on the WebGL path. It is now the average over the frames presented in the last second, rounded to 0.01, and counts frames that games present throughapp.step()(renders in one task count once). Measured: Aura Slam 3D 0.26 (rAF 0.26), Shadowstep Gauntlet 0.03 (rAF 0.05).- The direct path blocks on more scene content (engine, rendering).
quality: "auto"now also keeps the HDR chain for BLEND or transmissive GLB materials, background images, effects added at runtime and custom post passes; content added after mount that needs the HDR chain remounts onto it. All 25 games takehdr-msaabefore and after, so no live game changes path.quality: "safe-basic"warns what it does not render (SAFE_BASIC_DROPS). - New
app.screenshotAsync()(engine). It waits for pendingstepAsync()calls and the in-flight frame, then re-renders and reads.app.screenshot()stays synchronous and warnsSCREENSHOT_DURING_ASYNC_FRAMEwhen called during an async frame. - A string
renderer.qualityis flagged (engine)."high"and the other fixed tier names keep their behaviour and add aRENDERER_QUALITY_STRINGwarning, because a fixed tier applies to phones too; an invalid string addsRENDERER_QUALITY_INVALID. Use"auto"or{ tier }. info().render.trianglescounts triangles, lines and points (rendering). It read 0.app.nodes.removeon a mounted group or look also removes its flattened descendants underA3D_QR_COMPILER.- Hemisphere lights light scenes that also have an environment (engine, rendering). They were dropped next to an environment (as in 4.3.7). They are now applied per normal: sky colour on up-facing surfaces, ground colour on down-facing ones. A game that kept a hemisphere next to an environment gets brighter; per-game deltas are in
docs/audits/lanes/e2.md. - A look added at runtime drops its fill next to an authored ambient (engine). Before, the fill only yielded when the scene was compiled, so a runtime look swap lit the scene twice. The environment intensity knob also follows environments added at runtime.
- SSAO is no longer reported as dropped for missing normals (rendering). The S2 GTAO stage reads depth only.
diagnostics().postnow reportsdropped: []on the four games that showedssao:normals, andstagesRanlistsS2:gtao-4x4. - New warning
CONTACT_SHADOWS_WEAK_KEY(engine). Contact shadows darken only the shadow-casting directional light. When that light supplies under the engine's minimum share of the direct light at the camera target, contact shadows barely show, and the warning says so. Spot and point lights are not masked, because the mask is marched along the sun and would draw shadows they do not cast. - Instanced nodes pick their sun cascade from where their instances are (rendering). The pick used the node centre, so spread instances could fall outside their cascade. This shows only with the 4.3.0 shadow fit; the default fit already covered every caster, and the live games measured within 0.4 luma before and after.
app.diagnostics().shadowsreportscascadeCountandskippedCascadesfor the sun. The per-instance frustum cull and dense shadow-caster depth draws no longer allocate per frame (0 buffer creates after frame 1, from 3 per frame), and the dense caster count skips parked pool slots. - Animation, physics and API fixes (engine, animation, react).
model()andinstances.modelraiseOPTION_IGNOREDfor keys they do not read.primitives.*no longer accepts transforms or colours silently.playLayerapplies weight once, and a new clip on a layer replaces the old one (fadeOutPreviousfades it). Bone masks acceptexclude(the subtree; exclude-only starts from the full body).Clock.stop()keeps the elapsed time and stays stopped, as in three.js.physics.bindNodesand scene physics keep a rotated body's orientation. Wide, flat cylinder and capsule primitives get a box collider of their visible size (before, the derived capsule threw).AuraCanvasupdates the live app withsetSceneinstead of remounting. A retarget worker that does not reply falls back to the in-process bake after 20 s. The shadow-proxy threshold counts live instances, not pool capacity.
Games
- Aura Slam 3D (G01). Coloured crowd (spectator saturation 0.011 to 0.62), portrait framing (FOV 29.3 degrees, renderer owns the canvas size so the court stays on a 390x844 screen), see-through net, stand and floodlights at their real scale, a legal serve position, a fixed-step adapter so a match reaches the results screen,
?venue=honoured on quick start, context-loss recovery and a coach card that no longer covers the court. - Apex Overdrive (G02). The renderer draws everything the simulation holds (pools sized from measured peaks; draw calls 875-922 to 150-175 at 1280x720 with far-LOD traffic models), traffic faces forward, a title card, first-gesture audio, pause on a hidden tab, and assisted runs no longer set the best score.
- Thermal Drift (G03). Rebuilt as a finishable race on a fixed-step simulation, HUD timers on wall-clock time, touch controls on coarse pointers, rivals kept out of the lens.
- Grid Dispatch (G04). Fixed-step simulation with kerb-gated fares and scored shifts, AI rival cars that brake for the player, touch pads (four 64 px buttons), on-car cameras outside the car body, sky presets that change the lighting, a per-app asset manifest, and vehicle asset ids without brand names (
gridCruiserand eleven more inaura.assets.json). - Iron Crown (G05). Touch walking and action names fixed, SUPER gate, defence KO, stale result card and gamepad pause fixed, portrait framing of both fighters, WebP fighter atlases (36.2 MB to 16.5 MB).
- Pip's Big Leap (G06). Hazard and boss hits no longer lock Pip in place; A/D strafe instead of circling; Pip stays on descending lifts; touch pause button; fixed 60 Hz simulation; per-app asset catalog (page catalog 2.6 MB to 96 KB); bespoke GLBs 16.1 MB to 5.5 MB.
- Aura Hoops 3D (G07). Touch controls that show and work on phones, 5v5 copy, one-shot input, shot meter, team kits and squad picker, a menu that pauses play, a fixed step, a results card, and a chase camera kept clear of poles and floodlights.
- Aura Diamond 3D (G08). Real swing timing, game rules in a tested module, team kits, a fixed-step simulation, a lighter crowd athlete (3,809 triangles) and the bat re-attached after a park switch.
- Aura FC 3D (G09). Touch Lab, shootouts, slide tackles, penalties, golden goal and CPU scoring fixed; goal and net size, phone stick and camera, pause and crowd audio; the referee walks its patrol.
- Slingshot Siege (G12). Restart, pause, mute, range and level keys work again (input was updated twice per frame); mute is saved and drives the audio; the ammo dock counts shots used; pooled blocks reset their material and size on every level, and every piece of a level is drawn; result-card buttons work; parked pool nodes are hidden (395 draw calls on level 1 before); a per-route asset manifest replaces the shared catalog; Space no longer scrolls the page.
- Craterline GP (G15). Lit again after the 4.5.0 environment loss (
environments.neutral0.9, calibrated against 4.3.7); touch steering and pointer controls; medals by finishing place; rival pace and catch-up rebalanced; saved progress. - Chroma Roll (G16). Lit again after the 4.5.0 environment loss (
environments.neutral0.8; model luma back to 94% to 100% of the pre-4.5.0 card); draw calls in play 160 to 22, programs 271 to 34, texture memory 110 MB to 34 MB with unchanged geometry; popups drain by id; the credit no longer covers the mute button. - Serpentine Sky Run (G17). Lit again after the 4.5.0 environment loss (
environments.neutral0.9; lit-surface luma 80.8 on 4.5.0 to 159.6, 4.3.7 was 158.2); one failed frame no longer ends the session (it takes 30 in a row or a lost context); the QA hook is__AURA_SERPENTINE_SKY_RUN__;renderer: { quality: "auto" }replaces the deprecated fields.
Docs, site and tooling
- 4.5.0 gate result, stated (docs). The 4.5.0 benchmark gate passed 7 targets, failed 7 and had no data for 1; it fails on T1 (81 of 125 rows where three.js is better, limit 30).
evidence/vs-threejs/RESULTS-4.5.0.mdsection 0. - Look-fill calibration, restated per game (docs). The 4.5.0 entry said the no-HDRI looks stay "within about 5% of 4.3.7 ... inside the games". Measured at steady state the change ranges from +2.8% to +6.4% in the games captured before release (Aura Diamond Skyline 71.0 to 74.5, Lunar 82.8 to 86.1; Aura Hoops Shanghai 53.5 to 55.6, Orbit 109.4 to 113.3; Pip's Big Leap w6 108.1 to 111.1; Iron Crown Neo-Tokyo 31.4 to 33.4). Glint Courier reads +18% (25.0 to 29.5) because its hemisphere light now counts next to its ambient, not because of the fill. Aura Hoops' HDRI courts rise 5.6% to 8.1% and Aura Slam 3D, the one game with no environment, 13.6% (
evidence/exposure-parity/README.md). The pre-fix Skyline reading is 71.0 to 2.6 in the game capture; the 68.7 to 5.9 in the look-fill test header was an earlier build. A 4.3.7 against 4.5.0 sweep of 39 paired targets in 19 games (evidence/audit-fix/e5/wave2/sweep/table.md) reads -2.6% to +18.0%, median +4.8%; above +10% are Glint Courier (+18.0%), Aura FC Glacier (+15.9%), Aura Slam 3D (+13.5%), Aura Diamond Dome (+12.0%) and Aura Links Neon Bay (2.03 to 2.26, a near-black frame). - Steady-state luma capture for every game and lighting variant (tests).
tests/browser/game-luma-capture.spec.tscovers all 25 live games and every park, court, course, venue, stage, world, theme and Grid Dispatch sky (64 targets,tests/browser/game-luma-targets.ts), logs a 3x3 region grid and the clipped fraction per shot, and runs in shell-safe groups (--grep=@g1to@g8). A unit test keeps the list in step with the inventory and with each game's variant ids. - New game-checks (tools).
touch-inputwarns when gameplay input is keyboard-only or a touch binding names no declared action (six games still fail it with the G01 to G09 branches applied, so it stays a warning);lightingwarns on lights with no environment or look;shared-catalogwarns when a game imports the repository-wide asset catalogue;screens-freshwarns when a card frame predates the latest minor release;brand-identifierswarns on a real brand name inside a shipped identifier such as a QA hook id;upgrade-guidecounts unchecked items in the latest per-game upgrade guide. create-aura3ddownloads large template files on demand (create-aura3d). The 28 template files of 256 KB or more (73.1 MB of GLB and WAV) leave the npm package;template-assets.jsonlists each with its size and sha256, and the CLI downloads the missing ones from the version's tagged source on GitHub (orAURA3D_TEMPLATE_ASSET_BASE), writing a file only when it verifies.npm packgoes from 101.1 MB to 24.5 MB unpacked beforedist/. A failed download exits non-zero and names the files.aura3d check-deploywarns on asset URLs the build does not carry (cli). It scans the built JavaScript for/aura-assets/URLs with no file indistand reports the count, the chunks and examples.- Bundle composition baseline (tools, evidence).
tools/bundle-report/report.mjsattributes every emitted JS byte to a package and folder through the sourcemap;evidence/bundle/BASELINE.mdrecords the published 4.5.0 engine (a one-cube scene emits 42 files, 4,048 KB raw, 1,208 KB gzip, the same as the PBR viewer and the product-viewer template). - The browser test server serves what the deploy serves (tests).
apps/*/public/aura-assetsresolves under/aura-assets/, and inside a bundled app entryimport.meta.urlis each module's own URL, so a port app that mounts its example (Shadowstep Gauntlet) finds the example's models. Captures of Iron Crown, Pip's Big Leap, Bunker Zero, Cross Hop and Shadowstep Gauntlet no longer need apage.routeworkaround. - Remote runner (tools).
tools/remote-acr/run.shalways stagesapps/commonandapps/showcase-port-shared, keeps subfolders inPUBLIC_ASSETS(shared textures underTextures/), and refuses shell metacharacters inSPECS. - "Built with Aura3D" credit stays off game controls (site). The credit on the eleven renamed game pages picks a corner that overlaps no control, re-checks after the game mounts its controls and on resize, fades on the first key or pointer press, and carries
no-steer. It sat over Chroma Roll's mute button and The Bellkeeper's Walk joystick. Pages pick it up on the nextnode tools/showcase-port-pages/sync.mjs. - Index posters and card copy (site). The posters of Aura Slam 3D, Apex Overdrive, Grid Dispatch, Pip's Big Leap and Aura Hoops 3D, and the homepage hero frame, are rebuilt from the retaken 4.5.0 card frames. Card copy: Aura Hoops 3D is 5v5, Grid Dispatch has AI rival cars (no other players), and Apex Overdrive drops its vehicle count.
showcaseStadiumSeatsbounds (assets). The manifest listed the mesh-local box [43.8, 153.0, 29.0]; it now lists the scene-space box with the GLB's root matrix applied, [33.7, 45.8, 144.1].