{"id":3237,"date":"2021-01-19T17:07:48","date_gmt":"2021-01-19T08:07:48","guid":{"rendered":"https:\/\/blog.criware.com\/?p=3237"},"modified":"2021-01-19T17:07:48","modified_gmt":"2021-01-19T08:07:48","slug":"ambience-design-part-2","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2021\/01\/19\/ambience-design-part-2\/","title":{"rendered":"Ambience Design Part 2"},"content":{"rendered":"<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Introduction<\/h2>\n<p>In this series, we will be looking at designing powerful and efficient systems for ambient playback. In our <a href=\"https:\/\/blog.criware.com\/index.php\/2020\/12\/14\/ambience-design-in-atom-craft-part-1-2\/\">last installment<\/a>, we created a monolithic Cue packed with playback logic. With only a single call event in our game engine, we achieved easy playback with a fair amount of randomization.<\/p>\n<p>In this blog, we will create spatialized sounds that will tangibly exist in the game world. By activating 3D processing and using AISAC to dynamically control DSP effects based on the distance between the source and listener, we can dramatically increase the quality and immersion of our 3D environments.<\/p>\n<div style=\"max-width: 800px; margin: 0 auto; margin-bottom: 20px;\">\n<div style=\"width: 800px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3237-1\" width=\"800\" height=\"450\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2.mp4?_=1\" \/><a href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2.mp4\">https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2.mp4<\/a><\/video><\/div>\n<\/div>\n<p><\/p>\n<div style=\"max-width: 800px; margin: 0 auto; margin-bottom: 20px; text-align:center;\"><a style=\"display: inline-block; border: 1px solid #ccc; padding: 20px;\" href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021_01-AmbienceP2.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1813\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2018\/06\/zip.png\" alt=\"zip\" width=\"80\" height=\"78\" style=\"\n    display: block;\n    margin: 0 auto;\n\">2020-12_AmbienceP2.zip<\/a>\n<\/div>\n<p><em>This project was created using CRI Atom Craft Ver.3.44.13<\/em><\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">3D Audio<\/h2>\n<p>\nIn our last blog, we created a vague background ambience designed without the intention of synchronizing it to in-game visuals. This approach is great for sounds that envelop the player, like rain or birds hidden amongst the trees. For objects which the player can interact with and move around, we will need to use ADX2\u2019s 3D Positioning feature.\n<\/p>\n<p>\nApplying 3D playback to a Cue is as easy as switching a toggle option. In the Inspector, scroll down to <i>Pan Type<\/i> and set it to 3D Positioning. We can then enhance and tweak this 3D effect by using attenuation curves based on distance. This will make sources quieter and more muffled the further away they are. To do this, we can:\n<\/p>\n<ul>\n<li>Rename AisacControl_00 to \u201cDistance3D\u201d<\/li>\n<li>Create a new Global AISAC and name it \u201cDistance3D\u201d\n<ul>\n<li>Create a Volume Graph<\/li>\n<li>Create a Bandpass \u2013 Cutoff High<\/li>\n<li>Set AISAC Control to Distance3D for both<\/li>\n<li>Create curves roughly as below<\/li>\n<li>Drag this Global AISAC onto any Cues intended for 3D playback<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_1.png\" alt=\"2021-01_AmbienceP2_1\" width=\"956\" height=\"240\" class=\"alignnone size-full wp-image-3240\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_1.png 956w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_1-300x75.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_1-768x193.png 768w\" sizes=\"auto, (max-width: 956px) 100vw, 956px\" \/><\/p>\n<p>\nTo activate this distance-based effect, let\u2019s navigate to the 3D Positioning tab of our Cue in the Inspector. We can find a dropdown titled <i>Distance<\/i>, where we can select our Distance3D Control AISAC. We can also set the <i>Max<\/i> Attenuation Distance to determine how far away the object should be before becoming silent. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_2.png\" alt=\"2021-01_AmbienceP2_2\" width=\"469\" height=\"454\" class=\"alignnone size-full wp-image-3241\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_2.png 469w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_2-300x290.png 300w\" sizes=\"auto, (max-width: 469px) 100vw, 469px\" \/><\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Reverb<\/h2>\n<p>An essential part of an ambient soundscape design is reverb. Reverb ties all of diegetic sound together and enhances emersion by placing the ambience in context. To help us facilitate this, ADX2 offers highly customizable built-in reverb effects. <\/p>\n<p>One of our first considerations is to think about how reverb should change between levels. If the player transitions from a diffuse forest to a reflective cave, the reverb will need to adapt and update to reflect this change. We can set up a simple implementation of this in Atom Craft using Snapshots. First, let\u2019s:<\/p>\n<ul>\n<li>Navigate to <i>DspBusSetting_0<\/i>, create a new DSP Bus, and name it \u201cReverb\u201d\n<ul>\n<li>Add new I3DL2 Reverb effect to this Bus<\/li>\n<li>Right-click DspBusSetting_0 and create 2 new Snapshots\n<ul>\n<li>Name them \u201cCave\u201d, and \u201cForest\u201d<\/li>\n<li>Set the Reverb Preset to CAVE and FOREST respectively<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Navigate to <i>BusMap for AISAC and Automation<\/i> and set \u201cReverb\u201d as DspBusName2<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_3.png\" alt=\"2021-01_AmbienceP2_3\" width=\"694\" height=\"312\" class=\"alignnone size-full wp-image-3242\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_3.png 694w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_3-300x135.png 300w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/p>\n<p>Finally, we can clean up our mix and add some dynamic nuance using AISAC to control the signal being sent to the Reverb Bus based on distance. The result will mean that a sound source closer to the player will have less reverb, making it feel more intimate and nearby. Conversely, as the source gets further away, it will feel more expansive and ambient. To create our system, let\u2019s navigate back to our Distance3D Global AISAC and:<\/p>\n<ul>\n<li>Create a new BusSend2 (Reverb) Graph\n<ul>\n<li>Set AISAC Control to Distance3D<\/li>\n<li>Create a curve roughly as below<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_4.png\" alt=\"2021-01_AmbienceP2_4\" width=\"1016\" height=\"254\" class=\"alignnone size-full wp-image-3243\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_4.png 1016w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_4-300x75.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2021-01_AmbienceP2_4-768x192.png 768w\" sizes=\"auto, (max-width: 1016px) 100vw, 1016px\" \/><\/p>\n<p>We can then audition our changes using the Session view, simply using the <i>Positioning 3D <\/i>view to control all of the above AISAC logic, and toggling between our Snapshots to test the different environments. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In this series, we will be looking at designing powerful and efficient systems for ambient playback. In our last<\/p>\n","protected":false},"author":2,"featured_media":3238,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[5,7],"tags":[],"class_list":["post-3237","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adx","category-tutorials"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/comments?post=3237"}],"version-history":[{"count":4,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3237\/revisions"}],"predecessor-version":[{"id":3248,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3237\/revisions\/3248"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/3238"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=3237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=3237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=3237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}