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.
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.png3.57 MBdiddykong.mp48.54 MB For example an emissive object just becomes an area light naturally:sbox-dev_9cCEpHVWRr.png322.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.
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.png2.8 MB Our previous foliage shader had issues with transparency and didn't scale well over distances resulting in artifacts.Ebc3cdd06e08.mp47.44 MB
Transmission
Leaf cards now support light transmission, allowing light to pass through leaves and reducing flat, opaque shading. sbox-dev_Q8AIFDJZpB.mp45.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.
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.
Leaf cards fade at grazing angles perpendicular to the view direction, softening harsh geometry. This gets rid of protruding cards coming out of the foliagesbox-dev_EeJwpXcExs.mp41.45 MB
Alpha transparency cutoff now adjusts dynamically with distance to keep far trees looking fuller and more lush. sbox-dev_iMlQTOCmdB.mp46.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.mp41.94 MB Overall, trees are now far more usable in large environments and perform well even when rendered in large numbers. image.png2.13 MB
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.png20.12 KB
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.png31.37 KB
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.png113.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.).
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.
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:
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.mp41.6 MB
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.mp4598.86 KB
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