1. s&box
  2. News

s&box News

Update 26.03.04

[p]A new update has been released, you can view the full changes on our blog post.[/p][p]https://sbox.game/news/update-26-03-04[/p][p][/p][p]Here's some highlights from the blog.[/p][p][/p][h3]Clutter[/h3][p][/p][p]A new tool has been added to procedurally place objects in your scenes. It is completely independent from the terrain system and supports both prefabs and instanced models.ย [/p][p]It can be used to automate tasks such as procedurally generating landscapes, painting enemies, or even acting as a world grid system.ย [/p][p][/p][h3]Menu Polish[/h3][p][/p][p]We're polishing the menu ready for release, nothing is significantly different but we're making it all look pretty.[/p][p]The depressing dark foggy scene is gone and replaced with Flatgrass. The header bar has been spaced out and made transparent. And the latest update is display on the front page.

We'll keep polishing stuff bit by bit each week.[/p][p][/p][h3]UI Multithreaded Rendering[/h3][p]UI could only render on the main thread - now it can render on any thread thanks to command lists. This means whilst your game is rendering the 3D world it can also start rendering the UI layers.[/p][p]You'll notice a performance boost mostly on low-mid range CPUs and in games with a considerable amount of UI and 3D at the same time.[/p][p]It can be toggled with the convar r_ui_multithreaded to measure impact.[/p][p][/p][h3]Profiler Overlay Improvements[/h3][p]We reorganized the timings so they now more accurately break down a the time needed to render a frame. Garbage collection pauses are now also tracked as individual timing, and subtracted from other timing scopes.[/p][p]We also improved the visuals for various overlays with significant community contributions from @darkfated[/p][p][/p][p][/p][h3]Sandbox: New Inventory[/h3][p]The inventory got rebuilt to be slot based. You can drag and drop stuff from the spawnmenu right into your inventory. It's kinda cool.[/p][p][/p][h3]Sandbox: UI Improvements[/h3][p]The scoreboard and HUD got a new lick of paint. You can also mute people.[/p][p][/p][h3]Sandbox: Easy Weld Rotate[/h3][p]Brought up the weld tool to gmod parity by adding the ability to rotate after easy welding.[/p][p][/p][h3]Sandbox: Physgun Screen[/h3][p]We also added a screen to the physgun that spits out info based on what you're doing with it.ย [/p][p][/p][h3]Changelog[/h3][p]๐ŸŽ Added[/p]
  • [p]Clutter system โ€” the clutter/scatter tool and system has been moved in-engine[/p]
  • [p]CSS outline property โ€” outline draws outside a panel's border without affecting layout, matching web standards[/p]
  • [p]Multithreaded UI rendering โ€” UI can now render off the main thread[/p]
  • [p]New main menu front page โ€” redesigned around flatgrass, refreshed navbar and footer[/p]
  • [p]ContentBlock row scroll buttons โ€” left/right scroll arrows appear on hover as an alternative to drag-scrolling[/p]
  • [p]DepthTextureRef on RenderTargetHandle โ€” lets you access the depth buffer of a render target in command lists, not just the colour buffer[/p]
  • [p]Improved UI drag & drop โ€” new OnDragEnter, OnDragLeave, and OnDrop panel events matching standard web behaviour[/p]
  • [p]AdvancedDropdown โ€” ComponentTypeSelector abstracted into a reusable dropdown that supports foldered menus[/p]
  • [p]SerializedProperty.GetCustomizable() โ€” creates a customisable copy of a property with an overridable display name and other metadata[/p]
  • [p]MemberDescription.DeclaringType โ€” exposes the type that declared the member[/p]
  • [p]Json.Serialize / Json.Deserialize โ€” low-level methods plus object/Type overloads for use with IJsonConvert[/p]
  • [p]Package.MountAsync() โ€” public API equivalent of the internal PackageManager.InstallAsync[/p]
  • [p]Json.Patch, Json.CalculateDifferences, Json.ApplyPatch and related types are now public, along with GameObject.DiffObjectDefinitions and Scene.SerializeProperties()[/p]
  • [p]TestAppSystem exposed to user unit test projects, replacing the old Application.InitUnitTest flow[/p]
  • [p]Vector2Int and Vector3Int added to TryToType[/p]
  • [p]Mirror tool now supports mirroring any selected object type, not just meshes[/p]
[p]๐Ÿงผ Improved[/p]
  • [p]UI rendering now uses command lists โ€” panels only rebuild their command lists when something actually changes, reducing per-frame work[/p]
  • [p]Performance timing scopes โ€” GC pauses now tracked separately and subtracted from other scopes, so GC spikes no longer bleed into unrelated categories. New Update scope tracks FixedUpdate/Update specifically.[/p]
  • [p]Audio mixing allocations reduced โ€” temp lists are reused in-place and the occlusion sort predicate is cached as a static[/p]
  • [p]CommandList attribute access โ€” switched from ConcurrentDictionary to a regular dictionary, cheaper and avoids expensive clears[/p]
  • [p]Cluster lighting โ€” Cluster::Query now takes a screen-space position instead of world-space, which was unstable near cluster boundaries[/p]
  • [p]Razor incremental processing โ€” only re-runs RazorProcessor on changed files and reuses SyntaxTree instances, speeding up hot reloads[/p]
  • [p]Debug overlay visual clarity โ€” render stats grouped into categories, timing fixed to CPU/GPU order, new metrics added, low-signal rows removed. Thanks @darkfated[/p]
  • [p]SerializedProperty.TryGetAsObject now returns a SerializedObject of the actual runtime derived type, not just the declared property type[/p]
  • [p]Close game if Steam is not running โ€” instead of cryptic errors, the game now exits cleanly with a clear message[/p]
  • [p]Error reports now correctly embed user information[/p]
  • [p]Editor unit tests can now reference built-in tool packages (Shader Graph, Action Graph, Hammer, Movie Maker)[/p]
[p]๐Ÿช› Fixed[/p]
  • [p]DetermineHuman not checking the base model first, breaking dresser clothing for characters with a base model[/p]
  • [p]PropertySignal.Compile(timeRange) not clamping the first/last blocks to the requested time range, causing "blocks must not overlap" errors when compiling Movie Maker recordings[/p]
  • [p]:last-child pseudo-class updating a frame late when adding child panels[/p]
  • [p]Cancelling a purchase incorrectly showing "You purchased X!" after the 20-second timeout[/p]
  • [p]DefaultMaterialGroup not working for .vmdl files exported from MeshComponent[/p]
  • [p]Clothing properties not serializing to JSON when marked internal โ€” free clothes referenced by resource ID now save correctly[/p]
  • [p]ScenePanel โ€” render scenes are now kicked off during Tick, decoupling them from the render texture step.[/p]
  • [p]CBaseFileSystem::AddSymLink overwriting the target path of an existing symlink[/p]
  • [p]NavArea toggling behaving incorrectly due to stale MakeDirty usage[/p]
  • [p]The M key resetting the active mapping subtool when merging vertices[/p]
  • [p]Editor splash screen losing its taskbar window icon[/p]
  • [p]Minor prefab serialisation and instance ID edge cases[/p]
  • [p]An array pool use-after-free exploit โ€” game code's ArrayPool.Shared usages are remapped to Sandbox.PublicArrayPool to prevent reading memory from other sandboxed games[/p]
  • [p]Missing HTTP redirect URL validation โ€” redirects are now manually followed so blacklisted local URLs cannot be reached through redirect chains[/p]
  • [p]Hammer entity placement always inserting info_player_start instead of the selected entity type. Thanks @Kaikenny[/p]
  • [p]Gizmo.Hitbox.Sphere behaving differently from all other hitbox functions, causing rotation gizmo priority and clickability issues. Thanks @nixxquality[/p]

Update 26.02.25

[p]A new update has been released, you can view the full changes on our blog post.[/p][p]https://sbox.game/news/update-26-02-25[/p][p][/p][p][/p][p]Here's some highlights from the blog.[/p][p][/p][h3]Editor Splash Screen[/h3][p][/p][p]The editor loading splash got a new modern look, the key change is removing all the noise and showing you only what you need instead.[/p][p]You can also override the image with a splash_screen.png file in your project folder.[/p][p][/p][h3]Sandbox Mode[/h3][p]Lots of Sandbox mode goodies, the physgun has a gravgun mode and glows orange, tools have action hints, remove all constraints is in, dupes have a download progress, weld previews show correctly, and more.[/p][h3][/h3][p][/p][p][/p][p][/p][h3]Party Improvements[/h3][p]On theme for improving the platform experience, I've made some party system improvements this week.[/p]
  • [p]When the party leader starts downloading a game, you'll start downloading the game too in the background.ย [/p]
  • [p]When they've finished, you'll go with them.[/p]
  • [p]I've added some toasts to make it really obvious what's going on.๏ปฟ[/p]
[p][/p][p][/p][h3]Changelog[/h3][p]๐ŸŽ Added[/p]
  • [p]Editor splash screen has a progress bar, no longer spews console, is customizable[/p]
  • [p]Editor Welcome Guide[/p]
  • [p]Time.NowDouble[/p]
  • [p]Incremental compiles: smarter processing, syntax tree reuse[/p]
  • [p]Games can have a dedicated server only launch mode[/p]
  • [p]If a party leader is downloading a game, party members download it async in the menu[/p]
  • [p]Mapping vertex paint selection modes[/p]
  • [p]Updated Scene & Prefab Previews[/p]
  • [p]Scene.BatchGroup disposable method obsoleting SceneUtility.RunInBatchGroup, also batches network spawns[/p]
  • [p]Physics out of bounds event[/p]
  • [p]Selectable abstract AnyOfType[/p]
  • [p]Gizmo.Control.Rotate now outputs Rotation instead of Angle, added trackball and view based rotation @DrakeFruit[/p]
[p]๐Ÿงผ Improved[/p]
  • [p]Mapping: Vertex paint traces only on selected surface[/p]
  • [p]Mapping: Vertex paint shows verts with paint information[/p]
  • [p]Mapping: Vertex paint can paint backfaces[/p]
  • [p]mat_toolvis button in in-game console[/p]
  • [p]mat_toolvis converted to managed from native[/p]
  • [p]Minor menu style tweaks: use actual logo svg, hide LiveLobbyCard whilst loading, tweak notification badge styles[/p]
  • [p]Startup background is smaller, lighter and uncompressed UI image[/p]
  • [p]Several verbose logs moved to trace channel[/p]
  • [p]Cleaned up main menu assets and transient files[/p]
  • [p]Dedicated server no longer does unnecessary transform interpolation[/p]
  • [p]rendersystemvulkan: use SDL_Vulkan_GetInstanceExtensions for surface extensions[/p]
  • [p]Update Vulkan headers and volk (w/ valve mods)[/p]
  • [p]rendersystemvulkan: use VK_EXT_surface_maintenance1 make swapchain recreation a bit better[/p]
  • [p]SceneUtility.RenderToBitmap uses a normal scene instead of an editor scene so components execute normally[/p]
  • [p]Improve allocation overlay (#4121)[/p]
  • [p]Allocation overlay[/p]
  • [p]Avoid StringToken boxing causing unnecessary allocations[/p]
  • [p]Reduced Trace.WithCollisionRules allocations[/p]
  • [p]Reduced Action allocations from Component.ExceptionWrap[/p]
  • [p]Avoid per-frame KeyValuePair\[] allocations when using Parallel.ForEach[/p]
  • [p]Avoid allocations when creating and iterating CommandList[/p]
  • [p]Remove need for second lightbinner for fog, just do it all on shader, we do classification on the shader itself, edge cases like fog disable are rare to require doing it with an entire new collection of lights[/p]
  • [p]LoadAllGameResource only loads new resources[/p]
  • [p]Make sure SeverPackages.InstallAll only reloads packages once[/p]
  • [p]Close existing project settings window when opening new one[/p]
  • [p]Use InvariantCulture in various places when parsing floats @MrSoup678[/p]
  • [p]Don't show Max Player slider if Min players == Max players @nixxquality[/p]
  • [p]Dynamic splash screen height to avoid stretching @boxrocket[/p]
  • [p]Verify CreateGameResults cookie before usage @nixxquality[/p]
[p]๐Ÿช› Fixed[/p]
  • [p]mat_toolvis convar doing nothing[/p]
  • [p]Duplicated r_3d_skybox convars[/p]
  • [p]BlitMode.WithBackbuffer actually respects WithMips setting (#4096)[/p]
  • [p]physicalDeviceVulkan12Features.bufferDeviceAddress only enabled if hardware supports it (#4095)[/p]
  • [p]addon type not having ProjectPage[/p]
  • [p]Shadergraph: Don't generate TextureAttributes for albedo if its dynamic[/p]
  • [p]Native Resource networking[/p]
  • [p]PostProcessSystem does not run under dedicated servers[/p]
  • [p]Custom loading screen not showing when joining to an existing session (#4124)[/p]
  • [p]Envmaps, particles and light cookies not being marked as used, meaning they can end up evicted out of VRAM[/p]
  • [p]GameObjectSystem configuration supports collections properly[/p]
  • [p]Native resource reference networking[/p]
  • [p]DirectionalLight gizmo line spacing @boxrocket6803[/p]
  • [p]Tags not being applied to particle sceneobjects @LeDernierPoisson[/p]
  • [p]Guard null button origin if none set in action @peter-r-g[/p]
  • [p]list reorder not updating inspector for class types @Ardivaba[/p]
  • [p]Enforce FriendsOnly lobby privacy during handshake @trende2001[/p]
[p]๐Ÿšฏ Removed[/p]
  • [p]Version overlay[/p]

Update 26.02.18

[p]A new update has been released, you can view the full changes on our blog post.[/p][p]https://sbox.game/news/update-26-02-18[/p][p][/p][p][/p][p][/p][h3]Summary[/h3][p]Things have been a bit quieter this month. We're slowing down on the big flashy features - most of the major engine systems are in now and the focus shifted towards making everything feel good.[/p][p]We've lit a fire under our asses with release, it's forcing us to make decisions - what's in, what's out, what can wait. It's making us focus on the right stuff. Things we'd have spent weeks overthinking are getting solved now or shelved.[/p][p]We've got a few large doors left to close, mapping has some glaring flaws with interactables that we're actively solving. Sandbox has to be filled with all the fun little things to bring it together.[/p][p][/p][p]All in all - our heads are down and shit's getting done.[/p][p][/p][h3]Changelog[/h3][p]๐ŸŽ Added[/p]
  • [p]Physics: Buoyancy Support[/p]
  • [p]Mapping: Vertex Paint[/p]
  • [p]Mapping: Shear Mode[/p]
  • [p]Mapping: Mirror Tool[/p]
  • [p]Mapping: Object Selection[/p]
  • [p]Screen recording can now record the editor viewport[/p]
  • [p]Fade-in support for Sound.Play[/p]
  • [p]ParticleFloat support for ParticleEmitter properties[/p]
  • [p]New image/rendertarget formats: RGB32_UINT, RG32_UINT, R32G32B32A32_UINT[/p]
  • [p]Paint.Draw overload for pixmap with border radius[/p]
[p]๐Ÿงผ Improved[/p]
  • [p]Bone physics catchup[/p]
  • [p]SHIFT+RMB and CTRL+RMB can now be used outside of the Texture Tool[/p]
  • [p]Save Play in Game Mode with cookie project[/p]
  • [p]Indirect Light Volumes improvements, nicer bounds for "Fit to Scene Bounds" button[/p]
  • [p]Menu server list improvements[/p]
  • [p]Lazy prefab cache loading for prefab dependencies[/p]
  • [p]Make ParticleFloat widget descriptions context-neutral[/p]
  • [p]Make slnx/csproj always use relative paths[/p]
  • [p]Humans: eyelid morphs are now affected by aim_eyes[/p]
  • [p]Particle DieOnCollisionChance works more intuitively[/p]
  • [p]Resize support on GameObjects with IHasBounds[/p]
  • [p]Load cached asset info for new mods in AssetSystem::UpdateMods[/p]
  • [p]Destroy menu scene when entering a game to free resources[/p]
  • [p]Track dynamic states in Vulkan render system to remove redundant vkCmdSetPrimitiveTopologyEXT/vkCmdSetPolygonModeEXT calls per draw call[/p]
  • [p]Upgraded DXCompiler to latest from Vulkan SDK 1.4.341.1[/p]
  • [p]Signed Qt binaries, these were causing Windows Smart App Control to not launch the game[/p]
  • [p]Defer descriptor set deletion to avoid use-after-free on render thread[/p]
  • [p]Confirm GameObject/Component selection on double-clicking a node[/p]
  • [p]Scale baked into physics shape geometry โ€” strip it from the target body when calculating local offset[/p]
[p]๐Ÿช› Fixed[/p]
  • [p]"Texture manager doesn't know about texture" log spam[/p]
  • [p]Descriptor set layout ref counting leak in RegisterDescriptorSetLayout[/p]
  • [p]NRE in Terrain deserialization when TerrainBuffer is not yet created[/p]
  • [p]Navmesh bake corruption when EditorAutoUpdate is enabled[/p]
  • [p]ResourceIndex holding strong references to native resources[/p]
  • [p]EdgeArchTool going the wrong direction[/p]
  • [p]CompletionQueue assert during shutdown[/p]
  • [p]GTAO depth dispatch size and missing UAV barriers[/p]
  • [p]W and E hotkeys not switching gizmo tools[/p]
  • [p]Crash when ParticleEffect has PushStrength[/p]
  • [p]WorldPanelInput NRE[/p]
  • [p]Incorrect property summaries[/p]
  • [p]Pause modal NREs when no available package (unpublished second instance)[/p]
  • [p]net_debug assertion spam by calling SetDebugFunction with DebugOutputType.None when disabled[/p]
  • [p]When reparenting a SkinnedModelRenderer, clear out new skinned parent[/p]
  • [p]Only create/update nav mesh area when active[/p]
  • [p]Linux: Non-small struct args (>8 bytes) passed as ptr in managed but not received as ptr in native (InteropGen)[/p]
  • [p]Linux: Added missing libdxcompiler.so and libswscale.so dependencies[/p]
  • [p]Linux: Stop trying to load resourcecompiler when in non-tools builds[/p]
  • [p]Linux: Enable VK_KHR_wayland_surface for Wayland[/p]
  • [p]Linux: Plat_CreateWindow creates an SDL_WINDOW_VULKAN[/p]
  • [p]Humans: prevent skeleton from blowing up when wearing jar head[/p]
  • [p]Defer sentry close to after native AppSystem shutdown[/p]

Lunar New Year Outfit - Now Available For A Limited Time

[p][/p][p]Lunar New Year is here, celebrate in style with the Lunar Mask, Lunar Jacket, Lunar Shoes and Lunar Trousers. [/p][p][/p][p][/p][p][/p][p]These items are only available in the store until 24th February 2026, after which it'll only be available on the Community Marketplace.[/p]

Update 26.02.04

[p]A new update has been released, you can view the full changes on our blog post.[/p][p]https://sbox.game/news/update-26-02-04[/p][p][/p][p][/p][p][/p][h3]Changelog[/h3][p]๐ŸŽ Added[/p]
  • [p]Mapping snapping[/p]
  • [p]Mapping: flip mesh[/p]
  • [p]Mapping: box select & lasso selection[/p]
  • [p]LengthOverride property @ubre[/p]
  • [p]GPU Profiler overlay[/p]
  • [p]TreeView extras[/p]
  • [p]Navmesh baking[/p]
[p]๐Ÿงผ Improved[/p]
  • [p]Navmesh memory optimizations: improved by at least 5 times[/p]
  • [p]Hi-res screenshots use global anti-aliasing setting[/p]
  • [p]Mapping Tool "Save As Model" uses the model origin & supports more collision types[/p]
  • [p]Swapchain creation now uses SDL to handle surface creation, try to be more sane about format[/p]
  • [p]Swapchain depth format is simplified as always being D32FS8, with additional required flags[/p]
  • [p]DDGI uses RG1616F instead of BC6H because block compression caused too many artifacts[/p]
  • [p]Navmesh polygon mesh generation is 20-30% faster[/p]
  • [p]DDGI gizmo probes load relocation positions from relocation texture[/p]
  • [p]Use native C implementation for LZ4 managed compression API, used by networking[/p]
  • [p]Error handling for nested prefabs when a prefab is missing[/p]
  • [p]Foliage uses alpha to coverage for MSAA[/p]
  • [p]Steam callbacks run in network thread to prevent disconnects whilst main thread is busy (loading resources)[/p]
  • [p]Indirect light volumes use two passes bounce by default for higher quality[/p]
  • [p]Keep MainThread responsive when loading navmesh in editor[/p]
  • [p]Big VR cleanup[/p]
  • [p]DDGI: Stability improvement for ComputeVisibility @RedPixel[/p]
  • [p]Logs now archive when old or go over 512MB @766974616c79[/p]
[p]๐Ÿช› Fixed[/p]
  • [p]Crash: CLoadingResource::FinalizeLoadRequest with cyclical dependencies[/p]
  • [p]Crash: ResourceType overflow (too many GameResources) causing a buffer overrun and resource system corruption[/p]
  • [p]PlayerController animation events not reenabling when component is reenabled[/p]
  • [p]Navmesh CalculatePath giving up early on complex paths[/p]
  • [p]Not being able to frame to objects while in ejected viewport[/p]
  • [p]Nudge direction being inverted[/p]
  • [p]Auto-closing restore scene tabs on startup[/p]
  • [p]Terrain buffer leaking if disabled or deleted[/p]
  • [p]Terrain buffer reading has a HasTerrain check now[/p]
  • [p]Memory usage is measured with WorkingSet instead of PrivateMemorySize[/p]
  • [p]Vulkan robustness correctly uses pipeline robustness alongside now[/p]
  • [p]Null GPU buffer descriptors are now "bound" correctly with VK_WHOLE_SIZE range[/p]
  • [p]Error shader had mismatched descriptor set layouts between the vertex and pixel shader, potential GPU crash[/p]
  • [p]Editor swapchains matching screen resolution forcing exclusive fullscreen on Nvidia[/p]
  • [p]Titlebar switching back to fallback thumbnail after publshing[/p]
  • [p]Screen recording failing with ScenePanels[/p]
  • [p]MovieMaker: Session nav widgets not always being visible[/p]
  • [p]MovieMaker: Additive keyframe editing when source block starts at T=0[/p]
  • [p]MovieMaker: Timeline vibrating when trying to pan too far left[/p]
  • [p]MovieMaker: When dragging in timeline, scrub if we drag off the edge[/p]
  • [p]Indirect light volumes copy depth to color using compute, a Graphics.CopyTexture was not suitable because of different image formats[/p]
  • [p]CookieContainer not auto saving properly[/p]
  • [p]Renaming assets causing duplicate AssetListEntry selection[/p]
  • [p]GameObjectSystems not serializing on global systems, and deserialization failing for non-trivial types[/p]
  • [p]Glass shader not supporting orthographic projection properly for refaction[/p]
  • [p]StickyPopup height being awful[/p]
  • [p]Quad overdraw not working[/p]
  • [p]Occasional double context menu on searchable menus[/p]
  • [p]CodeGen compiler warnings related to \[Sync] when using nullable @Remscar[/p]