CRI Atom Craft ストリーミングタイプを設定する/第2回
こんにちは。
G2 Studios アートチーム サウンド設計担当のサキサキです。
前回は、CRI Atom Craftを使ったサウンドデータ作成について一連の流れをざっくりとご紹介しました。
今回は一歩踏み込んだところ...
「ストリーミングタイプの設定」についての内容をご紹介したいと思います。
ゲーム再生上の「CPU消費」「メモリ消費」といったパフォーマンス調整部分に関係してくる大事なところですので、サウンドの組み込みについてこれから勉強を始める方には特に必見の内容ではないかと思います。
実を言うと、もう1つ「エンコーディングタイプの設定」についても本記事内に含めたかったのですが、思った以上に内容量があることに気づいたため、そちらについては次回以降にしたいと思います。
では、始めましょう!
■ストリーミングタイプとは
「ストリーミングタイプ」は音声素材をどのように転送し再生させるか、その方式を設定する項目です。
広くよく知られているものとしては「オンメモリ再生」「ストリーム再生」と呼ばれるものがあり、中には「なんとなく聞いたことがある」という人もいらっしゃるのではないでしょうか。
せっかくの機会ですので、AtomCraftでの作業に入る前準備として、上記2種の再生方法について説明したいと思います。
<広くよく知られているストリーミングタイプ>
どうでしょう、どちらのストリーミングタイプにも長所・短所があり、また「CPU消費」と「メモリ消費」が常に天秤にかけられた状態であることが何となく理解できたのではないでしょうか。
CPU消費を抑えればメモリ消費が上がり、メモリ消費を抑えればCPU消費が上がる、八方塞がり感が否めない内容ですよね(笑)。
正直、思ったよりも濃い内容だなと今更ながらに感じてしまいました…。
■ストリーミングタイプの種類と特徴(AtomCraft)
「オンメモリ再生」「ストリーム再生」について理解を深めたところで、それらをAtomCraft内で実際にどう扱うのかを見ていきましょう。
まず、AtomCraftの「ストリーム再生」は端末内におけるストレージとメモリ間でのストリームを意味します。そして、AtomCraft上で設定できるストリーミングタイプは、「デフォルト」「メモリ」「ストリーム」「ゼロレイテンシストリーム」の4種類になります。
「あれ?さっきの2種類だけじゃないの?」と思ってしまいますよね。
大丈夫です!
先の内容さえ理解していれば何の問題もありませんので、順を追って説明していこうと思います。
<AtomCraftにおけるストリーミングタイプ>
ここで特筆するものとしては、「ゼロレイテンシストリーム」という名前からして何か凄そうなストリーミングタイプが追加されているところでしょうか。
名称そのものの世間的な定着はやや浅い感じが否めませんが、技法としてはこれまでも広く用いられてきたものではあります。
簡単な解釈の仕方としては「遅延のない(ゼロレイテンシ)ストリーム再生」ということになり、ゲーム制作時にそういったシチュエーションが必要な場合に有効な設定になります。
その他のものは... まぁ、そのまま名前通りの設定になる形ですね。
■どのストリーミングタイプを選ぶか
ここまでの内容を踏まえた上で「結局のところ、どの設定にすれば良いのか」ということに言及したいと思います。
私が言えることは、「答えは決して一つではない。」ということです。
「企業秘密だから言わない」というのではありません(笑)。
実際、私はこれまで多くのゲーム制作に携わってきましたが、全てが同じ設定であったことは一度としてありませんでした。
恐らく、これからもないのではないかと思ってます。
それは、プロジェクトごとに制作内容が異なりますし、その中での要望や拘りにも違いが出てきますので、それぞれに合ったストリーミングタイプを設定することが現場では常に求められるようになってくるからです。
これらの選択については、各ストリーミングタイプの長所・短所を正しく理解し、企画仕様や開発設計をもとに関係者同士ですり合わせをしながら決定することで、結果的に理想の形に辿り着くのものであると考えます。
AtomCraft自体が優秀なので、「ストリーミングタイプ」の設定そのものはいつでもどうにでも容易に出来るかとは思いますが、ゲーム制作においては「何故そうする必要があるのか」という理由を踏まえた上で設定することが大切になってきます。くれぐれも自身の判断のみで作業を進めたりしないようにしましょう。
■ストリーミングタイプの継承(AtomCraft)
AtomCraftを使っての実作業に入る前にもう一点だけ、前述にもあった「ストリーミングタイプの継承」について深堀りしておこうと思います。
ストリーミングタイプの設定は当該マテリアルよりも上位の設定から順に引き継がれる(継承される)形になりますが、設定内容の反映についての優位性はその逆になります。
<ストリーミングタイプの継承順位と反映の優位性>
つまり極端な話、一番下位にある「マテリアル」そのものに個別のタイプを直接設定すれば、どんなに上位にある「ターゲットコンフィグ」「マテリアルルートフォルダ」「マテリアルサブフォルダ」で別のストリーミングタイプを設定していたとしても、優先してその内容が反映されるようになるわけです。
この構造を理解していると、今後、何百 or 何千 or 何万 の音声ファイルにストリーミングタイプを設定する必要性が出てきたとしても、慌てることなく柔軟な対応ができるようになりますのでしっかりと抑えておきましょう。
■ストリーミングタイプを設定する(AtomCraft)
設定内容が決まったら(かなり強引ですが、ここでは決まったことにして...)、実際にAtomCraft上で設定してみましょう。
今回は以下に記載した内容でサウンドデータを作成しようと思います。
-----
それでは、AtomCraftを起動し、作業を始めるための準備を行います。(プロジェクトの展開についてはこちら)
<手順①>
予め用意した「Bgm_StreamingType_Memory.wav」「Bgm_StreamingType_Stream.wav」「Bgm_StreamingType_ZeroLatencyStream.wav」の3つの音声ファイル(*ファイル名は仮)をマテリアルツリーにドラッグ&ドロップ、登録します。
(*ここでの音声ファイルは、インターネット上にあるフリー素材など使用に差支えのないものをご利用いただければと思います。自己責任でお願いします。)
<手順②>
マテリアルルートフォルダ直下にマテリアルサブフォルダ「Bgm」を作成し、先の3ファイルを移動&格納します。
<手順③>
マテリアルサブフォルダ「Bgm」のストリーミングタイプを「デフォルト」に設定し、上位であるマテリアルルートフォルダのストリーミングタイプ(*初期値:デフォルト)を継承します。
<手順④>
マテリアル「Bgm_StreamingType_Memory.wav」を選択し、ストリーミングタイプに「デフォルト」を設定し、上位であるマテリアルサブフォルダ「Bgm」のストリーミングタイプを継承します。
(*今回の場合、ストリーミングタイプに「メモリ」を設定しても問題ありません。)
<手順⑤>
マテリアル「Bgm_StreamingType_Stream.wav」を選択し、ストリーミングタイプに「ストリーム」を設定。
<手順⑥>
マテリアル「Bgm_StreamingType_ZeroLatencyStream.wav」を選択し、ストリーミングタイプに「ゼロレイテンシストリーム」を設定し、プリフェッチ時間(msec)のところにあるチェックボックスにチェックを入れ、「200」の値を設定します。
<手順⑦>
マテリアル「Bgm_StreamingType_Memory.wav」「Bgm_StreamingType_Stream.wav」「Bgm_StreamingType_ZeroLatencyStream.wav」の3つを選択し、ワークユニット上「キューシートフォルダー」下位の任意の場所にドラッグ&ドロップします。
作業は以上となります。
上手くデータ作成はできましたでしょうか。
今回の場合、ターゲットコンフィグ上のストリーミング設定が「メモリ(*初期値)」であることを前提とした作業内容となっています。
仮にこちらの設定値がそれ以外の「ストリーム」「ゼロレイテンシストリーム」である場合、それより下位にあるストリーミングタイプに「デフォルト」を設定したものについて上記の対応方法が微妙に変化してきますので、注意するようにしてください。
なんだかんだ、いろいろ触って何がどう変わるのか確かめてみるのが一番理解が早いかと思います。
今回のnoteは以上となります。
■まとめ
AtomCraftにおける「ストリーミングタイプ」の設定方法はさほど難しい内容ではありません。
一番難しく、そして大事なのは「どういった効果を得ようとしてその設定にするのか」というところになります。
より良い設定を行うためにはより多くの情報が必要になり、必要な情報を集めるためには関係者間でのコミュニケーションが必要となってきます。
先ずは情報集めから始めましょう!
次回は、「エンコーディングタイプの設定」について説明したいと思います。