イベント
[CEDEC 2014]物理シミュレーションの結果に合わせて音を生成する方法とは。スクエニの開発者が語るプロシージャルオーディオの応用例
というわけで本稿では,CEDEC 2014初日に行われた「当たって砕けろッ!プロシージャルオーディオ制作」と題されたセッションの内容を紹介してみたい。
CEDEC 2014 記事一覧
物理エンジンとサウンドエンジンをつなげるプロシージャルオーディオ
ゲームには昔から効果音が利用されてきた。ゲーム内で起こり得るイベントに合った効果音を録音ないし合成したサウンドデータとして用意しておき,ゲームプログラム中で適切なサウンドを選んで再生する,というのが古典的な効果音の手法だ。シチュエーションに応じてエフェクトを適用するなどすれば,作り置きしたサウンドでも効果音に変化を付けることができる。
さらに物理エンジンがゲームで利用されるようになると,物理シミュレーションによって描き出されるシーンの展開を予測することができないため,サウンドを作り置きするという手法そのものが通用しなくなってしまう。
そこで,作り置きした音を再生するのではなく,音をプログラムで作り出す「プロシージャルオーディオ」(Procedual Audio)の技術を使って,物理シミュレーションの結果に合わせて音を生成してはどうか,というのが,今回のセッションのテーマとなる。
セッションを担当したのは,スクウェア・エニックスでサウンドの製作に携わっている音声研究者 シディーク・サジャード氏,サウンドプログラマー 谷山 輝氏,そしてサウンドデザイナー 廣瀬裕貴氏の3人だ。
セッションではまず,サウンドデザイナーの廣瀬氏が,なぜプロシージャルオーディオが必要なのかという点について,デモを交えて解説した。氏いわく,「グラフィックスの表現は物理エンジンの恩恵を受けて多彩な表現が可能になった。だがサウンドは必ずしもそれに合わせていなかった」。そこでスクウェア・エニックスでは,物理エンジンに対して厳密にサウンドを合わせるということを考えたのだそうだ。
あらかじめ録音しておいた音を利用するのではなく,効果音の波形をプログラム的に作り出すプロシージャルオーディオ。そのメリットは,物理エンジンのような「挙動が予測できないオブジェクト」に合った音を生成でき,サウンドの高品質化とシステムの効率化を両立することが可能になることだと,同社でプログラマーを務める谷山氏は説明していた。
一方で,波形を生成するアルゴリズムに知悉した人が少ないうえ,開発に時間がかかるのがデメリットのようだ。プロシージャルオーディオによって生成される音は,実行してみないとどんな音が再生されるか分からないため,「開発はトライアンドエラーになる」と谷山氏は語っていた。
スクウェア・エニックスでは,まさに今,プロシージャルオーディオの開発に取り組んでいるところだという。サウンドデザイナーとプログラマーのチームに,音響分析の専門家でサジャード氏が加わって,次のスライドに挙げられているような工程で開発が進められているとのことだった。
具体的にどんなものが開発されているのか,その例として示されたのが次のスライドだ。中心にあるのは「Granular Synthesizer」と命名された一種のサウンド合成エンジンで,物理エンジンから取り込んだ情報を基に,複数の音のデータをGranular Synthesizerで合成,加工して最終的な音を作り出すというシステムだそうだ。Granularは「粒状の」という意味なので,おそらく短い複数の音を合成して効果音を作り出すことから,このような名前が付けられているのだろう。
スライドで示されているように,このプロシージャルオーディオエンジンは,さまざまな波形を編集するモジュールを追加できる設計になっているとのこと。谷山氏は「あらゆる音を作るアルゴリズムは,波形編集モジュールの組わせで実現できると考えている」と述べていた。
サウンドデザイナーのチェックが欠かせないプロシージャルオーディオ
というわけで,このGranular Synthesizerを使ってどのように音が創り出されるのか,その具体例を解説したのがサジャード氏である。セッションで取り上げられたのは砕ける岩だ。セッションタイトルになっている「当たって砕けろ」は,この「岩」とかけているとのことだった。
岩が割れるときや,ぶつかるときに音が発生するのは「破片が共振周波数で振動することが原因」とサジャード氏。つまり岩と岩をぶつければ,そのような音が得られるはずで,サジャード氏らはさまざまな石を叩いて振動させ,その音を録音したという。
ただ,多数の小さな音を録音して単に合成すれば岩が割れる音になるのかというとそうではない。サジャード氏はよりシンプルな例として雨の音を挙げていた。
雨音は多数の水滴が落ちる音が集合した音だ。ならば単純に水滴の音を大量に合成すればリアルな雨音になるということだろうか。サジャード氏は実際にデモを聞かせてくれたが,100万粒でかろうじて豪雨っぽく聞こえなくもない,といったところだった。
単純に合成しても,リアルな雨音にはならない。よって,個々の水滴の音に大きさの変化を付けながら合成する必要が出てくるわけだが,サジャード氏は最終的に,「音の大きさと頻度を表す分布を対数正規分布にすると雨音らしく聞こえる」ことが分かったという。
サジャード氏はその理由については説明しなかったが,人間の聴感の特性は対数なので,頻度の分布を対数にするとそれっぽく聞こえるというのは結構分かりやすいように思う。
以上が雨音の例だが,この例に従うと,岩が砕ける音も音の大きさの頻度を対数正規分布にすれば,それっぽく聞こえるということになる。岩が砕ける音の場合はさらに,雨のようにずっと降り続くわけではないので,時間とともに音の頻度が減っていくという変化も必要になってくる。
では実際にGranular Synthesizerをどのように制御して岩が砕ける音を作ったのだろう。サジャード氏らはまず,物理エンジンから岩が衝突する回数と衝突の力積――つまり衝突の強さ――という2つのパラメータをもらい,Granular Synthesizerに入力して岩が砕ける音を合成してみたそうだ。
この方法は理にかなっているように思えるが,再生した音はサウンドデザイナーからダメ出しされたという。
下のグラフは物理エンジンから得た衝突数の時間変化を示したもので,衝突の強さがグラフの色の濃さで表されている。3つの岩を落として砕いたときの変化なので,衝突数のピークは3つ。岩が衝突した瞬間に衝突の数が跳ね上がっているが,最大でも単位時間あたり100回を超える程度ということが確認できるはずだ。また,その後に衝突の数が急激に減ることが分かる。
サウンドデザイナーからダメを出された原因は衝突回数の減衰が速いことにあったようで,最終的には,衝突回数の減衰に手を加えることで満足できる音が得られたとサジャード氏。物理エンジンから得られた衝突回数が,おそらく物理的には正しいのだろうと思うが,物理的に正しいからといって,それらしく聞こえないというあたりが,プロシージャル的手法の難しさだろうか。
セッションでは最後に,谷山氏が「最終的にはどんな音でも作り出せるプロシージャルオーディオSDKという形にまとめたい。将来のCEDECでそのような発表ができると思っている」と将来の展望を力強く語っていた。いずれにしても,ゲームが複雑化しているだけに,効果音にはプロシージャル的な手法が欠かせなくなるだろう。スクウェア・エニックスの取り組みがもたらす成果に期待したい。
スクウェア・エニックス コーポレートサイト
CEDEC 2014 記事一覧
- この記事のURL: