Reflect

(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.

Setting up Reflect in a Wwise project

  1. Add an Auxiliary Bus for early reflections:

    1. In the Project Explorer, right-click the bus under which you want to create an early reflections Auxiliary Bus.

    2. 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] Note

      These Presets are only available when Reflect is installed and Reflect Factory Presets have been added to your project. If they haven't, you can add them at any time using the Project > 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.

  2. Configure the sounds that you want to be reflected:

    1. 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.

    2. 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.

    3. 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:

      1. Select Listener Relative Routing.

      2. Set 3D Spatialization to Position + Orientation.

      3. Add an attenuation in the Attenuation group.

  3. Configure the Effect in the Reflect Effect Editor:

    1. 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.

    2. 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.

    3. 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.

  4. Ensure you have a license for the Reflect plug-in.

  5. Generate SoundBanks.

Characteristics of the Reflect Auxiliary Bus

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] 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] 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.

Intended Reflect Workflow

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.

Setting up Reflect with Spatial Audio

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.

  1. Ensure Reflect is registered by including AK/Plugin/AkReflectFXFactory.h.

  2. Include the Spatial Audio header file: AK/SpatialAudio/Common/AkSpatialAudio.h.

  3. 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 );
    
  4. 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 );

Setting up Reflect without Spatial Audio

After Setting up Reflect in a Wwise project, you need to set it up on the game side.

  1. Ensure Reflect is registered by including AK/Plugin/AkReflectFXFactory.h.

  2. Include the Reflect header file: AK/Plugin/AkReflectGameData.h.

  3. You may also need to add AkReflectFX.lib to your executable's input libraries.

  4. 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));
  5. Send a new AkReflectGameData when you need to update the position of the image sources.

Acoustic Textures

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

[Tip] 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 %Wwise%\Authoring\x64\Release\bin\plugins\AkReflect.xml file by changing the Default Value for the BaseTextureFrequency. This defines the new default Low band; the other bands successively increase by two octaves.

Using Reflect to simulate reflections for 3rd person sounds

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.

Tweaking Reflect settings

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] Tip

Distance attenuation curves simulate air absorption and energy decay.

Working with Diffraction

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.

Reflect Properties

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 or excluded. When selected, the element is included. When unselected, the element is not included. By default, this applies across all platforms. Use the Link indicator (to the left of the check box) to determine or to set platform-specific customizations.

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.
[Note] Note

The metering interface elements only appear in the Effect Editor for Effects that include VU meters.

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.

[Note] Note

You cannot display the same tab in both panels. If you select the tab that is currently displayed in the other panel, then the other panel will automatically display another tab.

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 about 34,000(cm)/s.

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

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.

[Note] Note

Mute and Solo are designed to be used for monitoring purposes only and are not persisted in the project or stored in the SoundBanks.

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.

[Note] Note

When reflection paths are diffracted by the presence of an object blocking the way, (Edge) will appear for each of the edge diffracted on.

Distance

The distance in game units between the image source and the listener.

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:

  • No Flag

  • Image Source ID

  • Image Source Name

  • Game Object ID

  • Game Object Name

  • Texture(s)

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

(Pin/Unpin)

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.

  • Distance Volume: Volume attenuation based on the distance between the image source and the listener.

  • Distance Low-pass Filter: First order low-pass filter based on the distance between the image source and the listener.

  • Distance High-pass Filter: First order high-pass filter based on the distance between the image source and the listener.

  • Distance Spread: Spread used for 3D positioning, based on the distance between the image source and the listener. Refer to the Wwise Help's How 3D positioning is calculated: for more details on how Wwise handles Spread with 3D positioning.

  • Diffraction Volume: Volume attenuation based on the diffraction coefficient of this reflection. In order to ensure smooth interpolation between specular and diffracted reflections, you should make sure that the value is 0 dB at 0% diffraction.

  • Diffraction Low-pass Filter: First order low-pass filter based on the diffraction coefficient of this image source. In order to ensure smooth interpolation between specular and diffracted reflections, you should make sure that the value is highest (no filtering) at 0% diffraction.

  • Diffraction High-pass Filter: First order high-pass filter based on the diffraction coefficient of this image source. In order to ensure smooth interpolation between specular and diffracted reflections, you should make sure that the value is lowest (no filtering) at 0% diffraction.

Curve

The curve used for the corresponding property.

  • Use Attenuation: The corresponding property curve will use the attenuation curve of the same property and driver.

  • Custom: The corresponding property will use a custom curve, which can be edited in the graph view, if selected.