![]() |
CriWare Unreal Engine
Plug-ins for CriWare solutions.
|
これまでのレッスンでキューシートという言葉が度々出てきましたが、キューシートとは一体何なのでしょうか?
CRIWARE SDK では、音声の再生単位のことをキューと呼びます。キューは複数のトラックを内包し、各トラックには複数のマテリアル (音声波形データ) を配置することができます。これらは AtomCraft 上でデザインされます。
複数のキューをまとめるオブジェクトです。キューシート単位で音声ファイル群が1つのファイル(.acb)として出力されます。キューシートはAtomCraft上でデザインされます。
どのようなキューを1つのキューシートにまとめるかはユーザ(主にサウンドデザイナー)の判断に委ねられます。
例えば、ゲーム内の1つのマップごとに1つのキューシートを用意するようなケースがよく見られます。
この場合、マップ固有の環境音などが個別のキューとして実装され、1つのキューシートに属しています。
また、主要なキャラクター毎にセリフ音声群やシステムメニューのSE群を「CharacterHoge」や「SystemMenuSE」のような1つのキューシートにまとめる場合もあります。
また、音のグループとしてのわかりやすさの他に、メモリ使用量もこのようなキューシートの設計指標になります。
基本的にはキューシート単位でロードされるため、ある場面では不要なキューを含むキューシートであっても必ずその分のメモリも消費することになります。
管理の手間は増えますが、キューシートを細分化しておいた方がメモリパフォーマンスのチューニングのしやすさは向上するかもしれません。
ACB ファイルとはCRI Atom Craftで出力するファイル (.acb) です。キューシート1つに対して1つ出力されます。
本チュートリアルで単に「 ACB データ 」と呼ぶ時、これは ACB ファイル自体ではなく、このファイルに保存されている情報全体のことを指します。
ACBファイルをインポートすると生成されるアセットです。
1つの Atom Cue Sheet アセットはアセットファイル(.uasset)として保存されます。
この .uasset ファイル内にはACBファイルの内容が書き込まれています。つまり、Atom Cue Sheet アセットファイルは ACB ファイルを内包します。
Atom Cue Sheet アセットを表現する C++ クラスです。
キューシート情報を取り扱うための各種プロパティや関数を備えています。
キューシート内のキューと一対一になっているアセットです。これらが個別にアセットファイル (.uasset) として保存されることは、基本的にはありません。特定の音声(キュー)を再生する際は、対応する Atom Cue アセットへの参照を CRI API に渡す必要があります。
キューを再生するには、それに紐づくキューシートをロードしなければなりません。ここでいう「ロード」とは、CRI UE Plugin にキューシートを読み込ませることを意味します。
具体的には、次の両方の条件を満たしている必要があります。
この両者は厳密には異なることに注意してください。前者は Unreal Engine のアセットローディングの仕組みによって .uasset の内容物がメモリに展開され、システム上利用可能な状態となっていることを意味します。
一方、後者は CRI UE Plugin の仕組みによって ACB データがライブラリに読み込まれた状態となっていることを意味します。
キューシートがロード済みでない状態でキューの再生命令が出された場合、CRI UE Plugin 内部で上記 1、2 が暗黙的に実現されます。この仕組みによって、キューシートを意識することなくキューを再生することが可能となっています。
ロード状態を意識せずとも再生は可能ですが、キューシートのリソースのライフタイムを管理ができます。
この管理はAtom Cue Sheet アセットの詳細の「Loading」から設定できます。
atom.streamcache.DefaultSoundBankLoadingBehaviorに設定された値が適用されます。
アセットが読み込まれた時点でキューシートがロードされ、UnrealEngine側でライフタイムがコントロールされます。
ユーザーが読み込みを指定した場合orAtomComponentなどの再生タイミングで必要があればキューシートがロードが行われます。
キューシートがロードされてからAtom Cue Sheet アセットが破棄されるまでキューシートのリソースは破棄されません。
(アセットのアンロード=キューシードのアンロード)
アセット読み込み時にキューシートのロードが行われます。
そのため、再生するタイミングではロードがすでに行われるので0レイテンシで再生が行えます。
ユーザーが読み込みを指定した場合orAtomComponentなどの再生タイミングで必要があればキューシートがロードが行われます。
そのため、キューシートがロードがされていない状態で再生をしようとするとロードされるまで再生に時間がかかります。