New physical audio simulation 🔉, rendering optimizations 🚀, game discovery that rewards quality and shows what's updated 🆕, terrain editor QOL, and much more 🤯
Audio: Physical sound simulation - a new physically based sound propagation system, using Steam Audio for reverb, HRTF and distance attenuation.
Audio: Basic reverb and occlusion settings to tune the new sound simulation.
API: `Mesh.AddSubMesh` lets a single mesh carry multiple materials as separate draw calls, sharing one vertex and index buffer instead of duplicating them.
Editor: GPU Resources Viewer with live preview, live updates and memory stats, plus exposed refcounts and a treemap view to spot leaks
Added package flair (updated, favourite, contest winner)
Added change lists to package view
UI: css min(), max() and clamp() for lengths
UI: css-wide keywords inherit, initial, unset, revert (incl. shorthands)
UI: added currentColor keyword to css
UI: colors can parse oklch(), lab() and hwb()
UI: added css text-align: justify
UI: css white-space: pre-wrap and break-spaces
UI: added css word-break: break-word
UI: parses css image-rendering: crisp-edges (point sampling)
UI: added css inset shorthand
UI: now parses 1–4 values in the css border-width shorthand
UI: added css transition-duration, -delay, -property and -timing-function longhands
UI: css :has() now supports descendant selectors
UI: added css opacity percentages
UI: added css overflow: auto (maps to scroll)
UI: added css gap: normal
UI: added css filter: none
UI: css transform: scale() now takes comma-separated args
UI: css animations now accept ms units
UI: added more css justify-content, align-* and text-align keywords (start, end, …)
UI: parses css dvh/svh/lvh/dvw viewport units (treated as vh/vw)
UI: parses css object-fit: scale-down (treated as contain)
UI: added css margin-block / margin-inline (+ the logical margin sides)
UI: added css padding-block / padding-inline (+ the logical padding sides)
UI: added css inset-block / inset-inline (+ the logical inset sides)
UI: added the css flex-flow shorthand
UI: added the css font shorthand
UI: added css font-size keywords (xx-small … xxx-large)
UI: css letter-spacing and word-spacing now accept normal
UI: added css font-smooth: none
UI: css aspect-ratio now accepts the auto form
UI: css font-family now maps generic families (serif, sans-serif, monospace)
UI: added css flex-flow
UI: added css font
Updated SDL to 3.4.8.
Skinned meshes now render with instanced skinning, cutting draw call overhead for scenes with many skinned objects.
Morph targets are processed in a single bindless draw call instead of one update per mesh, improving performance for animated characters.
Volumetric fog no longer jitters when far from the world origin or in high-contrast areas, and the denoise pass is much cheaper (8 trilinear taps instead of 27).
Procedural render layers now run in parallel jobs, improving performance when rendering multiple views.
Reworked input scoping to cleanly separate keyboard/mouse from controllers, improving local multiplayer support.
Overhauled the main search bar with structured autocomplete, better result sorting and a more prominent top result.
Cleaner, less cluttered cloud browser with filters moved below the search bar.
Terrain tools improvements: auto-create terrain, prompt to save `.terrain` on scene save, a resolution dropdown and a clipmap preview.
Terrain painting now automatically decides which layer to paint on based on opacity.
UI sounds now target the UI mixer by default when no mixer is set, so 2D sounds aren't spatialized like world sounds.
Rebuild model hitboxes when the renderer scale changes.
UI: css rule matching is ~3–5× faster on large stylesheets (rules indexed by class)
UI: ~2× fewer allocations in css transitions (snapshot styles once, not per property)
UI: finished css animations no longer re-layout every frame
UI: less GC in css sibling/child selector queries (no list copies or wrappers)
UI: less GC diffing active css rules (no LINQ or hashsets)
UI: faster, lower-GC Yoga layout wrapper
UI: css stylesheet hotload now watches newly imported files
Movie Maker: Don't show redundant full path to GameObjects in the track list, just show the name
Movie Maker: Created targets are now nested under a NotSaved GameObject parented to the MoviePlayer's GameObject
Movie Maker: You can promote a created target into a saved object in the scene by dragging it out of the MoviePlayer's ancestors
Movie Maker: Wait a little before updating export preview when changing res, so it doesn't try to allocate an RT on every key press
Movie Maker: Support capturing BeamEffects with a MovieRecorder
Movie Maker: Add icon / tool tip text in track list to easily see which tracks are bound to a created target
StringControlWidget now selects its entire contents on click. Thanks @Matt9440!
Fixed a NaN assertion when running physics traces with invalid translation values.
Removed lingering invalid bodies from the physics world.
Fixed `OnEnabledInternal`/`OnDisabledInternal` being called out of order.
Fixed regular world panel transforms and world panel custom draw transforms.
Fixed a race in `SoundHandle.Time` so only the mix thread advances the native sampler.
Fixed a race condition when destroying sound streams by queuing destruction to a safe time.
Fixed stereo sounds (music and some SFX) being incorrectly spatialized in mono.
Fixed a performance regression when many sound handles exist.
Fixed inspecting procedural textures that aren't backed by a disk source, such as those from mounts.
Fixed dedicated server connection names by resolving them during the handshake.
Fixed cloud asset directory serialization exceptions.
Validate `ObjectCreateMsg`/`ObjectCreateBatchMsg` so clients can't create objects on behalf of other clients.
ServerPackages fixes, including no longer shipping the game package in the server package table.
UI: fixed css !important dropping the whole declaration
UI: css line-height without units is now a multiplier
UI: fixed css calc() division and full-expression parsing
UI: fixed the css flex shorthand for single-number and three-value forms
UI: fixed the css transition shorthand when the property is omitted
UI: css font-family now uses the first family in a comma stack
UI: colors now parse fully in the css background shorthand
UI: an unknown css @-rule no longer drops the whole stylesheet
UI: css variables no longer match on partial tokens
UI: injected css variables are kept across stylesheet hotloads
UI: fixed css selector specificity overflowing when comparing rules
UI: css background: none now resets the background (image and colour)
UI: css filter: none now overrides a filter set by a base class
UI: css transform: none now overrides a transform set by a base class
Movie Maker: Avoid animgraph playback going crazy when scrubbing
Movie Maker: Fix animations updating at the wrong speed when previewing sequences
Movie Maker: Immediately repaint scrub bars if their background colour changes
Movie Maker: Make sure timeline tracks get created when track list changes, fixing keyframes not always getting created
Movie Maker: Fix created targets escaping to the scene root if their parent changes
Movie Maker: Fix lots of edge cases where created targets aren't created / removed when changing movie / toggling CreateTargets
Made the stylesheet cache context aware to stop styles bleeding between games and the menu. Thanks @Matt9440!
Don't normalize remote URIs. Thanks @Noztik!
I hope I could save someone the hours of debugging I had to do because using the property just fails silently now