VRC_SpatialAudioSource to add 3D spatialization to a Unity
VRC_SpatialAudioSource will automatically add a Unity
Audio Source component.
This component can be used on both avatars and worlds.
Unity Editor Interface
The component generates two Unity Gizmos that show:
In addition, the
Audio Source component generates a "Volumetric Radius" gizmo.
Here's what the gizmos look like: The component contains tooltips for all properties. Hover over the name of the property to see a short description.
All units are in meters. Falloff of audio intensity is roughly inverse-square by default, as illustrated below:
You can override the curve using the graph on the
Audio Source. This curve determines the intensity of the audio at a given distance.
At ranges approaching the
Far value, audio may fade out more quickly depending on your settings.
Using 2D Audio
2D audio is where the audio's volume is constant no matter where you are in a world. This might be used for background noise that is already recorded as a spacialized source (a field recording) or background music.
You can use 2D avatar audio if you like by disabling the
Use Spatialized Audio option in the component. Unless you choose to use a different audio falloff curve, the intensity will still drop off over distance as before, it just won't be spatialized.
All that being said, we do not recommend using 2D audio. All real-world sources of sound have distinct point or volumetric sources. If you wish to use 2D audio regardless, ensure that you:
Use Spatialized Audioon the
- Adjust Spatial Blend on the
Audio Sourceto be 100% 2D
Spatial Audio on Avatars
VRChat supports using
VRC_SpatialAudioSource on avatars, albeit with some limitations. These limitations are in place to prevent abuse and malicious sounds.
Other than these limitations,
VRC_SpatialAudioSource works precisely the same on avatars as it does in worlds.
If you don't add a
VRC_SpatialAudioSource with your avatar audio sources, one will be added by the SDK with default settings.
If you use a pre-existing avatar-based
Audio Source without a
VRC_SpatialAudioSource or ONSP (legacy) component, you may get unexpected, undocumented, and undesired behavior. We strongly recommend always using
VRC_SpatialAudioSource with any avatar-based
Adjusting these properties via animations during runtime is not supported. These values are set at initialization.
Animating properties of the
Audio Source should still work for properties that are not related to spatialization settings, like pitch.
On avatars, it is best to disable and enable the Audio Source components rather than the entire GameObject.
Here's the information converted into a two-column markdown table:
|Gain||An additional boost to volume. By default, world audio sources get a 10dB boost. Avatar audio sources are limited to a maximum gain of 10dB.|
|Far||The far radius, in meters, where volume falls off to silence. By default, it is set to 40m. Avatar audio is limited to a maximum of 40m. |
Far only overrides an Audio Source curve if you turn on the "Use Spatializer Falloff" checkbox on VRC_SpatialAudioSource.
|Advanced: Near||The near radius, in meters, where volume begins to fall off. We recommend keeping this at zero for realism and effective spatialization. Defaults to 0m. |
Near only overrides an Audio Source curve if you turn on the "Use Spatializer Falloff" checkbox on VRC_SpatialAudioSource.
|Advanced: Volumetric Radius||An audio source is normally simulated to be a point source, however changing this value allows the source to appear to come from a larger area. This should be used carefully and is mainly for distant audio sources that need to sound "large" as you move past them. |
The listener should not ever get close to the radius for best results. Keep this at zero unless you know what you're doing. Defaults to 0m.
The value for Volumetric Radius should always be lower than Far.
|Advanced: Use AudioSource Volume Curve||Use the AudioSource's '3D Sound Settings' volume curve. If unchecked, use Inverse Square falloff. It is recommended to keep this disabled to ensure realistic and authentic spatialization. |
Defaults to False.
|Advanced: Enable Spatialization||Uncheck this to disable the default inverse-square falloff curve and instead use the Audio Source's spatialization settings. |
Defaults to True.
You are permitted to adjust the fall-off curve on avatar-based
Audio Sources. Simply set
Use AudioSource Volume Curve to True, adjust the curve in the
Audio Source, and VRChat will use that fall-off curve instead of the default inverse-square.
However, as noted above, there are some limitations on
VRC_SpatialAudioSource components on avatars. These limits are enforced at run-time.
Gaincannot exceed 10db
Farcannot exceed 40m
Player Audio can override these settings.
If you attempt to play avatar audio with a custom curve in a world with a shorter
Far distance than normal, Unity "squashes" the curve. You can see what happens by adjusting the
maxDistance range on the Audio Source.
Avatar Audio Compressor
There is a compressor on the Avatar audio channel that prevents sounds from being maliciously loud. This should not affect normal use of avatar audio sources that have reasonable volume levels.
Tips for Avoiding the Compressor
If you've got audio on your avatar, there's a few things you can do with your audio beforehand to ensure you're not going to hit the compressor.
- Try to get "dry" audio files-- that is, audio files with no effects. Reverb and delay are the most egregious in causing compressor "pumping".
- Leave a bit of headroom in the audio file. In other words, don't fit the waveform to the very top and bottom of the range. In Audacity (or other wave editor), normalize your audio between -6 and -12db.
- Try to avoid extremely high peaks in the waveform with very short attack-- in other words, don't suddenly "pump" the audio to very high levels. If you normalize, this should drop out of the file regardless.
Replacing ONSP in Old Scenes
Using the "Enable 3D Spatialization on all AudioSources" button in the Build Control Panel now converts any
VRC_SpatialAudioSource components. Some of these sources may require tweaking after the conversion.