レッスン 3

目次

圧縮データをデコードする(Decoding Compressed Data)

最適化は一般的に、ゲームプロダクションの最終段階で適用されますが、スタッターのあるフレームレートのゲームではエクスペリエンス全体に大きく影響するので、重要です。どのゲームでもゲームプレイ中に実行されるタスクが複数あり、Vorbisでエンコードしたメディアの解凍処理も、そのタスクリストに追加される1つです。Vorbisでエンコードされたメディアの解凍に必要な処理能力を削減するには、AkBankコンポーネントにある Decode compressed data 機能を使います。

そうすると、SoundBankをロードしてからVorbisエンコードメディアがすべてデコードされるので、次にゲームが同じEventをポストした場合に追加のリソースが不要です。メモリのSoundBankサイズは、この機能を選ばない状態と比較すると増大し、結果として最初からPCMエンコードを使った場合と同じサイズになります。ではなぜ、そもそもPCMエンコードで済ませないのか?例えば、ダウンロードゲームであれば配信用にSoundBankサイズを抑えておき、あとでゲームをロードしてからSoundBankをデコードすることもあります。デコード後のSoundBankの予想サイズは、コンバージョン後のSoundBank Managerに表示されます。

DungeonというSoundBankは、RegionのSoundBankの中でも解凍後のデータサイズが最も変化するものなので、これから、このSoundBankの解凍設定を行い、差を確認してみます。メモリ内で解凍前のデータサイズを確認した上で、Decode compressed dataの選択肢を有効にして、データサイズの違いを確認する手順を以下に説明します。

  1. Unityのメニューで、 Audiokinetic > Certification > 301 > Lesson 3 を選択し、 Decompressing SoundBanks を選択します。

    圧縮されたデータの解凍をSoundBankで設定する前に、現在のメモリ消費をプロファイラーで確認してください。

  2. Wwiseで Remote… をクリックします。

  3. Remote Connectionsウィンドウで、 Wwise Adventure Game (Editor) を強調表示にし、 Connect をクリックします。

  4. Unityで Play をクリックします。

    ゲームが初期化されら、もう一度Playモードを終了させます。

  5. ESC を押してWAGメニューを開き、 Play をもう一度クリックしてPlayモードを終了させます。

  6. Wwiseメニューで、Layoutsをクリックして Profiler を選択します。

  7. Advanced Profilerで、 Memory タブを選択します。

  8. Performance Monitorで タイムカーソル をドラッグし、数秒戻します。

    DungeonのSoundBankのメモリ使用を見ると、 Peak Used 値が約2.4 MBになっています。

    次に、SoundBankをロードしてから解凍してください。DungeonのSoundBankは、L3_2 - Dungeon Audio Environment Sceneで、Wwiseゲームオブジェクト上にあります。

  9. UnityのHierarchyでL3_2 - Dungeon Audio Environment Sceneを選択し、 Wwise ゲームオブジェクトを選択します。

  10. InspectorのAkBankコンポーネントで Decode compressed data を選択します。

    警告ウィンドウが表示されます。

  11. OKをクリックし、ダイアログを閉じます。

    Decode compressed dataオプションが有効になりました。その下にはSave decoded bankというパラメータがありますが、これはこのまま無効にしておきます。

    SoundBankをデコードすると、デコード後のデータはPrepare Poolに移動します。Prepare Poolのサイズ設定のプロパティはAkInitializerコンポーネントのInitialization Settingsにあり、これはAkWwiseInitalizationSettingsとも呼ばれます。

    [ヒント]

    AkWwiseInitalizationSettingsというAssetファイルはゲーム初期化の管理、例えばゲームシンク、サウンドポジション、解凍などの管理用に、メモリプールを割り当てるために使います。メモリプールの設定については レッスン 9で学ぶほか、Wwise-251技能検定の 「予備メモリの管理」の説明なども参考になります。

    準備が整った、つまりデコードしたSoundBankに、Wwiseがどれだけの予備メモリを使うのかを、このプールが定義します。それではPrepare Poolを、デコードしたGeneralのSoundBankのサイズに合わせてください。

    [注釈]

    Decode compressed dataという機能でデコードできるのは、Vorbisで設定されたSoundBank内のAudio Sourceだけです。この機能を選択しても、Vorbisエンコードメディアの入っていないSoundBankには一切影響ありません。

  12. Hierarchyで WwiseInitializer ゲームオブジェクトを選択します。

  13. Inspectorで、AkWwiseInitalizationSettingsというAssetファイルをダブルクリックします。

    DungeonのSoundBankは、デコードするときにPrepare Poolに転送されるので、Prepare PoolをDungeonのSoundBankのデコード後のサイズに合わせる必要があります。この情報は、WwiseのSoundBank Managerビューにあります。

    DungeonのSoundBankのDecoded Sizeは、9,159,252 bytes (9.2 MB) です。それでは、サイズを10 MB (10,000,000 bytes) に設定してください。

  14. Prepare Pool Size プロパティを 10000000 に設定します。

    メモリプールを設定するために、いったんPlayモードに入り、出て、変更を適用する必要があるかもしれません。

  15. Playをクリックします。

  16. ESC を押してWAGメニューを開き、 Play をもう一度クリックしてPlayモードを終了させます。

    これでメモリプールの設定値を確実に適用できたので、Profilerに接続しながらPlayモードに入る準備が整いました。

  17. Playをクリックします。

  18. Wwiseで Reconnect をクリックします。

    Advanced ProfilerのMemoryタブを見ると、Pool Name列から、DungeonというSoundBankがなくなっています。

    理由は、PreparePoolに転送されたからです。PreparePoolのPeak Used列を見ると、アロケーションされたランタイムメモリは、たったの8.4 MBです。それでは、Unityに戻り、Prepare Poolのサイズが、必要量と多少のヘッドルームの合計となるように、再調整してください。

  19. ESC を押してWAGメニューを開き、 Play をもう一度クリックしてPlayモードを終了させます。

    Prepare Pool Sizeを9 MBに設定して、必要最低限のメモリだけをPreparePoolメモリプールで確保するようにしてください。

  20. UnityのInspectorで、AkWwiseInitalizationSettingsの Prepare Pool Size9000000 に設定します。

Decode compressed data機能を設定すると、メモリ使用量は増えますが、ゲームプレイ中にCPUリソースを使ってVorbisエンコードメディアをデコードする必要がないので、ゲームエクスペリエンスの流れがスムーズになります。