はじめに
Wwiseでサウンドプログラムを進めるためには、まずはWwiseの大まかな仕組みを理解しておく必要があります。
Wwiseの公式サイトにリファレンスが掲載されており、Wwiseの勉強を進めるのであれば、このような個人ブログよりも当然そちらを読む方が確実です。
ですが、海外の企業さんのためか日本語に違和感があったり、専門用語を知っている前提で説明が進んだりして、初心者にとってはとっつきにくい印象を受けました。
ですので、ここでは公式リファレンスを噛み砕き、大まかにWwiseの仕組みについてまとめてみようと思います。
ここをさらっと読んでからWwiseの公式レッスンを進めれば、きっと理解がしやすくなる…はずです。
オブジェクトごとに異なるサウンド演出
Wwiseには様々なサウンド表現をプログラムするために、それぞれ用途が異なるオブジェクトが用意されています。このオブジェクトはお互いに干渉しあい、併用させることで複雑なサウンド表現が可能となります。
それぞれのオブジェクトでどんなサウンド表現が可能となるのか、また、Unity(ゲームエンジン)とWwiseの間でどんな処理が行われているのか。
ざっくりと説明していきます。
-サウンドプログラムの基本要素「Event」
-今どんな状況?どう変化させる?「State」
-SEをカテゴライズし組み込みをアシスト「Switch」
-数値による連続的なサウンド変化を「RTPC」
-BGMに溶け込む特別なサウンドエフェクトを「Trigger」
サウンドプログラムの基本要素「Event」
Wwiseでサウンドを割り当てる上で基本となる要素が「Event」です。
ゲーム中では様々な動作やタイミングでサウンドが発生します。
例えば…
- 剣で攻撃した時の斬撃音
- 流れる川のせせらぎ
- 優雅な街中のBGM
- 戦闘シーンのBGM 等々…
ゲーム中のあらゆるサウンドにこのEventを設定することで、鳴るタイミングを制御することができます。
Eventは自由に名付けることが可能です。例えばジャンプのSEを組み込む場合、「Jump」というEventを作成し、その中にジャンプの効果音のサウンドファイルを格納します。
この「Jump」EventをUnity(ゲームエンジン)側で認識し、呼び出すタイミングをプログラミングすることで、初めてゲーム中でサウンドを鳴らすことができるのです。
このEventには1つだけでなく、複数のサウンドファイルを格納することができます。
例えば、ショットガンを撃った時のSEを設定する場合、弾が出る「バンッ!」という音と薬莢が地面に落ちる「カランカランッ」という音の、2つの音を1つのEventに設定することができます。
Eventの中で「Action」を設定する
特筆すべき点は、このEventはサウンドを再生するだけのものではなく、停止させたり、再生タイミングを遅らせたり、様々なサウンドの動作に応用できるという点です。
この動作パラメータの事をWwise公式のレッスンでは「Action」と呼称しています。
普通に再生する場合は「Play」、停止させる場合は「Stop」、再生タイミングを遅らせる場合は「Delay」といったように、それぞれのサウンドにActionを設定することができます。
例えば、雨が止んだ時に雨音を停止させたい場合、「Rain_Stop」と命名したEventに、雨音のサウンドファイルを格納してActionのパラメータを「Stop」と設定しておきます。その「Rain_Stop」Eventをゲーム中で呼び出せば、雨音を停止させることができます。
「Play」、「Stop」、「Delay」以外にも数多くのActionがあり、様々なサウンド表現に応用できるはずです。
Wwise公式ヘルプEvent Actionの種類
SEの事ばかり説明していますが、もちろんこのEventはSEだけではなく、BGMにも同様の考え方で活用できます。
例えば、敵と遭遇した場合にはフィールドのBGMを停止させ、戦闘BGMを再生させるといった具合です。
どんな状況?どう変化させる?「State」
ゲーム中では、様々な環境や状況の変化が絶え間なく起こる場合があります。そういった場合、サウンドもそれに合わせて柔軟に変化させなくてはなりません。
例えば…
- 洞窟に入ると反響し始める足音や声
- 家から出ると大きくなる街中の喧騒や車の音 等々…
そういったサウンド変化を実装する時便利な機能が、「State」です。
このStateは環境や状況に名前をつけ、その状況に陥った時にサウンドにどういう変化を持たせるのかを設定する事ができます。
例えば、家の中にいる状態を「Inside」、家の外にいる状態を「Outside」と命名しStateを作成します。次に「Inside」Stateの時は音量を-3dBし、「Outside」Stateの時は+3dBする、という設定を外の喧騒の音に対して適応します。
これで家の中にいる間は喧騒の音が静かに聞こえ、外に出ると大きく聞こえるというサウンド演出が可能となります。
Stateを用いたインタラクティブミュージック表現
また、Stateはインタラクティブミュージックにも活用することができます。
Wwiseで簡単なデモプログラムを作りましたのでこちらの動画をまずご覧ください。
Stateを切り替えて、ゲームBGMを変化させている様子です。
想定したシチュエーションとしては、PSP系列ファンタジーRPGののどかな森のフィールド曲で、敵と遭遇するとシームレスに戦闘曲に移行する、といった感じです。おおむね楽器パートを増やすだけの簡単な作りですが、ゲームに組み込むとそれっぽくなる…はずです。
画面左下のマウスカーソルがあるあたりを見てもらうとわかるのですが(ちっちゃくて分かりづらいですね、すみません…)、今回筆者は「Normal」、「Battle」という2つのStateを作成しました。
具体的にどういった演出を狙ったかを説明すると、「Normal」時は低音部とリズム楽器を抑えめにしてフィールドののどかさをイメージし、「Battle」時にはリズム楽器とハモリなど加えて盛り上げて、おまけでストリングスのトレモロを入れて少し緊迫感を与えたかった、といった感じです。
簡単な作りではありますが、Stateを活用することで同じメロディーのままスムーズに曲が変化していることがわかると思います。
応用すれば楽器パートの増減だけでなく、Stateに合わせてAメロBメロ…というように展開をインタラクティブに変化させたりと、様々な音楽表現が可能になります。
SEをカテゴライズし組み込みをアシスト「Switch」
ゲームのボリュームが増えれば増えるほど、当然サウンドの量もそれに比例し増えていきます。例えば、コンクリート上の足音と砂地上の足音を実装する場合、同じ足音でもそのサウンドファイルは全く別のもの組み込まなくてはなりません。
「Concrete_Footsteps」と「Sand_Footsteps」という2つのEventを作成し、コンクリート上と砂地上でそれぞれのEventを発生させるようにしたとします。確かにこれなら問題なく足音のサウンドを変化させることができるでしょう。
しかし、これが2つ以上、5つ、8つになればどうでしょう。同じ足音のサウンドなのに、材質の数だけ別々のEventとして名前をつけて扱っては、非効率ですし開発現場に混乱を招く恐れがあります。
そんな時に役立つのが「Switch」です。
「Concrete」と「Sand」というSwitchを作成し、「Footsteps」という足音のEventに関連づけます。すると「Footsteps」という1つのEventを2つのSwitchに通すことで、2パターンのサウンドファイルを実装することができます。
つまり、文字通りサウンドを切り替えるスイッチを作成できるということです。
仕組み自体は上記の章の「State」と近いかもしれません。「State」はサウンドの音量を変化させたりエフェクトを加え変化させるパラメータ、「Switch」はサウンドファイル自体を切り替え変化させるパラメータ、という感じです。
膨大な数のSEを組み込む時にはこの「Switch」を使うことで、 SEをカテゴライズしスムーズに組み込むことができます。
また、足音の他にも銃の種類によって変わる発砲音や、主人公の性別によって変化する音声などに活用することができます。
もちろんこれもSEだけでなく、BGMにも応用することができます。
例としては、3Dと2Dを行き来するゲームで、BGMの進行はそのままにアコースティックアレンジと8bitアレンジを切り替える、といった感じです。
数値による連続的なサウンド変化を「RTPC」
例えば、残りHPが少なくなるごとに「ドックンドックン」という心音が大きくなるサウンド演出を組み込むとします。
この仕組みは残りHP50%、残りHP20%、残りHP10%、というように段階ごとに区切って「State」を設定すれば可能です。ですが、これでは手間が増えますしとてもスマートなやり方とは言えません。
そんな時に役立つのが「RTPC(Real-time Parameter Control)」です。
「RTPC」ではXY軸からなる線グラフを作成し、その値に応じたサウンド変化を設定することができます。
例えば、Y軸の値が100の時に心音のボリューム(X軸の値)を0にし、反対にY軸の値が0の時に心音のボリュームを100にするという「RTPC」をWwiseで設定します。
そして、Unity側でキャラの残りHPの値をこのY軸の値として扱うようプログラムします。
こうすれば心音と残りHPの値が対応し、体力が満タンの時は心音は聞こえず、残りHPが少なくなっていくごとに心音が大きくなる、というサウンド演出を実現できます。
直線グラフだけでなく曲線グラフを用いて微妙な変化を調整することも可能です。
また、ボリュームだけでなく、LowPassFilterやピッチの変化にも対応しているため、様々な活用方法が考えられますね。
BGMに溶け込む特別なサウンドエフェクトを「Trigger」
「Trigger」はインタラクティブミュージックにおける特別なサウンド効果を生み出す際に役立つパラメータです。
例えば、アイテムを入手しパワーアップした時、その瞬間にBGMの拍子に合わせてファンファーレが鳴る演出があったら面白いと思いませんか?つまり、ただの効果音ではなく、短いフレーズがBGMに重なる形で再生されるということです。
このBGMに重なる短い音楽的なフレーズをWwise公式リファレンスでは「Stinger」と呼称しています。
音楽的なフレーズでなくとも例えば、ドラムのフィルやギターの単音1つでも、BGMに溶け込みプレイに呼応した特別なサウンド演出が実現していれば、それは「Stinger」と呼べるでしょう。
「Trigger」はこの「Stinger」を呼び出すためのパラメータです。
アイテムを入手した時に呼び出す「PowerUp」Trigerを用意し、ファンファーレのサウンドファイルをStingerとして設定します(このStingerはBGMと同じキー音階のフレーズにすることが好ましいでしょう)。そしてBGMの小節、拍のうち、どのタイミングに合わせて再生するかを設定します。
再生するタイミングは、必ずしも小節や拍に合わせる必要はありません。
完全にBGMを無視し普通のサウンドエフェクトとして設定することも可能ですし、自分でBGMを自由に区分けし、その区分を基準にタイミングを設定することも可能です。
これでBGMに溶け込みなおかつパワーアップの喜びを演出する、特別なサウンドエフェクトを作成することができました。
おわりに
ここまでWwiseの基本となる5つのオブジェクトをざっくりと解説させていただきました。
どのようなサウンド演出が実現可能なのかを頭に入れておけば、ゲームやサウンドの構想を練る際の足掛かりとなるでしょう。
ぜひこの記事をざっくり読んだ後にWwise公式のレッスンに取り組んでみてください。