- Auto-cleanup idle voice handles: Voice sound handles are now killed when player hasn't been talking for a while
- Audio Occlusion refactor: Moved occlusion calculation to a dedicated SoundOcclusionSystem GameObjectSystem for better organization
- This now performs really well, so we could look into improving our occlusion calculation: proper damping when sound is transferred via wall, path tracing for occlusion etc. (will open a separate issue)
- Fix mixer early return bug: Fixed issue where mixer could return early, potentially skipping sounds
- Voice Component lipsync toggle: Added option to enable/disable lipsync processing on VoiceComponent
- Cheaper HRTF for voice audio: Disabled expensive bilinear interpolation for voice and certain other sounds in Steam Audio
- Editor MixerDetail perf: Skip frame updates on MixerDetail widget when not visible
- Reduced allocations in audio systems: Optimized away List and LINQ allocations in SoundOcclusionSystem, Listener, and SoundHandle.Source
- MP3 decoder buffer optimization: Improved buffer handling in native CAudioMixerWaveMP3 to reduce overhead
Depending on scenario can reduces audio frame time by up to 30%.
This should also drastically improve performance for games that use VOIP.
* Move AnimDecodeCache lock managed to native
Should prevent crash if cache is accessed concurrently by native and managed at the same time.
* Also pass lock thrugh CalcLocalHierarchyAnimation
* Make sure nested bone merge hierarchies update correctly
* AddPoseOperation skip work when added transform is equal to identity
* SubtractPoseOperation skip work when added transform is equal to identity
* Fast path for BlendUpdateNode when weights are 1
Don't emit expensive pose op just forward the pose with weight 1
* Fast path for Blend2DUpdateNode when weights are 1
Don't emit expensive pose op just forward the pose with weight 1
* Avoid allocation of Actions in MergeDescendants
* Re-enable CreateBLAS in RenderDeviceVulkan
* Update SPVRemapper to suppot raytracing opcode remapping
* Null initialize BLAS on RenderMesh
* Clean proper to generate BLAS on mesh data loading
* SceneRaytracingSystem stub
* Glue SceneRaytracing
* Remove pipelines from SceneRaytracing for now, just do TLAS, tie it to SceneRaytracingSystem, updates only once per frame just like how we want in a clean way
https://files.facepunch.com/sampavlovic/1b0611b1/ngfx-ui_Ck3ckzQQFT.png
* Send Descriptor Set of Raytracing World to RenderAttribute
* RTAO example using RayQuery
* RayTracingShader API stub
* Set SM6.0 and dxlevel 120 as default
* Instead of making raytracing opt-in, add -nogpuraytracing to force disable it
* Add IRenderDevice::IsRayTracingSupported() to easily query support for it
* Fix IsRayTracingSupported()
* RTAO Adjustments
* Allow Rayquery through AS on Compute and Pixel shaders even if not optimal, avoids it crashing when acessing it on compute
* Strip CRaytraceSceneWorld to just generating TLAS, dont need anything else for now and we need a better way to handle UGC than what's there
* Bindless::RaytracingAccelerationStructure()
* Simplify interface too
* Stub for UpdateSkinnedForRaytracing
* Dotnet format and fix documentation, make RTAO run at correct stage
* Only support raytracing in tools mode for now
* Move raytracing stuff to Raytracing.hlsl
* Stub RTX shader
* Internal Raytracingshader and remove useless stuff exposed from it
* VfxProgramHasRenderShader should check for VFX_PROGRAM_RTX too, that's the source from everything else failing
* Add arbitrary entry point support to shaders, needed as RTX shaders use [shader("XXX")] instead of MainXXX directly
* RenderTools::TraceRays API, preliminary implementation, RTAO uses RaytracingShader
* Make RT support internal, allow RT on game
* Remove RaytracedAmbientOcclusion, will be on scenestaging when ready
* Update engine/Sandbox.Engine/Systems/Render/RayTracingShader.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix rebase
* Update shaders
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>