Wwiseを使ってみて
「Happy Elements Advent Calendar 2023」 12月1日の記事です。
はじめに
Happy Elements株式会社 カカリアスタジオで新規タイトルを開発中のチームで働いているU.S.です。
担当しているタイトルではサウンドのミドルウェアとしてWwiseの使用を検討しています。
弊社の他タイトルでは、CRI ADX2を既に使用させていただいていますが、今回Wwiseの採用を検討するに至った経緯や、使ってみた感想について書きたいと思います。
所属グループでの主な業務内容
現在は新規タイトルを開発中です。
ゲームエンジニアとして、Unityを使ってクライアントサイドの開発を行なっています。
Wwise検討の経緯について
Wwiseは、サウンドクリエイターが専用オーサリングツールを使いながらゲーム内の音の大部分を直接調整できるUnity対応のサウンドエンジンです。
ゲーム側からWwiseに何が起こったかを伝えることを、Wwiseでは"EventをPostする"と呼んでいます。
EventがPostされるとWwise側で処理されてサウンドが鳴るようになっています。
弊社では各アプリの開発チーム内に専任のサウンドエンジニアはおらず、それぞれのエンジニアが他の業務と兼任しながらサウンドに関わっています。
そんな中、Wwiseを使用すれば、エンジニアはゲームの状態に応じてEventをPostするだけで、残りの作業(フェード、ダッキング、インタラクティブサウンドなどの調整)はサウンドクリエイターだけで行うことができます。
これにより、サウンドクリエイターとのコミュニケーション工数を最小限に抑えつつ、高品質なサウンドを提供することが可能となると考えました。
これがWwise導入の検討のきっかけとなりました。
使ってみた感想
エンジニアとサウンドクリエイターの作業を分担することが可能になっていると思います。
Wwiseを使えば、サウンドの調整をサウンドクリエイターだけでほぼ完結できます。
その一方で、サウンドクリエイターの作業量は増えますが、以下のような問題が解消され、作業がしやすくなると考えています。
- エンジニアへサウンド調整依頼をした後、エンジニアの作業が完了するまで確認できない
- 確認や調整のたびにエンジニアに依頼することを申し訳ないと思ってしまい何度も調整しづらくなってしまう
Wwiseの操作も最初は苦労しましたが、慣れると直感的で分かりやすいとのことでサウンドクリエイターからの評判も良いです。
作業手順としてはサウンドクリエイターでサウンドとEventの作成、SoundBankの出力を行ってもらいます。合わせて、Eventをどの場面で使用するかの指定も連絡してもらいます。
SoundBankとはEventやサウンドの構成、メディアファイルなどが入ったファイルです。
エンジニアの対応としては、アプリ側でSoundBankをロードして上記の指定に合わせてEventをPostするだけで完了します。
WwiseのEventについて
かなり柔軟にいろんなことができます。
例えば、ストーリー中にボイスを鳴らすEventが発行されたとします。
下記のようなことをWwise側だけで完了できます。秒数や音量に関してもWwise側だけで調整できます。
- BGMの音量を1秒かけてフェードアウトさせて下げる
- ボイスを鳴らす
- ボイスが終わったら、BGMの音量を1.5秒かけてフェードインさせて元に戻す
Eventから別のEventをコールするようなことも可能です。
Wwiseの理解について
Wwiseの操作
audiokinetic社が解説動画を用意してくれており、それがとても分かりやすかったです。
YouTubeの動画になっているため、日本語の字幕も表示できるので試聴が楽でした。
・動画ページ1
・動画ページ2 ・動画ページ3Unityでの実装
Wwise Adventure Gameというサンプルアプリがあり、実行し操作を確認しながらソースコードと見比べました。
サウンドクリエイターとの確認
最初はWwise Adventure Gameのサンプルアプリを確認してもらっていたのですが、情報量が多く、シンプルに機能だけを確認したいという依頼がありUnityで機能を試せるものを作って共有しました。
このお試しプロジェクトを動かしながら1つずつ機能を確認できたことで理解が進みました。
実装について
- サウンドを鳴らす場面については自分達で細かく制御したかったこと
- 変更履歴をテキストファイルとして差分確認できるようにしたかったこと
上記の理由から、Wwise Adventure Gameで使われているGameObjectに「Post Ak Event」などをアタッチしてEventをPostするのではなく、ソースコードからAkSoundEngineという公式が提供しているインターフェースを使ってEventをPostしています。
またPostEventメソッドはEvent名を指定することができますが、文字列での指定だと誤って存在しないEvent名を指定していても気づかないためIDを指定したほうが良さそうに思いました。
Wwiseはプロジェクト設定の「Generate header file」がONになっていると、SoundBank出力時に「Wwise_IDs.h」というファイルを出力してくれます。
こちらにはゲームに含まれる必要のある全てのIDが出力されており、C++言語から使えるヘッダファイルの形式になっていますが、C#から使うためにヘッダファイルをC#ファイルに変換するPythonスクリプトが用意されています。
python3コマンドが使用できるように設定した上で
python3 ./Assets/Wwise/Tools/WwiseIDConverter.py ./Assets/StreamingAssets/Audio/GeneratedSoundBanks/Wwise_IDs.h
上記のようにコマンドを実行すれば「Wwise_IDs.cs」ファイルとしてイベントIDをC#のconst string形式に変換してくれるため、こちらを利用してイベントIDをC#の定数として指定することでコンパイラの恩恵を得ることも可能です。
まとめ
まだまだ満足に使いこなせていない状況ですが、今のところWwiseを使って実現したいと思っていたことは達成できています。
アプリ内の状況に応じてサウンドをインタラクティブに変化させたりと、ユーザー様に届けられる表現が向上できそうで楽しみです。
Discussion