{"id":6511,"date":"2025-11-27T13:23:33","date_gmt":"2025-11-27T04:23:33","guid":{"rendered":"https:\/\/blog.criware.com\/?p=6511"},"modified":"2025-11-27T13:23:33","modified_gmt":"2025-11-27T04:23:33","slug":"weather-control-in-adx","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2025\/11\/27\/weather-control-in-adx\/","title":{"rendered":"Weather Control in ADX"},"content":{"rendered":"<p>In most open-world games, dynamic weather is essential for creating immersive, realistic environments. In this post, we explore how to build a single-event ambient sound system that allows us to control weather changes in real time using an AISAC.<\/p>\n<div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-6511-1\" width=\"640\" height=\"360\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/blog_showcase_weather.mp4?_=1\" \/><a href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/blog_showcase_weather.mp4\">https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/blog_showcase_weather.mp4<\/a><\/video><\/div>\n<p>\n&nbsp;\n<\/p>\n<p>First, we need to create and implement the different layers of our weather system. Let\u2019s import the audio materials for the 3 distinct weather states we will use:<br \/>\n   \u2022 Soft rain, with a little breeze, and nearby water puddles<br \/>\n   \u2022 Heavy rain, with rumble from a distant storm, with more intense winds<br \/>\n   \u2022 Storm, with thundercracks and powerful winds<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-1.png\" alt=\"\" width=\"454\" height=\"322\" class=\"alignnone size-full wp-image-6512\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-1.png 454w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-1-300x213.png 300w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/p>\n<p>Then, we create a Polyphonic Cue for each one of these states. We assign a playback probability to thunder strikes on the timeline to make them feel more natural.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-2.png\" alt=\"\" width=\"828\"1656*0.5 height=\"471\" class=\"alignnone size-full wp-image-6513\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-2.png 1656w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-2-300x171.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-2-1024x583.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-2-768x437.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-2-1536x875.png 1536w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/p>\n<p>We create another Polyphonic Cue, \u201camb_weather\u201d, that will be the one called from the game. By simply dragging the previous Cues onto its timeline, we can use them as references.<\/p>\n<p>To control the weather, we create an AISAC bound to the volume for each secondary Cue and adjust the AISAC graphs to our liking so that the crossfading between the Cues sounds natural. You can either edit the curves graphically or in the Point List Editor for more accuracy.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-3-.png\" alt=\"\" width=\"1559\" height=\"528\" class=\"alignnone size-full wp-image-6514\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-3-.png 1559w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-3--300x102.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-3--1024x347.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-3--768x260.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-3--1536x520.png 1536w\" sizes=\"auto, (max-width: 1559px) 100vw, 1559px\" \/><\/p>\n<p>Finally, we place an AISAC with the same control on our main \u201camb_weather\u201d Cue.<br \/>\nThis will allow the game engine to gently transition between the weather states by using a single game parameter.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-4.png\" alt=\"\" width=\"811\" height=\"441\" class=\"alignnone size-full wp-image-6515\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-4.png 1623w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-4-300x163.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-4-1024x557.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-4-768x418.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-4-1536x836.png 1536w\" sizes=\"auto, (max-width: 811px) 100vw, 811px\" \/><\/p>\n<p>We have positioned the \u201cthunder_strikes_one_shot\u201d Random Cue at different points on the timeline because the storm crack has a random weight of 75%, which means it will not always play.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-5.png\" alt=\"\" width=\"950\" height=\"421\" class=\"alignnone size-full wp-image-6516\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-5.png 1900w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-5-300x133.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-5-1024x454.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-5-768x340.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/11\/screen-5-1536x681.png 1536w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/p>\n<p>This setup allows you to blend multiple weather layers seamlessly and create adaptive, dynamic environmental audio with smooth AISAC-driven transitions. You can easily adapt this system to your needs by adding more layers or different sound effects.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In most open-world games, dynamic weather is essential for creating immersive, realistic environments. In this post, we explore how to<\/p>\n","protected":false},"author":2,"featured_media":6518,"comment_status":"closed","ping_status":"closed","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-6511","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\/6511","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=6511"}],"version-history":[{"count":11,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6511\/revisions"}],"predecessor-version":[{"id":6530,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6511\/revisions\/6530"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/6518"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=6511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=6511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=6511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}