見出し画像

第12回/カテゴリキューリミットを設定してみる

こんにちは。
G2 Studios サウンドチームのサキサキです。

今回は前回記事で触れた「カテゴリ」に紐づく機能「カテゴリキューリミット」についてご紹介いたします。
カテゴリの設定を前提とした機能のため、設定方法を未修得の方は先にこちらをご一読いただければと思います。

それでは進めていきましょう。


■作業環境

-----
<作業環境>
 Windows :Windows 10 Pro
 CRI SDK :criware_sdk_unity_v3_09_01_smartphone_ja
-----

■カテゴリキューリミットとは

「カテゴリキューリミット」は、同じカテゴリに属するキューについて、同時に再生できる数を指定する(=同時発音数を制御する)機能です。

ワンポイント豆知識

CRI Atom Craftには、カテゴリキューリミット以外にも「ボイスリミットグループ」、「キューシートのキューリミット」、「キューリミット」といった、同時発音数の制御機能があります。
制御の対象となる箇所がそれぞれ異なっており、要件に合わせて使い分けたり上手く組み合わせたりします。
(それらについては、またどこかのタイミングでご紹介できればと考えてます。)

■カテゴリキューリミットの用途

カテゴリキューリミットの用途には、以下のようなものがあります。
-----
<カテゴリキューリミットの用途例>
・ゲームそのものの仕様として発音数に制限をかける
 (例)Bgmは1シーン内において複数種の切り替えが可能だが、2曲以上の重複して再生はできない …など
・音の重なりによる音量上昇や音割れを防止する
・音の重なりによる個々の音の聞き取りにくさを解消する
・同キャラクターのボイスが重複して再生されるのを回避する
-----

■カテゴリキューリミット数の指定

カテゴリキューリミットに設定する値のことを「カテゴリキューリミット数」と呼び、「1~255」の整数値で指定ができます。

■同時発音数の制御タイミング

同時発音数の制御は、対象のカテゴリに属するキューがカテゴリキューリミット数を超えてリクエストされたタイミングで行われます。
例えば、あるカテゴリのカテゴリキューリミット数を「2」と設定した場合、そのカテゴリに登録されているキューは最大で2つまでしか同時に発音できなくなり、3つ目のキューがリクエストされたタイミングで制御が行われる、といった具合です。

■条件設定による制御

同時発音数の制御はいくつかの機能設定(=条件設定)と紐づいて行われ、その内容によりどのキューが 停止/再生 するかが変わってきます。
では、どういった機能があるか見てみましょう。
-----
・カテゴリキュープライオリティレベル

概要:同時発音数の制御時における優先度を指定します。
   値の大きいキューほど優先されます。
設定オブジェクト:キュー
設定値:0~255(整数型)
初期値:0
-----
・カテゴリキュープライオリティタイプ

概要:同時発音数の制御時に、先に再生されているキューを優先するか、後からリクエストされるキューを優先するかを指定します。
設定オブジェクト:キュー
設定値:先着優先、後着優先
初期値:後着優先
-----
・キュープライオリティ近距離優先

概要:立体音響(※3D立体空間において方向や距離、拡がりを持つ音群)の実装を前提とした機能で、同時発音数の制御時に、よりリスナーに近い座標にある音源で再生されているキューが優先されます。
設定オブジェクト:カテゴリ(※「全体設定」内)
設定値:True、False
初期値:False
-----
上記機能の優位性は次の通りです。

カテゴリキュープライオリティレベル > キュープライオリティ近距離優先 > カテゴリキュープライオリティタイプ

もしこれらを設定しない場合には、古いキューが停止し、新しいキューが再生される形になります。
これは、各機能に予め設定されている初期値が反映され、「カテゴリキュープライオリティレベル」「キュープライオリティ近距離優先」は各キューで同じ内容のため相殺となり、残る「カテゴリキュープライオリティタイプ=後着優先」が作用した結果であると言えます。

■CRI Atom Craftでカテゴリキューリミットを設定してみる

それでは、CRI Atom Craftでカテゴリキューリミットを設定してみましょう。

作業用に3つのサンプル音源「Env_Battlefield_01.wav」「Env_Battlefield_02.wav」「Env_Battlefield_03.wav」を用意しました。
※こちらは私が作成したものですので、商用でも何でも自由にご利用いただいて大丈夫です。

ゴール条件は以下の通りとします。
前提として、「カテゴリキュープライオリティレベル」「キュープライオリティ近距離優先」「カテゴリキュープライオリティタイプ」は設定せず、初期値のままとします。
-----
<ゴール条件>
・カテゴリ「Env(環境音)」を作成し、カテゴリキューリミット数を「2」に設定する

・3つのサンプル音源についてそれぞれのデータを作成(=キューシート&キューの作成)し、作成されたキューにカテゴリ「Env」を設定する

・名称の語尾の数値が若いキューから順に再生し、3つ目のキューがリクエストされたタイミングで、1つ目のキューが停止することを確認する
以降、これらキューのうちのいずれかをリクエストするたびに、古いキューが停止し、新しいキューが再生されることを確認する
-----
補足になりますが、本来、用意された3つの音源を同時に再生すると、次のサンプル音源のような「ガンゲームのバトルフィールド」を模した音になります。

今回は同時発音数の上限を「2」に設定するため、この形にならないようにするのがゴールということになります。
ちょっと紛らわしいですね(笑)

CRI Atom Craftを起動し、作業を始めるための準備を行います。
先に提示したサンプル音源はこのタイミングでインポートしておきましょう。
※キューシートやキューの作成など、基本的なサウンドデータの作成方法についてはこちら

<手順①>
全体設定にカテゴリ「Env」を作成します。 
カテゴリグループは、新規作成でも既存のものを利用する形でもどちらでも大丈夫です。
※カテゴリの登録方法についてはこちら

<手順②>
カテゴリ「Env」を選択し、インスペクター上にある「カテゴリキューリミットフラグ」を「True」に設定します。
さらに「カテゴリキューリミット数」を「2」に設定します。

<手順③>
マテリアルツリーにある該当マテリアル(3つ)をワークユニットツリー上にドラッグ&ドロップし、キューシート&キューを作成します。

<手順④>
作成されたそれぞれのキューにカテゴリ「Env」を設定します。

<手順⑤>
最後に、意図通りの音が鳴るか確認します。
ゴール条件の3つ目に挙げた内容(※下記)と同じ形で音が鳴るのを確認できれば、CRI Atom Craftにおける作業は完了となります。

・名称の語尾の数値が若いキューから順に再生し、3つ目のキューがリクエストされたタイミングで、1つ目のキューが停止することを確認する
 以降、これらキューのうちのいずれかをリクエストするたびに、古いキューが停止し、新しいキューが再生されることを確認する

■実装における注意点

カテゴリキューリミットの設定における注意点をいくつか挙げておきたいと思います。
-----
・必要なものの見極め
カテゴリキューリミットは各カテゴリごとに設定できますが、常に全てのものに必要であるとは限りません。
なんとなくで設定してしまうと後々の弊害になることもありますので、本当に必要なものにのみ設定するようにしましょう。

・できること、できないことの区別
カテゴリキューリミットはゲームにおける音の呼び出しロジックそのもの(ゲームの進行状況や展開、演出設定に応じて再生する音を決定する仕組み)を構築する機能ではありません。
もちろん、カテゴリの追加やその他の同時発音数の制御、プライオリティなどの設定を駆使すれば、そういったものに近い動作をさせることはできますが、非常に困難を強いられる内容になってきます。
その為、サウンドデザイナー側でしっかりと機能把握をし、できることとできないことを区別できるようにしておくことが大切です。

・リリース付き音声の発音範囲
エンベロープのRelease(リリース)箇所に値設定のある音声については、リミットに伴う発音の停止時に当該箇所を含めたところまでが発音されます。
※「エンベロープ」についての過去記事はこちら

波形の状態にもよりますが、この仕組みを上手く利用することで、停止する音声の発音が急に途切れるような挙動を回避することもできるようになります。 
カテゴリキューリミットを設定の際には、エンベロープの設定有無とその必要性についても併せて確認することをお勧めします。
-----

■まとめ

「カテゴリキューリミット」は、同時発音数の制御を行うことで音の聞こえをコントロールし、ユーザー体験を向上させる役割を持つ機能です。
一見して“地味な機能”であり“分かりづらい機能”である印象を持たれがちですが、ゲーム開発経験を積めば積むほど、サウンド設計に慣れれば慣れるほど、その必要性に気づかされるのではないかと思います。
この機会に是非マスターしてしまいましょう。

今回のnoteは以上となります。

▼サウンドマガジンはこちら

▼G2 Studiosについてはこちら

▼最新情報はX(Twitter)でご確認ください!


X(Twitter)にて最新のお知らせを配信しております。ぜひフォローしてください!