CriWare Unreal Engine
Plug-ins for CriWare solutions.
読み取り中…
検索中…
一致する文字列を見つけられません
ADX チュートリアル No.19 : キューシートについて知ろう

これまでのレッスンでキューシートという言葉が度々出てきましたが、キューシートとは一体何なのでしょうか?

用語

キュー

CRIWARE SDK では、音声の再生単位のことをキューと呼びます。キューは複数のトラックを内包し、各トラックには複数のマテリアル (音声波形データ) を配置することができます。これらは AtomCraft 上でデザインされます。

キューシート

複数のキューをまとめるオブジェクトです。キューシート単位で音声ファイル群が1つのファイル(.acb)として出力されます。キューシートはAtomCraft上でデザインされます。

補足:何をキューシートにまとめるべきか?

どのようなキューを1つのキューシートにまとめるかはユーザ(主にサウンドデザイナー)の判断に委ねられます。
例えば、ゲーム内の1つのマップごとに1つのキューシートを用意するようなケースがよく見られます。
この場合、マップ固有の環境音などが個別のキューとして実装され、1つのキューシートに属しています。
また、主要なキャラクター毎にセリフ音声群やシステムメニューのSE群を「CharacterHoge」や「SystemMenuSE」のような1つのキューシートにまとめる場合もあります。

また、音のグループとしてのわかりやすさの他に、メモリ使用量もこのようなキューシートの設計指標になります。
基本的にはキューシート単位でロードされるため、ある場面では不要なキューを含むキューシートであっても必ずその分のメモリも消費することになります。
管理の手間は増えますが、キューシートを細分化しておいた方がメモリパフォーマンスのチューニングのしやすさは向上するかもしれません。

ACB データ

ACB ファイルとはCRI Atom Craftで出力するファイル (.acb) です。キューシート1つに対して1つ出力されます。
本チュートリアルで単に「 ACB データ 」と呼ぶ時、これは ACB ファイル自体ではなく、このファイルに保存されている情報全体のことを指します。

Atom Cue Sheet アセット

ACBファイルをインポートすると生成されるアセットです。
1つの Atom Cue Sheet アセットはアセットファイル(.uasset)として保存されます。
この .uasset ファイル内にはACBファイルの内容が書き込まれています。つまり、Atom Cue Sheet アセットファイルは ACB ファイルを内包します。

UAtomCueSheet クラス

Atom Cue Sheet アセットを表現する C++ クラスです。
キューシート情報を取り扱うための各種プロパティや関数を備えています。

Atom Cue アセット

キューシート内のキューと一対一になっているアセットです。これらが個別にアセットファイル (.uasset) として保存されることは、基本的にはありません。特定の音声(キュー)を再生する際は、対応する Atom Cue アセットへの参照を CRI API に渡す必要があります。

キューの再生にはキューシートが必要

キューを再生するには、それに紐づくキューシートをロードしなければなりません。ここでいう「ロード」とは、CRI UE Plugin にキューシートを読み込ませることを意味します。

具体的には、次の両方の条件を満たしている必要があります。

  1. Atom Cue Sheet アセットがロード済みの状態
  2. キューシートがロード済みの状態 (Atom Cue Sheet アセット内の ACB データがロード済みの状態)

この両者は厳密には異なることに注意してください。前者は Unreal Engine のアセットローディングの仕組みによって .uasset の内容物がメモリに展開され、システム上利用可能な状態となっていることを意味します。
一方、後者は CRI UE Plugin の仕組みによって ACB データがライブラリに読み込まれた状態となっていることを意味します。

キューシートがロード済みでない状態でキューの再生命令が出された場合、CRI UE Plugin 内部で上記 1、2 が暗黙的に実現されます。この仕組みによって、キューシートを意識することなくキューを再生することが可能となっています。

キューシートのリソースのライフタイム

ロード状態を意識せずとも再生は可能ですが、キューシートのリソースのライフタイムを管理ができます。
この管理はAtom Cue Sheet アセットの詳細の「Loading」から設定できます。


Inherited

atom.streamcache.DefaultSoundBankLoadingBehaviorに設定された値が適用されます。

  • 値が0の場合:Force Inline
  • 値が1の場合:Retain on Load
  • 値が2の場合:Prime on Load
  • 値が3の場合:Load on Demand

Force Inline

アセットが読み込まれた時点でキューシートがロードされ、UnrealEngine側でライフタイムがコントロールされます。

Retain on Load

ユーザーが読み込みを指定した場合orAtomComponentなどの再生タイミングで必要があればキューシートがロードが行われます。
キューシートがロードされてからAtom Cue Sheet アセットが破棄されるまでキューシートのリソースは破棄されません。
(アセットのアンロード=キューシードのアンロード)

Prime on Load

アセット読み込み時にキューシートのロードが行われます。
そのため、再生するタイミングではロードがすでに行われるので0レイテンシで再生が行えます。

Load on Demand

ユーザーが読み込みを指定した場合orAtomComponentなどの再生タイミングで必要があればキューシートがロードが行われます。
そのため、キューシートがロードがされていない状態で再生をしようとするとロードされるまで再生に時間がかかります。