Changelog
C# - Version 1.1.2
Fixes:
- Fixed a crash when reducing
context.MaximumConcurrencyLeveldown to1at runtime - Fixed an issue where meshes would incorrectly block permeation rays
- Fixed a crash when disabling occlusion/permeation on an Emitter that has targets
- Fixed an issue where trails wouldn't be trimmed when line-of-sight is lost
- Fixed reverb ray rendering in the debug window
- Trails are now correctly regenerated when an emitter passes through geometry
- Fixed a crash when running multiple contexts in parallel
- Rays now correctly bounce off the edge/rim of cylinders, half spheres, rectangular cones, triangular cones and triangular prisms
- Fixed an issue where line-of-sight was incorrectly achieved on an earlier bounce when a later bounce is now occluded by a dirty primitive
- Desktop only: new
ReduceLatencyflag onRaytracingContextthat reduces latency at the expense of more CPU usage - Fixed an issue where rays could pass through nearby primitives with high scattering values
- Improved scattering distribution
- Permeation energy is now reduced correctly when primitives overlap emitters
Additions:
- Added support for Web Assembly
- New ambient occlusion/permeation system
- New
AmbienceOcclusionRayCountandAmbienceOcclusionBounceCountemitter settings. Ambience occlusion was previously tied to reverb (for calculating outside percentage) - New
RefreshDistanceThresholdemitter setting that controls how far a ray must deviate from its old position before the trail is refreshed - New
Emitter.ResetTrails()function that clears the ray trail cache, cleans up memory and re-casts all rays - New
RaytracingContext.Epsilonvalue for adjusting the epsilon value used for ray offsets, world bounds clamping and line-of-sight tests - New
Emitter.ScatteringSeedsetting for deterministic scattering - New
Emitter.OcclusionEnergyPercentandEmitter.PermeationEnergyPercentfields. It's not possible to use the customGainFormulafrom JS, so these fields can be customised to control the percentage of energy required for the emitter to be at max volume, when discovered by another emitter
Removed:
- Room volume calculation (expensive and unnecessary)
- Reverb wetness (use emitter gain instead)
- Removed the
RaytracingContext.MaterialsDirtyproperty. All material updates are now detected automatically
Optimisations:
- Parallelised expensive collation work from the single analysis thread across multiple worker threads
- Culled excessive trail rays being cast when different ray features (e.g. occlusion and reverb) have different ray/bounce counts
- Trails are no longer unnecessarily re-generated when an emitter moves (floating point precision)
- Prevented memory allocation on background threads when tracking reverb hit positions
- Prevented memory allocation on background threads when collating directional EAX
- Primitive updates no longer cause memory allocations on background threads
C# - Version 1.1.1
Fixes:
- Rays now collide with cones, cylinders, disks and half-spheres correctly
- Fixed
RaytracingContext.TotalPossibleRayCountresult - now includes refresh rays and trail verification rays - Meshes now render correctly in the debug window when disabling and enabling rendering
- Fixed EAX decay time calculation - previously it would produce large values when the echogram contained a tiny amount of data much later on. Now it stops checking for data after the first empty bin. If your echogram has gaps (red lines in the debug window), increase the new
Emitter.MaxEchogramTimesetting from 10ms (default) to 50ms or 100ms.
Additions:
- New
RaytracingContext.WorldIsIndoorssetting that controls whether the entire world is considered indoors or outdoors. When false, reverb rays stop checking for line-of-sight after hitting the world edge. Defaults to false - The length and granularity of each Emitter's echogram can now be adjusted via the new
Emitter.MaxEchogramTimeandEmitter.EchogramGranularitysettings - Emitters can now cast rays from multiple positions via the new
Emitter.OverridePositionssetting. Rays are cast round-robin style, e.g. with 128 rays and 2 vectors inEmitter.OverridePositions, even rays will be cast from the 1st vector and odd rays will be cast from the 2nd vector. - Emitters can now cast rays in custom directions via the new
Emitter.OverrideRayDirectionssetting. Same round-robin style as above
Changes:
- Capitalised the ray colour fields in Emitter:
TrailColor,ReverbColor,OcclusionColor,PermeationColor,AmbientPermeationColor - The debug window now renders each Emitter's echogram
Optimisations:
- Faster permeation intersection for meshes
C# - Version 1.1.0
See Breaking Changes v1.1.0 for an overview of breaking changes and new features.
Fixes:
- Voice reverb ray lengths now account for
metersPerUnitcorrectly - Listener and Voice UI in the debug window now matches the 3D position of the emitter correctly
- Fixed stale data when disabling permeation at runtime
- Fixed NaN gain values from the default
voiceEnergyFormulawhen occlusion or permeation is disabled - The order of groupedEAX indices is now stable
- Fixed an edge case were occlusion/LOS rays were not re-cast when primitives moved
- Fixed an exception when reducing
MaximumGroupedEAXCount - Removed hardcoded SIMD code for bounding box checks (broken on Mac Parallels)
- All rays are now correctly re-cast when materials are updated
- Fixed ray reflections off world bounds edges
- Fixed an issue where reverb line-of-sight was incorrectly blocked by the same surface the ray just bounced off
- Fixed an issue where rays that collided with meshes were re-cast every frame, rather than being cached
- Fixed reverb bounds and center calculation when
MetersPerUnitis a value other than1.0f - Rays now correctly bounce within concave meshes
Changes:
- All settings can be changed at runtime with no stutters on the main thread
- More accurate reverb pan/directionality calculation, with new
Emitter.EAXPanInnerThresholdandEmitter.EAXPanOuterThresholdsettings
Additions:
- New
Emittersystem - support for multiple listeners, customisable ray counts and customisable bounce counts - Two new ray types: Ambient Permeation and Visualisation
- The debug rendering window can now render occlusion and permeation rays. Set the
emitter.occlusionColorandemitter.permeationColorvariables to render them. - New
PlaneTransmissionLFandPlaneTransmissionHFmaterial settings that control how much energy is lost when rays pass through flat planes
Optimisations:
- Slightly less memory usage
- Heavy memory allocations moved to background threads
- Post-raytracing analysis logic moved to background threads
- No more stutters when changing ray counts, bounce counts, or maximum concurrency level on the main thread at runtime
- Slightly faster primitive-ray intersections
C# - Version 1.0.6
Fixes:
- More robust world bounds checks - rays should never leave the world bounds
Changes:
- Removed some debug logging
- Logs are now prefixed with
[vaudio]
Optimisations:
- Raytracing should be slightly faster as the world bounds is no longer included in the BVH
C# - Version 1.0.5
Fixes:
- EAX
DecayTimeno longer flickers with sparse echograms - Fixed a
NullReferenceExceptionwhen creating aRaytracingContextwith bothocclusionRayCountandpermeationRayCountset to 0 - Fixed an edge case where rays could leave the world when colliding with a primitive exactly on the world edge
- Rays will now bounce correctly within a concave
MeshPrimitive - Fixed an edge case where voices wouldn't render in the debug window
- EAX gainLF and gainHF are now calculated correctly when
occlusionRayCountorpermeationRayCountare higher thanreverbRayCount - Shader errors use the custom logging callback rather than
Console.WriteLine
Changes:
- Removed all
outsideEAXfunctionality - usegroupedEAXinstread
Additions:
- Added a new
supportsPemeationfield onMeshPrimitive, for meshes that are watertight. Currently only supports permeation between the first 2 intersections (complex concave shapes are not supported yet) - New
EAXReverbResults.ALEffectSlotGainparameter that is automatically calculated for grouped EAX effects for voices - New
EAXReverbResults.BoundsMinandEAXReverbResults.BoundsMaxproperties for the min and max 3D bounds of the reverb space
C# - Version 1.0.4
Changes:
Voice.filteris now initiallynull, to prevent accidentally accessing it before raytracing completes
Additions:
- New
RaytracingContext.OnReverbUpdatedcallback, which fires after reverb is updated and beforeVoice.OnRaytracingCompletefires. This gives you a chance to update your EAX reverb effects, beforeVoice.OnRaytracingCompletetries to access them.
C# - Version 1.0.3
Fixes:
- Fixed a crash when creating a
RaytracingContextwithRaytracingContextSettings.airAbsorptionset to null - Fixed an edge case where occlusion energy did not reset to 0 when no occlusion rays could reach a voice
Changes:
- Renamed
context.ListenerEAXReverbtocontext.ListenerEAX - Renamed
context.OutsideEAXReverbtocontext.OutsideEAX - Renamed
context.BlendedEAXReverbtocontext.GroupedEAX - Renamed
settings.blendedReverbPresetAmounttosettings.maximumGroupedEAXCount - Renamed
voice.blendedEAXIndextovoice.groupedEAXIndex - Renamed
ProcessedReverbResults.ReturningPercenttoProcessedReverbResults.ReturnedPercent - Removed Sabine / Eyring / Theoretical RT60 properties from
ProcessedReverbResults. UseMeasuredDecayTimeLFandMeasuredDecayTimeHFinstead
Additions:
- Added XML documentation to
RaytracingContextSettings - Added XML documentation to
RaytracingContext - Added XML documentation to all primitives
- Added XML documentation to
MaterialProperties - Added XML documentation to
RawReverbResults
Optimisations:
- Line-of-sight rays for reverb are no longer cast back to the listener after the ray escapes outside (hits the world bounds)
C# - Version 1.0.2
Fixes:
- Rays now properly lose energy when bouncing off primitives when
reverbRayCountis 0 - Fixed voice energy calculation when occlusion and permeation rays are different
- Rays will no longer incorrectly travel through the primitive they just bounced off, when their next hit was trimmed
- Rays will no longer have LOS blocked by the primitive they just bounced off
- More accurate reflection positions when rays bounce off primitives
- The rendering window now shows the correct ray counts
Changes:
- Warnings are now logged when creating voices when
occlusionRayCountandpermeationRayCountare zero (as no rays will be cast against voices) - Renamed
RaytracingContext.trailColourtoRaytracingContext.trailColor - Renamed
RaytracingContext.reverbColourtoRaytracingContext.reverbColor - Renamed
MaterialSettings.colourstoMaterialSettings.colors - Occlusion rays are no longer fired directly from the listener to each voice (only on each bounce)
Optimisations:
- Slightly faster bounding box intersection tests
- Slightly less memory usage
- Slightly faster primitive updates
- Slightly less CPU usage on the main thread
- Removed a decent amount of unused code
C# - Version 1.0.1
Fixes:
- Fixed air absorption - it was not applied at all
RaytracingContextcan now be initialised with 0reverbRayCount- Occlusion now works correctly when
reverbRayCountis 0
Changes:
- Air absorption now uses Celsius instead of Farenheit
- Occlusion energy is now accumulated even after rays bounce off the edge of the map. Might make this a setting