Version
(See the Reflect properties below.)
The Reflect Effect plug-in implements a multi-tap time-varying delay line with filters, for the purpose of simulating spatialized early reflections.
When considering geometrical modeling of acoustics, spatialized early reflections are typically calculated using the "image source technique". With this approach, early reflections can be represented by an image source, as if the geometry from which sound reflects were like a mirror. This is illustrated in the following figure.
In this figure, an emitter E and a listener L exist in the same geometry (room), depicted by the enclosing box (black solid line). The reflection paths from the emitter to the listener are drawn in green (solid line). The image source technique consists of generating an "image" of the emitter for each surface. The image source is placed at the same distance behind the surface, on the line that is normal to the surface and connecting the emitter. The total distance traveled by the sound corresponds to the distance between the image source and the listener. Note that image source placement strictly depends on emitter position and geometry, and not on the listener's position.
The game pushes a list of image sources to a given plug-in instance. For each image source, a tap is added to the delay line, and is further filtered, panned, and scaled according to its relative 3D position, curves driven by distance and diffraction, and associated Acoustic Textures.
Reflect is typically used on an Auxiliary Bus representing early reflections. It will correctly simulate early reflections if the bus is associated with the game object that emits the sounds sent to this bus.
Add an Auxiliary Bus for early reflections:
In the Project Explorer, right-click the bus under which you want to create an early reflections Auxiliary Bus.
Select New Child > Presets and choose either Simplified Early Reflection Auxiliary Bus or Legacy Early Reflection Auxiliary Bus. We recommend using the simplified auxiliary bus to benefit from all of Reflect's features. See the Intended Reflect workflow below.
Note | |
---|---|
These Presets are only available when Reflect is installed and the Reflect Factory Presets have been added to your project. If the Presets haven't been added, you can add them using the Import Factory Assets dialog. |
The new Auxiliary Bus is created with an instance of the Reflect Effect already mounted on it. Refer to Characteristics of the Reflect Auxiliary Bus for further details on this bus.
Configure the sounds that you want to be reflected:
If you will be Setting up Reflect with spatial audio, which is the preferred method, or if you use the SpatialAudio::SetImageSource API, assign your newly created bus to the Early Reflections' Auxiliary Bus in the General Settings tab of the sound's Property Editor. Optionally, you can set a send volume.
If you will be Setting up Reflect without spatial audio, or if you will send it to other Auxiliary Busses for late reverberation, in the General Settings tab of the sound's Property Editor, select Use game-defined auxiliary sends.
Typically a sound that will be reflected is spatialized in 3D and uses an attenuation. In the Positioning tab of the sound's Property Editor:
Select Listener Relative Routing.
Set 3D Spatialization to Position + Orientation.
Add an attenuation in the Attenuation group.
Configure the Effect in the Reflect Effect Editor:
Set the output channel to the desired configuration by modifying the Output Config property. Parent Bus represents the output bus configuration of the parent bus of the Auxiliary Bus.
By default, all curves are set to Use Attenuation. If you have set some sounds' Early Reflections Auxiliary Bus to an Auxiliary Bus mounted with this Reflect Effect, and if the sound has an attenuation, select the Attenuations > button to see the attenuation in the list. Selecting an attenuation from this list lets you visualize the different curves in the graph. Alternatively, you can set curves to Custom and author them yourself.
If you have a custom curve, make sure the Max Distance is great enough for the sounds emitted by your image sources to reach the listener.
Ensure you have a license for the Reflect plug-in.
Generate SoundBanks.
When Setting up Reflect in a Wwise project, an Auxiliary Bus is created. It is a standard Auxiliary Bus with the following settings:
The bus configuration is defined as follows, depending on the Preset chosen:
The Simplified Preset: The bus configuration is Audio Objects. Setting the input bus configuration to Audio Objects allows the Reflect plug-in to receive more information in its input sounds, for example, the attenuation applied on the sound. This lets the Reflect plug-in use the sound's attenuation curves to filter the output sounds, if specified by the user.
The Legacy Preset: The bus configuration is 1.0 (mono). While Reflect is capable of working with multichannel input sounds, the first thing it does is downmix them to mono. It is therefore more efficient to set the bus to mono, as it spares Wwise from needlessly computing spatialization of the voice into this Auxiliary Bus.
Note | |
---|---|
The bus configuration (Audio Objects or mono) does not affect Reflect's output configuration. The output configuration onto which early reflections are spatialized is determined by Reflect's Effect Settings. |
It has an instance of Reflect mounted on it. The Legacy and Simplified Presets include different instances of Reflect. The Legacy Reflect instance is set to use Custom curves for its filtering, while the Simplified Reflect instance is set to Use Attenuation curves instead. In either case, this can be changed in the Reflect Effect Editor.
Note | |
---|---|
A Reflect Effect set to Use Attenuation curves is only able to retrieve the attenuation curves if the bus configuration of the early reflection Auxiliary Bus it is mounted on is set to an Audio Objects bus configuration. |
In the Positioning tab, the Listener Relative Routing option is selected, but 3D Spatialization is set to None. Otherwise, Wwise would further transform (pan and attenuate) the image sources generated and spatialized by Reflect.
Note, any attenuation applied to this bus will affect the bus output in regards to the position of the emitter and the listener. To customize attenuation in regards to the position of the different image sources and the listener, refer to the Reflect Effect Editor instead.
Reflect can be used in either legacy or simplified mode. In legacy mode, the user must author a series of custom curves to attenuate the early reflections. In simplified mode, Reflect uses each sound's own attenuation curves to attenuate the early reflections. The assumption is that the early reflections of a sound should be attenuated according to the same curves as the sound itself.
Reflect's simplified mode is activated by setting the early reflections auxiliary bus to an Audio Objects input bus configuration. This gives the sound engine access to the input sound's attenuation curves so that they can be used in the Reflect plug-in execution. This doesn't impact the output of the auxiliary bus because Reflect is an out-of-place Effect. Users can choose the output configuration in the Reflect Effect Editor with the Output Config property.
The mode is called 'simplified' because the user only needs to associate a sound with a simplified early reflection auxiliary bus to automatically have a reasonable design for the sound's early reflections. Since each sound can have its own attenuation, another advantage of the simplified mode is that the same Reflect Effect can attenuate multiple sounds differently. In contrast, in legacy mode, it is necessary to create different Reflect Effect ShareSets to have different sets of curves.
To allow for some customization in simplified mode, each Reflect ShareSet has distance and diffraction warping properties that can emphasize or de-emphasize the effect of distance and diffraction, respectively. For example, setting a positive distance warping value virtually positions the image sources further away from the listener. This means that the effect of the distance-driven curves are de-emphasized since the early reflections will be more attenuated than the direct signal. Distance warping always keeps the distance between 0 and the maximum distance of the curve. In the same way, warping diffraction emphasizes or de-emphasizes the effect of diffraction by moving the diffraction value between 0 and 100. These warping values can also be set with RTPCs to help emphasize or de-emphasize according to a game parameter.
If warping is not enough, it is possible to use custom curves. Each curve can be set independently to either use an attenuation curve or a custom curve. Note that the custom curve will be custom for all sounds using the same Reflect Effect. Warping also affects custom curves.
The only scenario where legacy mode is recommended, is if all your curves will always be set to custom and you really want to avoid using Audio Objects.
After Setting up Reflect in a Wwise project, you need to set it up on the game side. You can do so by using the Spatial Audio API.
Ensure Reflect is registered by including AK/Plugin/AkReflectFXFactory.h
.
Include the Spatial Audio header file: AK/SpatialAudio/Common/AkSpatialAudio.h
.
Initialize the Spatial Audio module and register the spatial audio listener.
// Initialize Wwise Spatial Audio. AkSpatialAudioInitSettings settings; res = AK::SpatialAudio::Init(settings); // Register the listener game object if not already done, and then register it as the one and only spatial audio listener. static const AkGameObjectID LISTENER_ID = 10000; AK::SoundEngine::RegisterGameObj( LISTENER_ID, "Listener" ); AK::SpatialAudio::RegisterListener( LISTENER_ID );
Define and set the geometry that will make up the Reflect geometry surfaces.
Create an AkGeometryParams
and fill it with the triangles, vertices, and surfaces of your geometry.
static const AkGeometrySetID GEOMETRY_ID = 200; AkGeometryParams geometryParam; // Fill triangles, vertices and surfaces into geometryParam. // See an example in the Integration Demo. // ... AK::SpatialAudio::SetGeometry( GEOMETRY_ID, geometryParams );
After Setting up Reflect in a Wwise project, you need to set it up on the game side.
Ensure Reflect is registered by including AK/Plugin/AkReflectFXFactory.h
.
Include the Reflect header file: AK/Plugin/AkReflectGameData.h
.
You may also need to add AkReflectFX.lib
to your executable's input libraries.
Use the Reflect API to create image sources and place them where you want sound to be reflected from.
// Create an AkReflectGameData object. AkReflectGameData * reflectGameData = nullptr; reflectGameData = (AkReflectGameData *)_alloca(AkReflectGameData::GetSize(1)); // Fill in the data. reflectGameData->listenerID = LISTENER_ID; reflectGameData->uNumImageSources = 1; reflectGameData->arSources[0].uID = 123; reflectGameData->arSources[0].params.sourcePosition = { 200, 0, 0 }; // The following represents a distance factor between the listener and the image source. // If the source position corresponds to the reflective surface, the number should be two. reflectGameData->arSources[0].params.fDistanceScalingFactor = 1.f; reflectGameData->arSources[0].params.fLevel = 1.f; // Associate the image source with Acoustic Textures here if needed. reflectGameData->arSources[0].texture.uNumTexture = 0; reflectGameData->arSources[0].name.SetName("Img src 1"); // Send to Reflect. AK::SoundEngine::SendPluginCustomGameData(AK::SoundEngine::GetIDFromString("ER"), EMITTER_ID, AkPluginTypeEffect, AKCOMPANYID_AUDIOKINETIC, 171, reflectGameData, AkReflectGameData::GetSize(1));
Send a new AkReflectGameData
when you need to update the position of the image sources.
With each image source, you may pass up to four Acoustic Textures. Acoustic Textures, defined in the Acoustic Texture Editor, represent material properties. During execution of the plug-in, the four absorption bands (Low, Mid Low, Mid High, and High) of each texture translate into four frequency band attenuations.
When more than one Acoustic Texture is applied, band absorption coefficients are combined, as if the signal was successively filtered. This effectively simulates reflections resulting from hitting multiple surfaces.
Default Reflect Mapping of Frequency Absorption Bands
Low: < 250 Hz
Mid Low: > 250 Hz and < 1,000 Hz
Mid High: > 1,000 Hz and < 4,000 Hz
High: > 4,000 Hz
It is Possible to Change Reflect's Default Frequency Absorption Band Values | |
---|---|
The default Reflect values for frequency absorption can be changed, but this should only be needed in very particular scenarios. To do so, directly edit the |
In order to use Reflect for 3rd-person sounds, it needs to run on
an instance of the bus that is associated with this emitter. See
3D Busses and
AK::SoundEngine::SetGameObjectAuxSendValues()
for more details. You may use the services of AK::SpatialAudio
to help set up bus instances accordingly.
Reflect comes with a simple set of parameters that you may use to tweak the resulting reflections.
Reflections are panned, filtered, and delayed versions of the downmixed input signal. The delay time is influenced by the game-driven image source's distance and Reflect's Speed of Sound. Filtering and volume scaling depend on the image source's distance and diffraction coefficient evaluated against its various curves. Filtering is also affected by the image source's Acoustic Texture(s).
Tip | |
---|---|
Distance attenuation curves simulate air absorption and energy decay. |
Image sources may also be given a diffraction coefficient. It will normally be zero if the reflection is specular, but will be non-zero when they need to bend around the edge of their reflecting surface in order to reach the listener. Such a reflection would typically be lower in amplitude and filtered. Reflect exposes curves that let you tweak these parameters against the diffraction coefficient. See Spatial Audio Concepts - Diffraction and Geometric Diffraction of Early Reflections for more details on diffraction, how it interacts with early reflections, and how this can be simulated by AK::SpatialAudio
.
In rare cases, you might be able to hear phasing artifacts when two or more image sources have very similar distances. The Reflect plug-in includes two tools you can use to reduce phasing:
Use decorrelation filters, which slightly alter (decorrelate) audio signals that originate from the delay line taps. Because each signal differs slightly from the others, phasing is less likely to occur when the signals are mixed.
Modify Direct Sound Time. This tool fuses image sources with delay times within a user-defined value into a single logical image source. Multiple images are therefore not rendered, so phasing artifacts are less likely to occur. However, fusing only mitigates phasing of reflections with the direct path; it does not help when reflections interfere at larger delays.
Each tool has its own costs and benefits: fusing uses a relatively small amount of CPU resources but has limited use, whereas decorrelation is a more complex approach but yields a broader reduction in phasing in general.
Interface Element |
Description | |||
---|---|---|---|---|
Name |
The name of the Effect instance. Effect instances are a group of effect property settings. They can be one of two types: custom instances or ShareSets. Custom instances can be used by only one object, whereas ShareSets can be shared across several objects. | |||
Displays the object's color. Clicking the icon opens the color selector. Select a color to apply it to the object. When you choose a color for an object, a palette icon appears on the selected square, as well as a yellow triangle in the lower-right corner, as shown. To inherit the parent object's color, select the square at the far left of the color selector. | ||||
Inclusion |
Determines whether the element is included in the SoundBanks when they are generated. When selected, the element is included. When unselected, the element is not included. To optimize your sound design for each platform, you might want to exclude certain elements on certain platforms. By default, this check box applies across all platforms. Use the Link indicator to the left of the check box to unlink the element. Then you can customize the state of the check box per platform. When this option is unselected, the property and behavior options in the editor become unavailable. Default value: true | |||
Indicates the number of elements in your project that contain direct references to the object. The icon is displayed in orange when references to the object exist, and in gray when no references exist. Selecting the button opens the Reference View with the object's name in the References to: field. | ||||
Notes |
Additional information about the Effect. | |||
Metering |
Indicates the name of the object currently being metered. | |||
Allows you to browse for other objects to meter.
| ||||
Sets the display of the Effect Editor's selected tabs. By default, there is one panel displaying only one selected tab. You can, however, click a splitter button to split the panel into two, either side by side or one on top of the other, for two different tabs. The currently selected option is highlighted with a background color.
|
General | ||||
Speed Of Sound |
Units per second. The units correspond to the distance units used by the game and sent to Reflect. The speed of sound in air is ~340 m/s. If your game’s units are centimeters, you should use a value of approximately 34,000(cm)/s. Image source delay time is calculated as distance divided by speed of sound. Note: Small speed of sound or large image source distance values can cause long delay times, which in turn correspond to high memory usage. High memory usage can cause CPU spikes. Default value: 345 Range: 0.001 to 2147483648 | |||
Distance Warping |
Emphasize or de-emphasize the effect of distance on image sources. Distance values are warped to a higher or lower value between 0 and the curve’s max distance with a bilinear transform. Changing the distance warping value modifies the appearance of the plug-in’s distance-driven curves accordingly. This helps to visualize the effect. Default value: 0 Range: -100 to 100 | |||
Diffraction Warping |
Emphasize or de-emphasize the effect of diffraction on image sources. Diffraction percentages are warped to a higher or lower value between 0 and 100 with a bilinear transform. Changing the diffraction warping value modifies the appearance of the plug-in’s diffraction-driven curves accordingly. This helps to visualize the effect. Default value: 0 Range: -100 to 100 | |||
Distance Smoothing |
A smoothing filter applied to the reflection ray distance sent to the delay line. More smoothing will cause reflection times to update more slowly, but it also limits the Doppler pitch shift caused by movement. The normalized value is between 0 and 1 and will not be updated if the reflect length/delay is actively changing. This parameter can be controlled by RTPCs and States; but, updating of the RTPC or State during game play is not recommended. Real-time updates are honored but not guaranteed to be handled without artifacts. Default value: 0.5 Range: 0 to 1 | |||
Smoothing Type |
Defines the shape of the smoothing filter response over time. The curve icons for IIR and FIR indicate how the filter will shape sudden changes in ray distance. Default value: IIR | |||
Threshold Mode |
Continous mode allows for a maximum tolerable Doppler pitch shift caused by movement. If movement is fast enough to exceed the threshold, the volume of the reflection will be ducked until the pitch returns to below the threshold. A threshold of 0 will cause the volume of the reflection to be ducked any time movement occurs. Step mode allows for a distance threshold ‘bubble’, where reflections are not updated until a minimum amount of displacement occurs. A threshold of 0 will cause Reflect to crossfade between the old and new reflections whenever movement occurs. Crossfading will result in time stretching effects that do not modify pitch. Default value: Continuous | |||
Pitch Threshold |
When in continuous threshold mode, sets the maximum allowable Doppler pitch shift (in cents) before ducking reflection volume. When set to 0, reflection’s volume are ducked with movement. This value will not be updated if the reflect length/delay is actively changing. This parameter can be controlled by RTPCs and States; but, updating of the RTPC or State during game play is not recommended. Real-time updates are honored but not guaranteed to be handled without artifacts. Default value: 2400 Range: 0 to 9600 | |||
Distance Threshold |
When in step threshold mode, sets the minimum change in ray distance (in game units) needed to update the reflection delay time. When set to 0, reflections are crossfaded with movement. This value will not be updated if the reflect length/delay is actively changing. This parameter can be controlled by RTPCs and States; but, updating of the RTPC or State during game play is not recommended. Real-time updates are honored but not guaranteed to be handled without artifacts. Default value: 0 Range: 0 to 2147483648 | |||
Direct Sound Max Delay |
Image source delay (ms) under which image source reflections are fused with the direct sound. This suppresses phasing artifacts between reflections and the direct sound, such as those that might occur when the emitter and listener are both near a surface. The default value of 20 ms typically removes most audible interference with the direct path. However, the ideal value depends on the sound’s frequency content. Default value: 20 Range: 0 to 1000 | |||
Decorrelation Strength |
Sets the aggressiveness of the decorrelation filter’s phasing mitigation. As the strength increases, phasing decreases. However, greater strengths are more likely to add coloration to the output signal. Default value: 0.0 Range: 0 to 100.0 | |||
Decorrelation Mode |
Sets the mode of the decorrelation filter’s phasing mitigation to either:
Default value: Favor Performance | |||
Widen Stereo Field |
When enabled, the decorrelation filter is used to widen stereo image fields. The amount by which the width increases depends on the Decorrelation Strength. To enable this feature, Spread must be set to a value greater than 0 in the Distance Spread curve. Note, Reflect consumes more memory and CPU when this option is enabled. Default value: false | |||
Center % |
Center % used for 3D positioning. Refer to the Positioning Tab: Audio and Auxiliary Busses for more details on how Wwise handles Center% with 3D positioning. Default value: 100 Range: 0 to 100 | |||
Output Config |
Reflect is an out-of-place Effect, meaning that it has the ability to output a signal in a different channel configuration than its input. Output Config lets designers choose the channel configuration on which early reflections are spatialized. If the value is Parent Bus, Reflect queries and uses the bus configuration of the parent of the bus on which it is inserted. Note that if the output configuration is Audio Objects, Reflect will output one Audio Object per early reflection. This can represent a substantial number of Audio Objects. We recommend setting the Output Config to a spatialized configuration other than Audio Objects. Default value: Parent Bus | |||
Output Level |
The volume level (dB) of the wet signal . Default value: 0 Range: -96 to 24 | |||
Monitoring List | ||||
Filter |
Type anything that matches, in whole or in part, a game object's Name or ID content. Both the Monitoring List table and the curves cursors in the graph view will only display the matching image sources. | |||
|
Clears the Filter field and thereby displays all image sources on which Reflect applies in the columns below and the associated graph curves. | |||
Controls the Mute and Solo states for the image source and shows its implicit mute and solo states. Muting an image source silences it for the current monitoring session. Soloing an image source silences all the other image sources in the current instance of Reflect. A bold M or S indicates that the Mute or Solo state has been explicitly set for the image source. A non-bold M or S with faded color indicates that the image source's Mute or Solo state was implicitly set from another image source state.
| ||||
Image Source ID |
An identification number associated with the image source. This is a unique number assigned by the game. | |||
Image Source Name |
The name of the image source. | |||
Game Object ID |
An identification number associated with the game object. This is a unique number assigned by the game. | |||
Game Object Name |
The name of the game object. | |||
Textures |
The name (or ID, if name not found) of the Acoustic Texture(s) on which the sound is reflected. More than one texture is listed for each reflection order.
| |||
Distance |
The distance in game units between the image source and the listener. This value is used to evaluate the image source curves that are based on distance. | |||
Level |
The gain of the sound emitted by the image source. This level can be set by the user with the AkImageSourceParams or controlled by Spatial Audio according to the diffraction angle caused by edge reflection. In the latter case, its value will be 1 when the reflection is specular and 0 when the reflected direction is parallel to the surface. | |||
Diffraction |
In the case of view zone diffraction, this is the angle between the specular direction and the reflected direction. In the case of shadow zone diffraction, this is the angle between the shadow zone boundary and the reflected direction. | |||
Delay |
The current value of the delay, in milliseconds, after distance smoothing is applied.
| |||
Current Pitch |
When in continuous threshold mode, the current Doppler pitch shift (in cents) caused by changing reflection distance. | |||
Displacement |
When in step threshold mode, the accumulated displacement away from the current reflection length that has yet to be applied. Resets to 0 when the distance threshold is exceeded. | |||
Attenuation Name |
The name of the attenuation associated with the image source. If there are no associated attenuation, this column will show 'None'. If the information about attenuation could not be retrieved, because the ER Aux Bus was not set to an Audio Objects configuration, the column will show 'Unknown'. If all the curves of the Reflect effect are set to Custom, the attenuation information will not be fetched and the column will show 'None'. | |||
(Image Source Graph View) |
A graphical representation of the relationship between the curve driver (X axis) and an image source property value (Y axis). The graph view can display several curves simultaneously. When using the distance and diffraction warping properties, corresponding curves will warp in the graph view. Custom curves will show an editable non-warped curve alongside its warped counterpart. | |||
Attenuations > |
A contextual menu button allowing the user to switch between attenuations that could be associated to image sources using this reflect effect. Attenuations applied to sounds with an early reflections Auxiliary Bus mounted with the current reflect effect will appear in this button. While profiling, any attenuation that appeared in the Attenuation Name column of an image source will also be added to the list. | |||
(Attenuation Caption) |
When an attenuation is selected from the Attenuations > button, it's name will appear in the attenuation caption. Clicking on this caption will open the corresponding attenuation editor. | |||
Cursor Name Category |
A list to specify the parameter flag to display (or not) in the graph view:
| |||
X |
The coordinate along the X axis of the selected control point. The X value represents the value of a selected Distance or Diffraction depending on the curve driver. If more than one control point is selected, the field displays a value of 0, so that you can increase or decrease the value of all selected control points relative to their current values. For example, if you select two control points and move the X slider -5, both control points will move to the left by 5 units. | |||
Y |
The coordinate along the Y axis of the selected control point. The Y value represents a property value (Distance Attenuation volume in decibels, Distance Spread in percentage, or Low/High-Pass Filter in Hertz). If more than one control point is selected, the field displays a value of 0, so that you can increase or decrease the value of all selected control points relative to their current values. For example, if you select two control points and type 5 in the Y text box, both control points will move up by 5 units. | |||
Zooms in towards the center of the graph view. | ||||
Resets the graph view to the default zoom factor ratio of 1:1. | ||||
Zooms out from the center of the graph view. | ||||
Max Distance |
Max distance for distance-driven curves set to Custom, in game units. Default value: 1000 Range: 1 to 2147483648 | |||
(Pinned/Unpinned) |
When the Pin icon is selected, the property curve's outline remains in the graph view even if it is not currently selected. | |||
Color |
A color block legend for distinguishing the different graph view curves. | |||
Properties |
Reflect image source curves, which appear in the graph view if selected.
| |||
Curve |
The curve used for the corresponding property.
|
Questions? Problems? Need more info? Contact us, and we can help!
Visit our Support pageRegister your project and we'll help you get started with no strings attached!
Get started with Wwise