Previously, the Navmesh was always generated from scratch on scene load, this could be slow especially on larger maps. We added the ability to bake the navmesh to disk. Scenes with baked navmesh data will load significantly faster.
We drastically reduced navmesh memory usage by packing & compressing the cached navmesh data. This means much larger scenes can now generate successfully. For example, a very large map (~4km x 4km) now generates fine, before it would just run out of memory and crash.
Polymesh Generation Optimizations
Navmesh generation has two steps: heightfield generation, then polymesh generation. We optimized the second step, polymesh generation, which directly translates into faster navmesh loads from baked data.
Fixes
Fixed a race condition that would cause an infinite stall when loading navmesh in the editor
Fixed CalculatePath giving up early on complex paths
Using RenderDoc captures to check timings is painful. Source 2 has an awesome backend to measure GPU timings with Timestamp Manager, but it was buried deep in the engine.
I integrated it to work with our stuff and our command lists API design.
Can very simply just toggle it from the game.
Now you can see what's killing your performance at a glance, makes it much easier to actually tackle the problem.
We've cleaned up our VR code internally again, and fixed a bunch of things in the process:
Fixed some of our VR components:
VR hand stuff is now correctly transformed using anchor-relative space
Our VR components now correctly check IsProxy so they run properly when networked
Fixed the VR projection matrix being broken whenever z-near for a camera isn't set to 1
Removed the unused VR stats editor widget
Added the ability to use both aim and grip poses for VR controllers
OpenXR compositor instances are now created / destroyed for individual game instances - rather than being shared. This mainly helps to improve compatibility with different OpenXR runtimes inside the editor, namely the Meta OpenXR runtime.
We'll still be iterating on our VR feature set heavily over time, which should be a lot easier with a cleaner codebase for this stuff.
Slowly iterating on Indirect Light Volumes to start to feel awesome, still a long way to go to deal with all edge cases but I have a clear roadmap.
Probes are generated starting from your eyes' view and do two passes for more accurate bounces and quicker iteration.
Editor UX with them is overall better specially across sessions.
TheRedPixel ( https://x.com/theredpix ) kindly contributed with a PR reviewing some things and I iterated on it, helps to better adjust backfacing probes without needing manual adjustment.
We now support Vertex Snapping in the mapping tools, Enabling it allows you to snap your selection to a vertex. Also you can now snap any of your selection to the grid.
We fixed a crash that occurred when joining multiple games in succession.
Source 2 only supported up to 64 resource types, joining multiple games exceeded that limit and caused a crash. We've removed the limit, so you're now much more likely to play more than two games in succession without crashing.
We have Lasso selection in the mapping tools, allowing for more precise selections.Box select also got some more love, allowing you to add and remove selection, as well support the select through geometry option.