サウンドデザイナーはプリプロダクションの早い段階からシステムのプロトタイプを必要としますが、必ずしもオーディオプログラマーに頼れる状況ではありません。 |
幸い、そのようなときに Wwise をUnreal Engine 4やUnity 3Dなどの最新エンジンと組み合わせると大変便利です。 |
例えばUnreal Engine 4には強力なプログラミング用インターフェースがあり、プログラマーが関与しなくてもサウンドデザイナーだけで様々なことができます。これらの素晴らしいツールを Wwise が提供する豊富な動作設定と組み合わせて活用しない手はありません。 |
そこでこのチュートリアルでは、地面の素材を検知・管理し、それぞれに合ったフットステップサウンドを再生する方法を説明します
作成の際は以下を使ったので、これらを中心に説明します: |
- Audiokineticの Wwise 2016.1: Switch Group、RTPC、RTPC制御のSwitch、Random Container
- Unreal Engine 4.12.5: Blueprint、Surface Materials、Physical Materials、 AkEvent Notify、Set Switch、Set RTPC
- Unity 3D 5.1
- UnrealストアやUnityストアの無料アセット
Wwise
UnrealでもUnityでも、 エンジンで検知された地面のMaterial(素材)に合ったフットステップを再生させるための手順は、まったく同じです。
Game Syncs
- まずGame SyncsでSwitch Groupを新規作成し、名前を Material とします。
- このSwitch Groupの下に4つのSwitchを作成し、名前を Concrete 、 Grass 、 Tiles 、 Wood とします。
ここで特に注意してほしいのは、 Switch がゲームオブジェクトと連携しているということで、プレイヤーのフットステップに限らず、様々な状況で利用できます。どのゲームオブジェクトを使うかによって値を変えることができ、例えば弾丸のインパクト音や、NPCのフットステップにも活用できます。逆にStateは「グローバル」に影響するので、physical material(物理的な素材)を管理するのには不適切です。
グローバルセットアップ(Audio、Events、Switchのアサイン) |
- (1) Switch Containerを新規作成し、名前を FS_Pawn とします。
- (2) 次の4つのRandom Containerを、4つのMaterial用に作成します: Walk_Concrete 、 Walk_Grass 、 Walk_Tiles 、 Walk_Wood。
- (3) れらのContainerやMaterialに合わせて、すべてのオーディオファイルをインポートします。
- (4) Switch Containerをクリックし、先ほど作成したSwitchを設定します:
Group: Material
Default Switch/State: Concrete
- ここでデフォルト値を設定することで、エンジンが Wwise にないMaterial名を送った場合に、
デフォルトでConcreteが再生されます(Noneに設定すると、何も再生されません) 。 - (5) 次にAssigned Objectsの各Switchに対し、該当するRandom ContainerをContents Editorから(またはProject Explorerから) ドラッグ&ドロップ してアサインします。
- (6) FS_Pawn というSwitch Containerから、PlayのEventを新規作成し、その名前を Play_FS_Pawn とします。
- (7) このEventをテストし、MaterialをTransport Controlや Soundcaster Session で切り替えてみてください。
Unreal Engine 4
Project Settings
- (1) Project Settingsを開き、 Engine>Physics>Physical Surface を選択します。
- (2) 次の4つのSurface Typesを新規作成します(名前は Wwise で作成したものに合わせる): Concrete 、 Grass 、 Wood 、 Tiles。
Physical Material Settings
- (1) コンテンツブラウザで4つのPhysical Materialを新規作成し、名前を PM_Concrete 、 PM_Grass 、 PM_Tiles 、 PM_Wood とします。
- (2) 1つずつ開き、該当するSurface Typeをアサインします。
Material Settings
- あなたのマップにあるMaterialを1つずつ開き、それぞれに適切なPhysical Materialを、次のものから設定します: PM_Concrete 、 PM_Grass 、 PM_Tiles 、 PM_Wood。
- Mapの概要
Animation Sequence
- Animation Sequenceを開きます。ここで、 AkEvent のフットステップをトリガーします。
- (1) Add notifyで、タイムラインの適切なポジションに AkEvent を追加します。
- (2) Anim Notifyで、Wwise プロジェクトで作成した Wwise の AkEvent である Play_FS_Pawn を選択します。
この時点でアニメーションを再生してみると、デフォルトSwitchのConcreteのフットステップ音が聞こえます。 |
Blueprintの設定
- このBlueprintで、Unrealはポーンが歩く地面のMaterialを察知し、正しいSwitchを Wwise に送ります。
- コンテンツブラウザでBlueprint Class(Actor Component Class)を新規作成し、このBlueprintの名前を BP_Wwise_Footsteps とします。
- このBlueprintを開き、スクリプト作業を進めます。完成すると、このようになるはずです!
スクリプトのブロックごとに詳しく見ていきます:
- (1) このBlueprintはtickベースで、プレイヤーポーンの場所を把握しています。
- (2) LineTraceByChannel ボックスは基本的にstartからendまでのインプットで作成されるレイのトレーシング機能(ray-trace)です(Z値は、あなたのポーンに合わせて調整してください)。ゲーム中にray-traceを表示させるには、Draw Debug TypeをFor One Frameに設定します。ポーンの下の地面に赤い線が表示され、もしray-traceが地面とコライドしている場合は、下にボックスが表示されます。
- (3) 最初の Branch ボックスは LineTraceByChannel のReturn Valueがあるかどうかをチェックするものです。
2つ目は、ポーンが別のSurface Typeを歩かない場合は、BlueprintがSwitchを Wwise に送らないようにするためのものです。このゲート役がないと、ティックがあるたびにいつまでも Wwise にSwitchが送られてしまいます!
Get Surface Type ボックスが、Project Settingsにリンクした Enum を返します。
この変数を表示して設定できるようにするには、 新規に CurrentSurfaceType という名前のVariableを作成し、そのタイプを EPhysical Surface にします。
- (4) 前述のとおり、 Wwise のSwitchはゲームオブジェクトに基づいています。今回、Animation Sequenceでポストされる AkEvent notifyがメッシュにアタッチした Ak Componentを作成するので、Set Switchをこの Ak Componentにキャストするべきで、ポーンそのものにキャストしません。
- (5) このボックスが、該当する文字列を Surface Type Enum に返します(例えばConcrete 、 Grassなど) 。
- (6) これで、 ポーンが歩く地面のCurrent Surface TypeをWwise に送るSet Switchボックスに、データを入れることができます!
Target: AkEvent がポストされたところのメッシュから、 Ak Componentを取得
Switch Group: Material ( Wwise セッションで設定されたものと同じ)
Switch State: Unrealで定義されたSurface Type
Print Stringボックスはデバクだけのためのもので、Unreal画面にCurrent Surface Typeを表示させます。
- Blueprintをコンパイルし、保存し、あなたのポーンのコンポーネントとして追加します。
- Wwise とUnrealを接続すると、ProfilerレイアウトのCapture LogビューにこのSwitchが表示されます。
さらに先へ
非常に嬉しいのが、RTPCによってSwitchを完全にコントロールする Wwise の機能で、あるRTPCに送られる値に基づいて、Switchを変化させていけます!
今回のケースだとポーンの速度によってフットステップをWalkにしたりRunにしたり切り替えるのには、この機能が最高です。
UE4でPawnのAnimation Blueprintを開き、Update Animation Event (これはTickベース)の最後に、Set RTPCボックスを追加します。
- Target: Ak Event Notifyをポストするところの Ak Componentを取る必要があります
- RTPC: Pawn_Speed
- Value: Get Speed(速度に基づいている)
RTPCで制御されるSwitchを作成する
- Switch Groupを新規作成し、名前を FS_Type とし、その Switch 値として Walk と Run を設定します。
- Pawn_Speed というRTPCを作成します。
Min = 0(ポーンがアイドル状態)
Max = 300(最高速度)
Default = 0
- 私のケースでは、 0 ≤ Walk速度 < 250 ≤ Run速度 ≤ 300 ということが分かっています(この速度をリアルタイムでトラッキングするには、 Wwise とUnrealを接続し、ポーンに送られるRTPCをプロファイリングします)。
- Pawn_Speed というRTPCを、 FS_Type というSwitchにリンクするには、 Use Game Parameter を有効にし、このように階段のようなものを作成します。
作成したSwitchが、以下のように、ゲームから送られてくるRTPC値によってコントロールされます:
- 0 < Pawn_Speed ≤ 250のときは、Walkに切り替える
- 250 < Pawn_Speed ≤ 300のときは、Runに切り替える。
- あなたのHierarchyにあるRunアセットのオーディオファイルをすべてインポートし、 FS_Type に基づくSwitch Containerを新規作成し、その中にMaterialに基づく2つのSwitch Containerを入れます。以下のような感じになります (ブラッドリー・メイヤーのやり方を利用すれば、早くて簡単です) 。
- あなたの SoundBank をビルドし、プレイし、エンジョイしてください!
Unity 3D
Tagの設定
- マップにあるアクターを1つクリックしてから、Inspectorウィンドウにいきます。
- Tagのドロップダウンボックスをクリックし、 Add Tag… を選択します。
- このウィンドウで、 Wood 、 Concrete 、 Grass 、 Tiles の4つの値を追加します。
地面素材の設定
- プレイヤーが歩く可能性のある地面またはオブジェクトの1つ1つに、Inspectorウィンドウで 正しいTagをColliderにアサインします。
- Colliderにメッシュが組み込まれていないこともあるので、必ずTagをメッシュだけでなくColliderに設定してください。
C#のプログラム
- あなたのプロジェクトのCharacter Controllerスクリプトに、このC#コードを追加してください。
- 変数の宣言:
- メインスクリプト:
この記事を楽しんでいただけたでしょうか?これからも Audiokinetic のブログページで、たくさんのゲームオーディオ経験談をシェアしたいと思います!
コメント