Update 26.01.28

The Jungle Update — foliage 🌴 gets a well needed makeover, baked global illumination is in 🌞, crashes are down 📉 and more!

Indirect Light Volumesby Sam Pavlovic

We have released a preview of our Indirect Light Volume feature to gather feedback.
G_Yy37rXkAAtxAi.jpeg 717.9 KB
sbox.2026.01.28.00.38.39 [5d66uk].mp4 13.17 MB
(Thanks Oz)

The biggest feature gap for our Scene system was that VRAD is tied to Hammer & needs to pause your work every time you want to have lighting update on your map, and you can't remix the lighting of an existing map after it's compiled, so Day/Night variant of maps for example need an entire new map, IBL is nice but doesn't have the same granularity.

I think it never made much sense to have lighting information tied to geometry, the lighting system should be all unified and used in Geometry/Objects/Fog, this opens up a lot of possibilities while making the pipeline less complicated at the same time.
(My Summer Cottage by Small Fish)

Can interactively bake lighting on your scene, usually seconds, anything you add to the scene will contribute to indirect lighting and don't have to pause your work.
ddgi.png 3.57 MB
diddykong.mp4 8.54 MB

For example an emissive object just becomes an area light naturally:
sbox-dev_9cCEpHVWRr.png 322.76 KB

We want to have it magical, It isn't magical yet, probe density is almost all uniform, would be nice to have it use sparse allocations, real time. Best practices is to use it outdoors right now.

Foliage Shaderby antopilo

 Trees and foliage got a well deserved overhaul. A collection of techniques and tricks has been added to our foliage shader, affecting trees, bushes and clumps.
image.png 2.8 MB

Our previous foliage shader had issues with transparency and didn't scale well over distances resulting in artifacts.
Ebc3cdd06e08.mp4 7.44 MB

 Transmission 

Leaf cards now support light transmission, allowing light to pass through leaves and reducing flat, opaque shading.
sbox-dev_Q8AIFDJZpB.mp4 5.43 MB

Normals 

Custom leaf normals better average the overall shape of the tree, breaking up obvious card silhouettes and improving canopy cohesion. A subtle effect, that break up grid-like pattern that is sometimes noticeable. The foliage highlights seem rounder.
Additional normal noise breaks up flat-looking cards.
sbox-dev_CACmML346V.mp4 486.97 KB

Lighting 

Rim lighting and warped lighting now illuminate occluded areas, preventing trees from looking like solid walls of cards and helping them sit more naturally in the scene. 

Fading cards 

Leaf cards fade at grazing angles perpendicular to the view direction, softening harsh geometry.  This gets rid of  protruding cards coming out of the foliage
sbox-dev_EeJwpXcExs.mp4 1.45 MB


 Alpha transparency cutoff now adjusts dynamically with distance to keep far trees looking fuller and more lush.
sbox-dev_iMlQTOCmdB.mp4 6.97 MB

Swaying 

Subtle trunk swaying was also added to bring more life to scenes. The leaves also flutter following the trunk movements.
sbox-dev_0voYC9PDE4.mp4 1.94 MB

Overall, trees are now far more usable in large environments and perform well even when rendered in large numbers.
image.png 2.13 MB



Editor Progress Barsby garry

We had progress bars in the editor but they were modals, which means they popped up a window and you couldn't interact with the rest of the editor while they were visible. That's useful in some situations, but most of the time it feels pretty clunky and unnecessary.

With the Indirect Light Volume stuff, we wanted to show cancellable progress while baking, which spurred me on to improve the situation. They appear in the toast area now, the same as compile notices.
image.png 20.12 KB


Project Bar, Project Settingsby devultj

We've added a new project bar to the top of the editor, so you can quickly access project related settings.
{478F8544-6BD6-4512-ACA6-1B5DBF008B18}.png 10.73 KB
Quite possibly the most requested editor feature: we've moved the project settings back into a window. You're welcome.
sbox-dev_YUOMDhbNqf.png 53.87 KB

Configurable Game Object Systemsby devultj

You're now able to configure GameObjectSystems in the editor, just like components. This'll be useful for globals that exist in all scenes. You can also configure these per-scene.
sbox-dev_IPKSVxbiuK.png 31.37 KB

Stabilityby Lorenz

We've been working a lot on stability this month and it's starting to show in our crash rate.
From our all time high of ~15% we are now down to ~6%
image.png 113.65 KB


You can always view these stats at: https://sbox.game/metrics/stability
We've also landed a bunch of fixes this week, so expect this trend to continue over the next few days:
  • GPU robustness
    • Enabled VK_EXT_robustness2 provides bounds checks and null buffer validation
    • Fixed a crash when rendering envmaps during an active render pass.
    • We've also disabled GPU tracing again, so expect a small performance & stability boost in draw call-heavy scenes.
  • Editor crashes – Improved Qt object cleanup to prevent crashes in event callbacks, and fixed issues with Vulkan's exclusive fullscreen extension.
  • Shutdown crashes – Fixed an edge case where the main loop throwing an exception would cause a crash on exit.
  • Misc hardening – Added defensive checks and small optimizations (resource loading, animation, JSON diffing, vector math, etc.).

Mesh Traces Disabledby Lorenz

We've made Mesh Traces (SceneTrace.UseRenderMeshes) editor-only, using it in-game will now throw an error.

The underlying mechanism was never designed for runtime use and has significant performance and memory overhead (1GB+).

Right now there is no replacement, if there's enough demand, we may explore a proper mechanism for mesh tracing in the future.

Networking - Local Instance Idsby conna

Previously when you started a new instance with Join via New Instance to test multiplayer in your game, the new instance would have the same SteamId as your editor host.

Now, whenever you create a new instance it'll be assigned a new index based on how many instances you have open.

The SteamId it reports to the host will be based from that index. So you'll have a deterministic way of testing stuff like persistent data for a user based on their SteamId.

Networking - Optimizationsby conna

Significant improvements have been made to networking in general. We're now using the Steam Networking SendMessages API to batch outgoing networking messages and completely eliminate allocations from copying the message buffer to the Steam API.

In addition, properties wrapped with CodeGenerator such as properties with [Sync] now eliminate allocations from lambda usage by caching the lambdas for the wrapped set and get accessors.

Various micro-optimizations have been made to writing the snapshot state per networked object, and because this is a very hot path, these really make a difference.

Optimizations have been made to IsProxy, this is now only updated when the host or owner changes instead of being calculated every time it's accessed.

In my test scene with 2000 networked rigidbodies, the following performance improvement was observed:

Before.png 23.18 KB

After.png 22.2 KB

Mapping Face Selectionsby bakscratch

Face selection has had a some work to make it feel better. We support filtered selection on face mode, selection from normal and material.
sbox-dev_joGUxFslWR.mp4 1.6 MB

Mapping Convert Selectby bakscratch

You can convert your selection, so for example; If you select a face then hold alt + edge mode it'll convert the selection into the edges of the face.
sbox-dev_toW8yZSJJi.mp4 598.86 KB

Mapping Grow/ Shrink Selectionby bakscratch

You can now grow and shrink select with + & -
sbox-dev_gFlWenx6AH.mp4 697.08 KB

Movie Maker Maintenanceby ziks

Here's a grab bag of bug fixes and improvements for Movie Maker. Some of these are groundwork for a WIP demo recording feature, letting you record gameplay outside of the editor.

Track List

  • Can select all tracks with Ctrl+A
  • Added Create Missing References context menu option, to create GameObjects and Components for the selected tracks to target
  • Only expand root tracks by default, to make navigating big projects easier

Timeline

  • Fix vertical scroll bar
  • Fix jittering when zooming
  • Support zooming in and out more
  • Fix major / minor timeline tick interval logic

Internals

  • Support .movie projects imported from in-game recordings
  • Simplify how raw samples are stored in .movie assets
  • Support List<T> properties in movies