Yet another new main menu, AnimGraph 2 arrives with new skeleton and clip editors, alongside built-in voice chat, more realistic world audio and faster loading.
AnimGraph 2 - new animation system built on Esoterica with a native runtime, graph editor (blend trees, nested state machines, 1D/2D blend spaces, layers, bone masks, IK, root motion), live preview/debugging, recording and hot reload; existing AnimGraph 1 content keeps workingPR #4805 by @aylaylay
Skeleton & clip editors - inspector and popout editing for skeletons and animation clips, sharing one document and undo history, with orbit/pan/zoom, bone focus and clip playbackPR #6531 by @aylaylay
Skeleton creation - create skeletons from the asset browser and from source filesPR #6535 by @aylaylay
Typed animation events - AnimationEvent subclasses with typed properties on AG2 clips, received through Component.IAnimationEventPR #6546 by @aylaylay
External graphs - connect and disconnect AG2 graphs at runtime through Animation.ExternalGraphs, with playback infoPR #6539 by @aylaylay
Stepped clips - Disable Interpolation option for stepped bone and morph sampling, including previewsPR #6543 by @aylaylay
Bone masks - ModelDoc weight lists export as AG2 bone masksPR #6528 by @aylaylay
Alignment reference take - pick which take clip alignment uses instead of always the firstPR #6612 by @aylaylay
Easing - Float Switch can use easing presets for bool-to-float blends , and AG2 easing curves show previewsPR #6613PR #6606 by @aylaylay
WaterBody - water surface component with scene lighting, reflections and refraction, waves, an infinite ocean mode, underwater fog/grading/distortion/particles, caustics, rigidbody buoyancy, splashes and mesh-defined extents7866237 by @garrynewman
New main menu - an opt-in replacement for the whole menu (choose "New" in Game settings): Workshop-driven discovery, games load straight into their own main menu, Avatar and Shop combined into one panel, and a refreshed game modal, server list and party UIPR #6572 by @devultj
Custom game menus - a game's menu is its MenuScene; changing to another scene starts the game and changing back returns to the menu, with Game.IsOnMenu for startup codePR #6605 by @devultj
Wall editor - wall primitive that generates walls along a path of placed pointsPR #6524 by @bakscratch
Source map fog - view-depth distance fog, signed distance ranges, directional colour blending and independent 3D skybox fogPR #6257 by @aylaylay
Garry's Mod map thumbnails - map picker thumbnails loaded from game files, with skyboxes hidden from map selectPR #6537 by @solwllms
Fast texture tool grid - added a grid optiond0a6d10 by @polepie
Default Content addon - shared engine assets mounted alongside Citizen in the engine, menu, games and editor, starting with 102 props and 28 world materialsPR #6581 by @garrynewman
Floor & wall materials - block and tile floor and wall materialsPR #6594 by @bakscratch
Platform voice chat - built-in voice chat for multiplayer games, including games published without Voice components, with a voice chat overlay, a Voice settings section and project Voice Chat settingsPR #6213 by @metapyziks
Automatic gain control - sender-side voice levelling with background noise estimation, a 100Hz high-pass on the voice gate and a setting to turn it offPR #6547 by @metapyziks
Streamlined push to talk - optional setting that keeps the microphone open between presses so the start of speech isn't delayedPR #6523 by @metapyziks
Game volume - a Game volume control for every game, separate from voice chatPR #6412 by @devultj
Doppler - moving world sounds are Doppler shifted64d632e by @lolleko
Master limiter - lookahead limiter on the master output instead of hard clipping267dd32 by @lolleko
DSP listener targets - DspVolume can target specific listenersdd1c0b3 by @garrynewman
AI API - AiConfig queries and chats for games, backed by tools like web search, package search and API docs; currently limited to enabled accounts ; usage is shown in credits, roughly 1c each, with $1 a month for everyonePR #6503PR #6596 by @garrynewman
Keyboard capture - Input.Keyboard.Capture for event-based key capture, always escapable with Escape or by opening the menuPR #6394 by @devultj
Scene changes - added ChangeScene(SceneFile) and ChangeScene(string) overloads531afca by @matt9440
Tools render targets - SceneCamera.RenderToTexture exposed through Sandbox.ToolsPR #6538 by @metapyziks
First person body - PlayerController can show the body in first person without the head, chest and arms blocking the view, optionally with arms (for driving), and hides third person weapon effects and neck clothingPR #6144 by @carsonkompon
Ducking - PlayerController crouch and uncrouch durations are properties, and the crouch button can be changed or disabledPR #6435 by @carsonkompon
Seeded effects - particle and volumetric fog randomness can be seededaed3456 by @handsomematt
Adapter name - added RenderDeviceManager.GetAdapterName1edd4de by @handsomematt
Light probe override - added NEEDS_LIGHT_PROBE shader override3f1cfe3 by @garrynewman
Specialization constants - shader attributes can be Vulkan specialization constants, starting with ToolsVisPR #6153 by @sampavlovic
Material icons - IconAttribute supports a material icon hint0446139 by @nixxquality
UI selectors - added missing CSS selectorsPR #6502 by @garrynewman
Compute shaders - added a ComputeShader(Shader) constructor, so existing and runtime-compiled shaders can be used directlyPR #6599 by @garrynewman
Console - now a window like Garry's Mod's, with a cleaner stack layout, copyable stacks and multi-line ranges, and cut/copy/paste in the context menu; debug features moved to Dev ToolsPR #6609 by @devultj
Change Map - updated map picker, and the pause screen has a Change Map option againPR #6608 by @devultj
Game switching - switch games from the library while already in a gamePR #6611 by @devultj
Workshop - more of the new menu uses Workshop instead of sbox.game packagesPR #6614 by @devultj
Occlusion & diffraction - cached diffraction paths of up to four bends that search blocking geometry and chain through doorways, gain from the path detour, and less smoothing lag32293fb by @lolleko
Room reverb - one shared reverb per room and listener, new sounds start from an already measured room, and leaner voice mixingf0c6ac4 by @lolleko
Reverb occlusion - reverb send is filtered by occlusion9b7e845 by @lolleko
Distance rolloff - physical distance rolloff and a diffuse reverb sendb1fcd5b by @lolleko
Acoustic materials - based on measured absorption, with less transmission through walls2012743 by @lolleko
Audio mixing - mix ahead of the device so hitches and loading GCs don't starve it9ca45e4 by @lolleko
Loading bar - one bar across the whole load, with cached downloads no longer holding itbb61ece by @lolleko
Loading screen - shows before the load starts blockinge1708e0 by @lolleko
Assembly verification - verify a game's assemblies on a worker as they download5ecf9ce by @lolleko
GC pauses - shorter garbage collection pauses while loading375e199 by @lolleko
Switching games - keep the engine type library and menu resources when starting right after a close3e781ed by @lolleko
Workshop checks - reuse an up-to-date check answer for up to 30 seconds704ae44 by @lolleko
Cloud downloads - check CRCs rather than size alone to decide whether to download, cache verified CRCs and hash asynchronously5686d7c by @polepie, @lolleko
Splash screen - waits for the menu before fading in, animates its progress bar and never shows a blank white windowPR #6398 by @xezno
Startup steam callbacks - pump Steam callbacks while blocking on startup tasksPR #6418 by @devultj
Game loading - skip the environment reset when no game is loaded, don't prefetch Workshop games or size up downloads first, and check for updates against a minute-old Workshop answer; over a second off loadingPR #6572 by @devultj
Aiming - major player animation inputs are no longer spring-dampened, so the body follows your aim instead of trailing the held weapon, and feet shuffle correctly when turningPR #6550 by @carsonkompon
Short hair - every short hairstyle updated with new textures, caps and modelsPR #6583 by @danduwfp
Lobby relay - relay lobby traffic when direct peer connections faildad3cda by @lolleko
Display names - cache filtered Connection.DisplayName until the name or Steam id changesPR #12228 by @deadmonstor
Dedicated servers - startup message, real MaxPlayers and Offline state in the overlay, up/down command history, and SteamID/public IP printed on startupPR #6401 by @solwllms
Text batching - TextRenderer components batch through the sprite batcher; 25ms to 3ms frame time in a world-text test scenePR #6548 by @antopilo
Shadow filtering - weighted bilinear tents for spot and sun shadows and fewer spiral taps for points; about 22% faster with many shadows6349d2f by @handsomematt
Shadow filter quality - now a specialization constant, with taps generated on a spiral and unrolled per tap countb04f04d by @handsomematt
Light loops - one forward light loop instead of two copies (complex.shader ~30MB smaller), baked lights walked wave-uniform, and emissive and the cluster index kept out of light loops773edb6 by @handsomematt
DDGI - compiled out of scenes without DDGI volumes, and probes looped over4463b07 by @handsomematt
SSR - screen-space reflections are a core part of the renderer, on by default and gated by the quality settingaf8d05d by @handsomematt
UI blur - blur filters use a cached mip chain instead of 225 taps per frame; around 70% cheaper on the launcherPR #5818 by @sampavlovic
Pipeline libraries - SpecializedConstant() shaders draw with pipeline libraries and specialize in the backgroundb7d7d93 by @lolleko
Pipeline cache - Vulkan link-time optimization enabled, lock-free lookups of built libraries, and the cache saves in the background, including during play , only once it has grown51b5f76PR #6582 by @lolleko
Managed renderer - draw and occlusion-cull map aggregates, cut material binds in mesh draws, and draw the normals G-buffer when SSR is on2a41fe6 by @handsomematt
Terrain - cull terrain meshlets against a terrain-space frustum , lazy-load terrain storage , build the collider once when enabled , recompute collider edge flags only around editsPR #12178PR #11998PR #119742f4c2f9 by @deadmonstor, @polepie, @handsomematt
Heightfields - generate tiles on the thread poolPR #6402 by @solwllms
Particles - skip zero and constant evaluations, sweep dead particles in one pass, allocate collections on first use and shrink ParticleFloat to 24 bytes783dc05 by @polepie
Allocations - remove per-frame allocations in rendering, tags, traces, PlayerController, engine systems, widgets, GPU profiling, GpuFontText and the idle menu, and reuse post process layers and blit command listsf5c1e0f by @lolleko, @polepie
Job system - engine parallel work uses JobDispatcher instead of Parallel.For, and particle processing is no longer split one item per batchbd5947f by @handsomematt
Texture work - texture mips are compressed with zstd level 17, texture compression is faster, GGX sky prefiltering is faster and sprite sheet images decode oncec5dbe8f by @lolleko
Transforms - faster Transform.Lerp, Transform.ToLocal and constructore8fcc23 by @boxrocket6803
UI layout - skip re-zeroing unchanged display: none subtrees on every layout passPR #12200 by @deadmonstor
Reference equality - GameObjectReference and ComponentReference have real equality, so hash sets of them aren't quadratic48cd5bf by @deadmonstor
Scene trees - remove missing tree children in one pass1738b48 by @deadmonstor
AG2 performance - cheaper graph evaluation and pose processing with fewer allocations; parallel animation time is 16-30% lower than AG1 across matched graphs at 1,000 charactersPR #6604 by @aylaylay
Physics triggers - entering and leaving triggers no longer allocates, contacts resolve each side once, and resting colliders without a rigidbody cost nothing until they move; worst case 5.0ms to 0.8ms per tick with 17k triggersPR #6592 by @lolleko
Idle allocations - idle frames down from 3.1KB to about 80 bytes of allocationsPR #6584 by @lolleko, @handsomematt
Rendering profiler - dev tools GPU and Rendering tabs merged with GPU history, a zoomable frame timeline, pass tree and counters; Overview shows what bounds the frame rate; Memory baselines and copy-as-text9a663f5 by @handsomematt
Profiler timeline - the dev tools CPU timeline lines up with its GPU frame9451be7 by @handsomematt
Dev console - cap the number of kept log entriesbc688e6 by @polepie
Scene saving - cache CloudAsset references, making scene saves about 49% fasterPR #11964 by @polepie
Model compiles - removed ModelPhysicsCollectionFix, which added over 300ms to every model compilePR #6557 by @devultj
Material edits - models no longer recompile on every material edit38bba6f by @lolleko
Asset thumbnails - dropped when the asset changes and rebuilt when next drawn28ee892 by @polepie
Publish settings - missing publish settings are remembered until the asset updates66be40f by @polepie
Publishing - only games need to compile on the backend, and only when publishingPR #6429 by @devultj, @handsomematt
Animation graph editor - lower undo latency and a UI cleanupPR #6561 by @aylaylay
Game & map modals - polished the game modal and map selectorPR #6416 by @devultj
Prefabs - dragging multiple GameObjects into the Asset Browser creates multiple prefabs42aeac4 by @elmartalibzade
Scene browser - collapses objects without relevant components7849035 by @boxrocket6803
Inspector - colour properties show as a full-width swatch, float drags clamp to the slider range, and the panel ControlSheet matches the editor27cdeca by @handsomematt, @ghilliexyz, @polepie
Library references - newly installed libraries are referenced by open game and addon compilers28ef7a4 by @deadmonstor
Default sphere - uses high quality tangentsc5be4dd by @boxrocket6803
Debug drawing - views can turn off debug drawing completely7dbdfbb by @handsomematt
Crash reports - attach the crashing process's own log and tag Vulkan driver and allocation failures with more context85d4f30 by @lolleko
Content builds - assets compile on threads in one process, using about a third of the memory and finishing faster; the editor compiles assets itself instead of starting worker processes, and more assets build deterministicallyPR #6578 by @lolleko
Transition rules - state machine arrows show a clickable rule count and list their rules; clicking one selects that exact transitionPR #6577 by @aylaylay
Skills - skills can be installed and updated through symbolic links and directory junctionsPR #6597 by @garrynewman
2D blend spaces - fix playback jumping at full weightPR #6573 by @aylaylay
Animation previews - stop game systems running in previewsPR #6534 by @aylaylay
Skeleton compiles - compile errors no longer terminate the workerPR #6526 by @aylaylay
Pose parameters - grow the pose recipe parameter buffer instead of writing past itb269044 by @lolleko
Seated feet - the feet shuffle no longer lingers when sitting, and AG2 feet IK blends on and off smoothly againPR #6607 by @carsonkompon
Default skin - new player models get the correct default skin materialsPR #6589 by @danduwfp
AMD occlusion culling - fix native occlusion culling hanging the GPU on AMDPR #6413 by @sampavlovic
Depth prepass stencil - the prepass no longer ignores stencilPR #6277 by @sampavlovic
Sun shadow blur - fix filter quality 3 smearing in one directionPR #6406 by @sampavlovic
Spot light shadows - fix striped self-shadowingPR #12164 by @corentarts
Shadow cascades - fit cascades when the projection has no far planePR #12136 by @gamah
Negative scale - fix negative-scale models rendering inside outb5a7b4a by @handsomematt
Cubemap reflections - fix stretching near probe boundaries, and realtime probes sample the right hemisphere757c290 by @handsomematt
Orthographic cameras - fix screen projection96e1fe5 by @deadmonstor
Empty camera views - fix clearing0fbcf49 by @garrynewman
Light probe volumes - skip volumes whose texture failed to load, and stop networking map volumes since clients load them from the map595490e by @handsomematt
DDGI cube faces - don't share a cached depth texture wrapper across parallel faces7d71390 by @lolleko
ModelBuilder textures - fix textures getting stuck on the 32x32 stand-in9327413 by @handsomematt
ShaderGraph - fix a crash saving a ShaderGraph during playddb93db by @handsomematt
Shader compiler - fix a Slang shader compiler memory leak and an editor boot error in CompileAllShaders653e686 by @handsomematt
Shader includes - expand root-relative shader includes into embedded sourcea217727 by @handsomematt
Physics stability - disable bodies the solver turns non-finite and reject bad body positions1ce0d18 by @lolleko
GPU crashes - skip camera renders started while the previous frame is still rendering, fail transform slot and query pool allocations cleanly, and reject short texture streaming reads0bacf99 by @lolleko
Shutdown - free renderer resources that were never released, release GPU resources on destruction rather than finalizers, tear down map worlds in order, and fix a prefab cache crash on quitPR #6504 by @sampavlovic, @lolleko
Vulkan validation - fix more validation errorsPR #6506 by @sampavlovic
Pipeline library builds - stop waiting on failed specialized pipeline library buildsd8a41f7 by @lolleko
Linked pipelines - allocate dynamic sets with their storage buffersbb5f8d8 by @handsomematt
WebSurface - dispose properlybba3af2 by @handsomematt
Crash fixes - Garry's Mod maps no longer crash NVIDIA GPUs on lower texture quality, plus fixes for views rendering in parallel, physics running out of memory on huge contact clusters and several tools crashes; crash reports say more about GPU faults, stale resources and VRAMPR #6586 by @lolleko
Tangents - fix tangents flipping 180 degrees when packed along the negative basis axisPR #6595 by @lolleko
Filesystem - fix deadlocks when disposing filesystemsPR #6600 by @garrynewman
No Steam - fix NullReferenceExceptions and RichPresence/Avatar warning spam under -nosteamPR #12316 by @saimo
Snapshots - keep snapshots flowing after a refresh the receiver can't applyb6733c2 by @deadmonstor
Scene changes - mount the new scene's maps before reading its snapshot5f5d946 by @handsomematt
Sync properties - fix stale sync properties during component destructionPR #6509 by @aylaylay
Physics sub-steps - apply SubSteps once when stepping a 3D physics world without a world time6a2ee77 by @deadmonstor
Physics worlds - recreate empty physics worlds on scene reloadPR #6527 by @aylaylay
Rolling resistance - static hulls no longer inflate rolling resistancePR #6496 by @aylaylay
Terrain collisions - fix dense terrain collisions and locked platform supportPR #6533 by @aylaylay
Components - re-enabled components no longer linger in the pending start setf4282df by @deadmonstor
Host migration - joining clients keep the game identity after host migrationPR #6601 by @garrynewman
Workshop overlay - stop showing a bogus 70000 days left when a download stalls at the endPR #6560 by @devultj
Mouse capture - fix mouse capturing not always working in the editorPR #6536 by @metapyziks
macOS hotload - fix the editor hanging after hotload on macOSPR #6487 by @amedinafp
Hotload - release fast hotload detours when a full hotload replaces the assembly, remove types left behind by a failed registration, and skip hotload for the RPC invoker cachePR #12211 by @deadmonstor, @handsomematt
Standalone export - fix exports failing when a startup image is set, and missing Mapping Tools geometrydb66186 by @lebofly, @handsomematt
Publishing - preserve explicitly included standalone files, exclude editor metadata from runtime publishes, and remove scenes from the publish previewb8f4e17 by @lolleko
Game mounts - ship game mount DLLs to Steam3fb4462 by @handsomematt
External changes - the external changes dialog now shows for scenesab5cd82 by @clemixo
Asset dependencies - JSON type metadata is no longer registered as an asset dependency49150e5 by @polepie
Cloud assets - fix orphaned cloud asset deletion using the normalized path24f8833 by @polepie
Asset folders - fix rename hierarchy1e03a6b by @apple-ram
Engine references - make EngineReferenceProvider.Lookup thread-safe3fe9a46 by @polepie
Scale tool - fix global space scaling stretching rotated objects along the wrong axis1f7ffbb by @corentarts
Mesh editing - remove the temporary face in MergeVertices if CollapseEdge failsbd41d0f by @angel-foxxo
Curve editor - clamp dragged handles immediately, relative to drag start0c952a5 by @ledernierpoisson
Painter curves - CurveSegments takes scale into accountPR #12155 by @polepie
Particles - lifetime stop supports live edit on emitted particles497b4e4 by @polepie
Graph nodes - only mark nodes as moved when their position actually changed, and use TitleAttribute/DescriptionAttribute for node titlesba4312e by @quackcola
Viewport options - mouse input no longer closes the viewport optionb91ba80 by @polepie
Hierarchy - don't select the parent when the parent is the scenecc6104c by @766974616c79
Item widgets - better clearing of hovered state in BaseItemWidget, and recover from a missing theme.jsonb7792a2 by @boxrocket6803
Virtual lists - newly visible rows build in the same frame200a5be by @deadmonstor
Avatar editor - fix the necklace pendant subcategory title60d0876 by @gmod4phun
Startup timing - include all of startup in the measurementPR #6490 by @xezno
Exported games - standalone exports launch againPR #6588 by @lolleko
Hotload delegates - fix hotload breaking delegates to generated helper methodsPR #6602 by @garrynewman
Bone gizmos - no longer steal clicks from nearby move and scale handlesPR #6348 by @handsomematt
Panels - fix MoveAfterSibling ordering , panel text , and destroy a ScenePanel's scene when its parent is deletedPR #11412PR #12148PR #11836 by @shiroksh, @polepie, @patrickjnr
Tooltips - remove the tooltip when a click is pressedPR #12145 by @polepie
CSS origins - fix transform-origin and perspective-origin keyword order685610c by @handsomematt
Panel events - callbacks can add or remove listeners during dispatchPR #6598 by @garrynewman
Button text - long button text is truncated with an ellipsis instead of wrappingPR #6593 by @metapyziks
WaterVolume - obsoleted in favour of WaterBodyea93e4b by @handsomematt
Organization modal - removed, as nothing used it; the public API method is an obsolete stubPR #6416 by @devultj
Game.StartGame - removed; games start by changing from their MenuScene to another scene, and the MenuResources setting is gonePR #6605 by @devultj
Jam - removed the in-game Jam UI now the jam is overPR #6572 by @devultj
Sandbox.Access - removed runtime access verification, replaced by the unified analyzer at compile time17d7639 by @lolleko
Mobile code - removed Android and iOS code paths by @lolleko
Dead native code - removed unused tier0 memory, string, threading, platform and debug code and dead KeyValues/symbol code, fixing job and thread bugs and speeding up CUtlBuffer along the way by @lolleko
Occlusion culling - r_occlusion_culling is off by default for nowab64886 by @handsomematt
Short hair - depth of field hides the translucent hair cards when there's blur behind themPR #6583 by @danduwfp