見出し画像

CRI Atom Craft ストリーミングタイプを設定する/第2回

こんにちは。
G2 Studios アートチーム サウンド設計担当のサキサキです。

前回は、CRI Atom Craftを使ったサウンドデータ作成について一連の流れをざっくりとご紹介しました。

今回は一歩踏み込んだところ...
「ストリーミングタイプの設定」についての内容をご紹介したいと思います。
ゲーム再生上の「CPU消費」「メモリ消費」といったパフォーマンス調整部分に関係してくる大事なところですので、サウンドの組み込みについてこれから勉強を始める方には特に必見の内容ではないかと思います。
実を言うと、もう1つ「エンコーディングタイプの設定」についても本記事内に含めたかったのですが、思った以上に内容量があることに気づいたため、そちらについては次回以降にしたいと思います。

では、始めましょう!


■ストリーミングタイプとは

「ストリーミングタイプ」は音声素材をどのように転送し再生させるか、その方式を設定する項目です。

広くよく知られているものとしては「オンメモリ再生」「ストリーム再生」と呼ばれるものがあり、中には「なんとなく聞いたことがある」という人もいらっしゃるのではないでしょうか。
せっかくの機会ですので、AtomCraftでの作業に入る前準備として、上記2種の再生方法について説明したいと思います。

 <広くよく知られているストリーミングタイプ>

オンメモリ再生
音声データを全てメモリに載せて再生する方式です。
回線状況に左右されることのない安定した再生が出来る反面、大容量データのダウンロードには多くの時間が費やされる形となります。
後述の「ストリーム再生」に比べて「CPU消費」は抑えられるものの、「メモリ消費」は上昇する形となります。

画像1

ストリーム再生
データ単位で分解した音声データを受け取り、受け取ったデータから順次再生を開始する方式です。
受け取ったデータは一旦メモリに載りますが、再生が完了するとデータ単位で破棄されるためハードディスク上に音声データが残ることはありません。
大容量データであっても再生開始までの時間を短縮させることが出来る反面、回線状況により不安定な再生となる場合が想定されます。
また、再生中にその他のデータをバックグラウンドで読み込ませる場合も、その弊害となる可能性があります。
前述の「メモリ再生」に比べて「メモリ消費」は抑えられるものの「CPU消費」が上昇する形となります。

画像2

どうでしょう、どちらのストリーミングタイプにも長所・短所があり、また「CPU消費」と「メモリ消費」が常に天秤にかけられた状態であることが何となく理解できたのではないでしょうか。
CPU消費を抑えればメモリ消費が上がり、メモリ消費を抑えればCPU消費が上がる、八方塞がり感が否めない内容ですよね(笑)。
正直、思ったよりも濃い内容だなと今更ながらに感じてしまいました…。


■ストリーミングタイプの種類と特徴(AtomCraft)

「オンメモリ再生」「ストリーム再生」について理解を深めたところで、それらをAtomCraft内で実際にどう扱うのかを見ていきましょう。

まず、AtomCraftの「ストリーム再生」は端末内におけるストレージとメモリ間でのストリームを意味します。そして、AtomCraft上で設定できるストリーミングタイプは、「デフォルト」「メモリ」「ストリーム」「ゼロレイテンシストリーム」の4種類になります。
「あれ?さっきの2種類だけじゃないの?」と思ってしまいますよね。

大丈夫です!

先の内容さえ理解していれば何の問題もありませんので、順を追って説明していこうと思います。

<AtomCraftにおけるストリーミングタイプ>

デフォルト
ストリーミング方式を直接指定する内容のものではなく、当該マテリアルが格納されている上位のディレクトリ、または「ターゲットコンフィグ(*「全体設定」に含まれる)」に設定されたストリーミングタイプを引き継ぐ(継承する)場合の設定になります。

画像3

メモリ
オンメモリ再生する場合の設定になります。
ビルド出力された音声データは「ACBファイル」の中に格納されます。

ストリーム
ストリーム再生する場合の設定になります。
ビルド出力された音声データは「ACBファイル」と「AWBファイル」の2つに分けて格納されます。

ゼロレイテンシストリーム
「ゼロレイテンシストリーム」とはメモリ再生とストリーミング再生の両方を行うハイブリッドな再生方式で、ここではその再生をする場合の設定になります。
再生時の先頭部分だけ指定秒数分(msec)のプリフェッチ(メモリ再生)を行い、ストリーミング再生に必要なバッファが確保されるとストリーミング再生に切り替わります。
再生に必要なパラメータを格納する「ACBファイル」にプリフェッチ用のメモリーデータが別途追加されるため、ファイル容量が通常のストリーム再生時に比べて大きくなります。

ここで特筆するものとしては、「ゼロレイテンシストリーム」という名前からして何か凄そうなストリーミングタイプが追加されているところでしょうか。
名称そのものの世間的な定着はやや浅い感じが否めませんが、技法としてはこれまでも広く用いられてきたものではあります。
簡単な解釈の仕方としては「遅延のない(ゼロレイテンシ)ストリーム再生」ということになり、ゲーム制作時にそういったシチュエーションが必要な場合に有効な設定になります。

その他のものは... まぁ、そのまま名前通りの設定になる形ですね。


■どのストリーミングタイプを選ぶか

ここまでの内容を踏まえた上で「結局のところ、どの設定にすれば良いのか」ということに言及したいと思います。

私が言えることは、「答えは決して一つではない。」ということです。
「企業秘密だから言わない」というのではありません(笑)。

実際、私はこれまで多くのゲーム制作に携わってきましたが、全てが同じ設定であったことは一度としてありませんでした。
恐らく、これからもないのではないかと思ってます。
それは、プロジェクトごとに制作内容が異なりますし、その中での要望や拘りにも違いが出てきますので、それぞれに合ったストリーミングタイプを設定することが現場では常に求められるようになってくるからです。
これらの選択については、各ストリーミングタイプの長所・短所を正しく理解し、企画仕様や開発設計をもとに関係者同士ですり合わせをしながら決定することで、結果的に理想の形に辿り着くのものであると考えます。
AtomCraft自体が優秀なので、「ストリーミングタイプ」の設定そのものはいつでもどうにでも容易に出来るかとは思いますが、ゲーム制作においては「何故そうする必要があるのか」という理由を踏まえた上で設定することが大切になってきます。くれぐれも自身の判断のみで作業を進めたりしないようにしましょう。


■ストリーミングタイプの継承(AtomCraft)

AtomCraftを使っての実作業に入る前にもう一点だけ、前述にもあった「ストリーミングタイプの継承」について深堀りしておこうと思います。

ストリーミングタイプの設定は当該マテリアルよりも上位の設定から順に引き継がれる(継承される)形になりますが、設定内容の反映についての優位性はその逆になります。

 <ストリーミングタイプの継承順位と反映の優位性>

継承順位
ターゲットコンフィグ >マテリアルルートフォルダ(デフォルト) >マテリアルサブフォルダ(デフォルト)>マテリアル

反映の優位性
マテリアル >マテリアルサブフォルダ(デフォルト) >マテリアルルートフォルダ(デフォルト) >ターゲットコンフィグ

つまり極端な話、一番下位にある「マテリアル」そのものに個別のタイプを直接設定すれば、どんなに上位にある「ターゲットコンフィグ」「マテリアルルートフォルダ」「マテリアルサブフォルダ」で別のストリーミングタイプを設定していたとしても、優先してその内容が反映されるようになるわけです。

画像4

この構造を理解していると、今後、何百 or 何千 or 何万 の音声ファイルにストリーミングタイプを設定する必要性が出てきたとしても、慌てることなく柔軟な対応ができるようになりますのでしっかりと抑えておきましょう。


■ストリーミングタイプを設定する(AtomCraft)

設定内容が決まったら(かなり強引ですが、ここでは決まったことにして...)、実際にAtomCraft上で設定してみましょう。
今回は以下に記載した内容でサウンドデータを作成しようと思います。
-----

<ゴール条件(*以下3つの内容を満たすことが必須)>

◆3つの音声ファイル(.wav)を用意しAtomCraftに取り込み、「1キュー/1シート」のサウンドデータ(合計3つ)を作成する。
◆波形ファイルそれぞれにストリーミングタイプを「メモリ」「ストリーム」「ゼロレイテンシストリーム」に設定し、「ゼロレイテンシストリーム」についてはプリフェッチ時間を0.2秒(200msec)設ける。
◆マテリアル化された音声ファイルは「Bgm」という名前のマテリアルサブフォルダに格納して纏めた状態にする。


それでは、AtomCraftを起動し、作業を始めるための準備を行います。(プロジェクトの展開についてはこちら

<手順①>

画像5

予め用意した「Bgm_StreamingType_Memory.wav」「Bgm_StreamingType_Stream.wav」「Bgm_StreamingType_ZeroLatencyStream.wav」の3つの音声ファイル(*ファイル名は仮)をマテリアルツリーにドラッグ&ドロップ、登録します。
(*ここでの音声ファイルは、インターネット上にあるフリー素材など使用に差支えのないものをご利用いただければと思います。自己責任でお願いします。)

<手順②>

画像11

マテリアルルートフォルダ直下にマテリアルサブフォルダ「Bgm」を作成し、先の3ファイルを移動&格納します。

<手順③>

画像7

マテリアルサブフォルダ「Bgm」のストリーミングタイプを「デフォルト」に設定し、上位であるマテリアルルートフォルダのストリーミングタイプ(*初期値:デフォルト)を継承します。

<手順④>

画像8

マテリアル「Bgm_StreamingType_Memory.wav」を選択し、ストリーミングタイプに「デフォルト」を設定し、上位であるマテリアルサブフォルダ「Bgm」のストリーミングタイプを継承します。
(*今回の場合、ストリーミングタイプに「メモリ」を設定しても問題ありません。)

<手順⑤>

画像9

マテリアル「Bgm_StreamingType_Stream.wav」を選択し、ストリーミングタイプに「ストリーム」を設定。

<手順⑥>

画像10

マテリアル「Bgm_StreamingType_ZeroLatencyStream.wav」を選択し、ストリーミングタイプに「ゼロレイテンシストリーム」を設定し、プリフェッチ時間(msec)のところにあるチェックボックスにチェックを入れ、「200」の値を設定します。

<手順⑦>

画像11

マテリアル「Bgm_StreamingType_Memory.wav」「Bgm_StreamingType_Stream.wav」「Bgm_StreamingType_ZeroLatencyStream.wav」の3つを選択し、ワークユニット上「キューシートフォルダー」下位の任意の場所にドラッグ&ドロップします。

作業は以上となります。
上手くデータ作成はできましたでしょうか。

今回の場合、ターゲットコンフィグ上のストリーミング設定が「メモリ(*初期値)」であることを前提とした作業内容となっています。
仮にこちらの設定値がそれ以外の「ストリーム」「ゼロレイテンシストリーム」である場合、それより下位にあるストリーミングタイプに「デフォルト」を設定したものについて上記の対応方法が微妙に変化してきますので、注意するようにしてください。
なんだかんだ、いろいろ触って何がどう変わるのか確かめてみるのが一番理解が早いかと思います。

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


■まとめ

AtomCraftにおける「ストリーミングタイプ」の設定方法はさほど難しい内容ではありません。
一番難しく、そして大事なのは「どういった効果を得ようとしてその設定にするのか」というところになります。
より良い設定を行うためにはより多くの情報が必要になり、必要な情報を集めるためには関係者間でのコミュニケーションが必要となってきます。
先ずは情報集めから始めましょう!

次回は、「エンコーディングタイプの設定」について説明したいと思います。

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