ループを使ってエンジン音をWwiseでデザインする パート1

ゲームオーディオ / サウンドデザイン

今回は2回に分けて、車のエンジンで、ループを使用したシンプルなサウンドデザインをWwise Authoringで設定する方法と、オーディオや車の関連情報を紹介します。 

読者がカーマニアでなくても大丈夫、私も違います。ガソリンを大量消費する 内燃機関 にまつわる話も出てきますが、ワークフロー自体は、他の似たようなサウンドデザインにも適用できます。サンプリングアセットの一定範囲で一貫したピッチトラッキングを維持し、そのピッチをインゲームのパラメータデータで制御していくワークフローです。言ってみれば、大型で非常に複雑な管楽器のようなものです。空気が入り、空気が出ていくわけです。

一方、車のサウンドデザインを始めたばかりの方や、車のエンジン音をゲームに実装する従来ながらの方式をWwise Authoringでどう設定するのかを知りたい方も、ぜひこのブログをご覧ください。

第1回目は、エンジンシミュレーションの主要コンセプトや、デザインに必要なパラメータとその仕組みに焦点をあてます。また、このような目的に使うループアセットを作成する際のヒントをいくつか、最後に紹介します。

この記事に使用した画像は Wreckfest のソースレコーディングやインゲームアセットから取得しました。Wreckfestは、Bugbear Entertainment 開発、THQ Nordic 発売のバンガーレース(banger race、folk raceとも)のビデオゲームです。 

ループを使う理由

ゲームの車のサウンドデザインについて多少知っていれば、この種のデザインにはループよりも優れている、グラニュラーシンセシスをすぐに思い浮かべるでしょう。もっと良いものがあるのに、あえてループを使う理由はなぜでしょう?

確かにグラニュラーシンセシスを使えば、ループよりも少ないデザイン設定で優れた効果を出すことが多いですが、単独では、活気あるデザインや面白い音のディテールを達成するようなターンキーソリューションとなることは稀です。

例えば、音の忠実性や再生品質よりもオーバーヘッドを抑えた最適化の方を優先し、グラニュラーシンセシスの複雑なデザインの軽量版を作成する必要が出てきた場合、具体的には、コンソールからモバイルへ、プラットフォームの移行をする時など。あるいは、パラメータデータの限定された範囲(または組み合わせ)に、多少のテキスチャを追加したいけれど、グラニュラーシンセシスのプラグインのインスタンスを実行するのでは、やり過ぎになりそうな場合など。また、よくあることですが、全ての欲しいサードパーティツールのライセンスをカバーできるだけの予算がなかったり、プロジェクト用にカスタムツールを作れるほどプログラミングの余力がなかったり。

サウンドデザインのベースにあるのが「ループ」でも「グラニュラーシンセシス」でも(強いて言えば「減算合成」であっても)、それぞれの活用方法があります。どのツールが自分の目的に最も適しているかを見極めることこそ、サウンドデザイナーの役割です。

もちろん、多くの場合、複数のテクニックが相互に補完し合う時こそ、最高のデザインが生まれます。

エンジンの基本パラメータ

エンジンのデザインを設定するには、まず、内燃機関とドライブトレイン が連動して車が前進する仕組み全体を理解する必要があり、シミュレーションのデザインを制御するために必要な主要パラメータと、その仕組みを、知る必要があります。

Wwiseで、これらのパラメータをRTPCに設定し、ゲームエンジンの物理的シミュレーションの該当データに紐づけます。具体的には、

1. RPM:エンジンの走行(回転)速度

2. 負荷:エンジンの動作内容や稼働量

3. スロットル:エンジンの稼働量を調整するユーザーインプット

物理的には、スロットルがエンジンを流れる空気(吸気)とガソリンの、量や割合を制御します。複雑なエンジンのシミュレーションであればもっと多くのパラメータを設定しますが、この3つのセットさえあれば、基本的なエンジン音の動作をシミュレーションできます。

次に、RPMと負荷の関係を見ていきます。すでに詳しく知っていれば、アセット作成の説明まで飛ばしてください。

ターン、回転、スピン、サイクル

RPMは Revolutions Per Minute の略で、1分間あたりの回転数を表します。RPMが一定の時にエンジンの クランクシャフト が1分間に何回、360度回転するのかを表します。消費者向けの標準的な4ストロークエンジンの車であれば、実際のRPMの範囲は、例えば900~6000といったところです。

この範囲の上限は一般的に「レッドライン」と呼ばれ、あるエンジンが部品の損傷なく稼働する最大RPMを定義しています。多くの内燃機関は何らかの レブリミッター が搭載されていて、負荷やスロットルの組み合わせによってレッドラインを上回ることが可能であっても、RPMが超過するのを防ぎます。

なお、RTPCの動作として、ゲームエンジンからWwiseに送られるRTPC値が、そのAuthoringオブジェクトの最大・最小範囲外であると、エンジン音がストップしてしまうことがあるので注意してください。Wwise Authoringオブジェクトは、値のクランプを行わないので、これはゲームエンジン側で実装する必要があります。

下図はWreckfestに登場するエンジンの一例です。RPMでこのBlend TrackのVoice Volumeを自動化しています。私がつくった、ほぼ滑らかにループする様子のスクリーンキャプチャを、ひとまず楽しんでください。このオートメーションについては、また後ほど実践的な例を紹介しながら取り上げます。

WwiseでBlend TrackのVoice Volumeを自動化した事例のスクリーンショットを表示したGIF画像。

通常、WwiseのRTPCオブジェクトのRPMの範囲は、実際値、ノーマライズ値、または実際値を単位Hzに変換した値を使います。3つのうちのどれを選択するかは、完全にユースケース次第です。

ノーマライズしたRPMは、範囲に合わせて実際のRPMをパーセントベースで拡大縮小したもので、パラメータのデータは、0~1や、0~100の範囲とします。この範囲の下限がアイドリング状態を表し、上限がエンジンのレッドラインRPMを表します。

こうしたRPM範囲を設定することで、デザイン上のオートメーションを、実際のRPMから切り離して考えることができます。ゲームエンジン上の実際のRPMの範囲が変わっても、Wwiseで設定済みのオートメーションの仕組みが、下限・上限の範囲内でそのまま機能します。さらに、このサウンドデザインを、多数の車両に対して、コピー&ペーストで適用しやすくなります。

また、実際のRPM値を単位Hzに変換するケースについてですが、ご存知の通り、オーディオツールが主に使うのはHz、つまり1分間でなく1秒間当たりのサイクル数です。手がけるデザインにもよりますが、ゲームエンジンからそのまま提供されるHz変換されたパラメータデータがあれば、Wwiseでデザイン設定にかける時間を、大幅に削減できます。しかも(ここで「ジャジャーン」とスティンガーを挿入 )、プログラミングの魔術師たちにとっては簡単な設定です。

しかし、車両のサウンドデザインを行っていると、この2種類の単位同士の変換が必要になることもよくあります。RPMをHzに直すには60で割り、その逆は60を掛けます。

エンジン負荷は0~1

エンジン負荷を理解するには、車のドライブトレインを考慮する必要もあります。ドライブトレインはクラッチ経由でエンジンにつながる部品系統で、エンジンの出力(トルク)を路面に伝えます。ドライブトレインは、タイヤのグリップといった物理的な影響などを通しても、エンジン負荷を左右します。

エンジン負荷のパラメータデータも、ノーマライズしたRPMと同様に、オーディオデザインに使う場合はパーセントベースで縮小拡大すると良いです。範囲は一般的に、0~1、または -1~1です。負荷は、エンジンが次のどの状態にあるのかを示します。

1. トルクを加えている

2. 既存のトルクに抵抗している

3. 独自に回転している

ゲームのオーディオデザインでは、この3つの状態を、on-load、off-load、neutral loadと呼びます。加速や減速をするのに、エンジンの稼働量が大きくなればなるほど、負荷(load)値が高くなります。loadの3種類の状態について、以下に説明します。

1. on-loadは、スロットルを適用した時に必ず起きます。空気とガソリンの混合気がエンジンへ送られて燃焼します。クラッチをつなげると、エンジンがトルクを加え、ドライブシャフトの抵抗に対抗します。そうすることで、車という物体を設定速度まで加速させる、または設定速度で維持します。

2. off-loadは、スロットルを適用していなく、RPMがアイドリング状態より上にある時に起きます。空気とガソリンが遮断され、エンジンは受動的に、エンジン自体の抵抗(クラッチが離れている時)、またはドライブトレインの抵抗(クラッチがつながっている時)に対抗します。

3. neutral loadは、車が停止中または走行中に、クラッチが離れ、エンジンRPMがアイドリング値まで下がった時に起きます。

neutral loadは、アイドルロードとも呼ばれています。なお、ニュートラルといっても、死んだように100%無効の状態にあるわけではなく、エンジンが最小の稼働状態(アイドリングRPM)を維持するために必要な、最低限の出力を意味します。

オーディオデザインでは、on-loadとoff-loadという2つの側面の音色は明確に異なるので、それぞれ固有のアセットで対応するのが一般的です。音色は、エンジン、ドライブトレイン、そして排気システムから成る構成の、より多くの物理的パラメータに左右されます。

レコーディングからループができるまで

すぐに使える下準備済みのループを一式揃えるには、かなり多くのツールとツールの操作経験が必要になります。ツールとは、収録用ハードウェア、オーディオエディター、DAW環境やプラグインエフェクト、シンセサイザーなどです。

例えば、車のレコーディング作業。スタジオでエンジニアの仕事をしたことがあれば、ドラムキットの収録が車の収録に近いと考えてください。ドラムキットが高速で移動することはありませんが、音を細部まで捉えるのにマルチマイクのセットアップが必要で、出力される音圧レベルは広いダイナミックレンジにおよびます。さらに、作業中は非常にうるさくなります!収録に使うマイクを選んだり、配置や角度を決めたりすることも、言ってみれば一種の芸術です。

そういったことを全て考慮すると、手順を追ったチュートリアルは、ここでは書ききれません。ですが、皆さんが編集に取りかかれるよう、一般的なガイドラインをいくつか提示できます。一部のトピックについては、詳しく取り上げたリンクをこのブログの最後に掲載します。

車両のレコーディングがいくつかあるとします。それをループベースのエンジンデザインに使えるようなアセットにするには、アセットが、以下を満たす必要があります。

1. ループ全体にわたり、ピッチができる限り静的に保たれている(安定したRPM)

2. 「自然なRPM値」が分かる(アセット録音時のRPMなど)

3. シームレスにループする

また、開始フェーズが、アセットセット全体を通してできるだけ一貫するように、アセットを編集します。実際のエンジンサイクル(シリンダーの燃焼開始)は、収録された波形を見ればはっきりと分かることが多いのですが、このサイクルの開始フェーズを可能な限り、アセット間で維持します。波形の分割を始める前に、レコーディング全体の波形を詳細に確認し、そのエンジンのサイクルの形と、RPMに伴いどのように変化するのかを、ある程度把握しましょう。任意のRPMにおけるサイクルを1つ、切り出せるか試してみましょう。

なお、on-load、off-loadのアセットを作成する際に、この2つのレイヤーの、オーバーラップする部分のアセットのnatural(自然な)RPMを一致させる必要はありません。RPM、つまりピッチを合わせることは、Wwise Authoringで設定します。

細かな分割でレベルアップ

on-load、off-loadのセットと言えば、エンジンと排気が別々に収録されていることもあります。その場合は、どちらも専用のon-load、off-loadを作成すれば(合計4セット)、サウンドデザインがゲームワールドのシミュレーションにつながりやすくなり、最終的にプレイヤーの没入感が向上します。

アセットがこのように分割されていれば、アセットごとのトーンやミックスのバランスなどを、カメラの位置と角度と距離に基づいて制御でき、障害物に配慮することもできます。また、Wwiseプラグインを追加して、それぞれのレコーディングを別々に処理することも可能です。

現実の世界の例として、エンジンをかけたまま停車中の車の横を通る時のことを考えてください。あなたの位置と車までの距離によってエンジン音が大きく変わりますが、それは主に排気管との位置関係の影響です。排気管がシャーシーの向こう側にあれば、排気管を、一定のコーン減衰を設定したエミッターとすることで、排気管からあなたの耳へのラインオブサイト(line of sight)が遮られます。

このような特徴をデザインに取り入れることができれば、インゲームの車のリアル感が増します。

完璧なピッチ

走行する車両のレコーディングを使ってアセットを準備する時に、 ループ全体にかけてピッチをある程度一定に保つために、ピッチをフラットにさせる必要が出てきます。

Cockos' Reaper に含まれるJSプラグインの Spectrograph Spectrogram Meter や、Voxengoの Span VST など、周波数のビジュアライザーをお使いのDAWで実行すると、ピッチの変化をトラッキングする際に便利です。Sonic Visualizer を使えば、最も顕著な周波数と、その正確なチューニングをトラッキングすることもできます!

どのツールであれ、このようなものを使えば聞こえた内容を視覚的に確認できます。そうすれば、natural RPMを見つけ、ピッチが問題ない程度に安定するように編集できます。

では、例を見てみましょう。以下は、Wreckfestに登場する車両の、1つのループアセットが、繰り返しループしている時の出力を可視化した、Spanのスクリーンキャプチャーです。これは排気とエンジンのレコーディングの静的ミックスのアセットで、長さが約3.5秒、natural RPMが2910です。

調波のピークを確認できるGIF。

私のカーソルが、はっきりと目で確認できるピークを順に指していますが、だいたい195 Hz、380 Hz、790 Hzを中心としたピークです。すぐに気付いた方もいるかもしれませんが、これらの数値は、どうも調和関係にある一連のトーンのようです。

周波数のピークは、さまざまな理由(負荷の量や種類など)で変動しますが、調和関係にあるピーク群が大幅な横方向の動きを見せたら、それはピッチの変化を表しているので、対応が必要なアセットです。このような動きを察知できれば、ピッチをフラットにするための、アセットに合ったオートメーションを作成できます。

アセットのピッチをフラットにする必要がある場合は、変更量を、合わせて半音3つ以下にすることを推奨します。これを超えると、ピッチを修正するアルゴリズム自体が引き起こすノイズが、はっきりと聞こえる恐れがあります。変更量が少なければ少ないほどよいです。

図中のHz値を基に、特にエンジン音を収録した際の、natural RPMとHzの変換について考えます。2910というRPMを使ってHzに変換すると、2910÷60=48.5 Hzです。これに4を掛けると、48.5×4=194 (Hz) で、ちょうど私のカーソルの指す一番低いピークに該当します。さらに、48.5×8=388 (Hz) 、48.5×16=776 (Hz) です。これらも、Spanで可視化されている推定周波数と、だいたい一致します。

さて、なぜ4を掛けたのでしょうか?それは、4ストロークエンジンの基本周波数(Hz)の計算式が以下だからです。

(Rpm÷60) × (気筒数÷2)

気筒数÷2となるのは、4ストロークエンジンの場合、エンジンサイクル1回に対し、クランクシャフト2回の回転が必要だからです。図中の例に使ったのは、8気筒エンジン(5L V8)のレコーディングです。つまり、私がカーソルで指しているのは、ルート、第2高調波、そして第4高調波だったのです。第3高調波(582 Hz)も確認できますが、他と比べて、かなり低いレベルにあります。

いくつだと多すぎ?

収録の特性以外に、ループの数や長さも考慮する必要があります。沢山の長いループから成るセットを、on-loadとoff-loadの両方に使うと、サウンドデザインのメモリーフットプリントが膨らみます。常にケースバイケースで検証しないといけないので、ループの数と長さの最適なバランスが見つかるまでは、オーディオエディターとWwise Authoringの画面を行ったり来たりすることが多々あるかもしれません。

ループの数に関しては、natural RPMをまず手始めに、だいたい1000~1500の間隔で配置してみるのがお勧めです。収録した車の活発さによっては、特定のRPM範囲内でニュアンスを捉えるために、さらに間隔を狭める必要があるかもしれません。間隔が狭いほど、ランタイムのピッチ修正が減ります。

RPMの範囲全体を2、3個のループでカバーしようとすることだけは、やめてください。ループが、本来のピッチを大幅に超える範囲にまで再生されてしまい、はっきりと分かる欠陥が音に追加されます。

ひとつ、細心の注意を払って欲しいのが、エンジンの吸気やラジエーターのノイズを多く含むレコーディングです。吸気音はRPMとともに増加し、車種によってはラジエーターがRPMに関わらず常に一定の速さで稼働するなど、色々あります。サンプリングしたノイズは、ピッチを整えるとすぐに悪化し始め、ピッチをフラットにするエフェクトと、ゲーム内のRPM・ピッチ変換を組み合わせると、一層ひどくなります。踏んだり蹴ったりです!

もしノイズの要素をたくさん含めるのであれば、ループの間隔をどうするのか、特に注意を払ってください。ノイズを別レイヤとしてプロシージャルで実装すれば、なお良いです。現実世界では、吸気音のトーンの変化は、どちらかというとベルタイプのEQブーストとして起き、比較的静的な周波数帯域におよび、時には軽く共鳴するような場合もあります。

ループの長さは、1つの目安として、4秒以上にしてみます。それより短いとループ内の繰り返しが顕わになり、natural RPMを上回る場合はもっとそうです。ギアを上げると、エンジンの回転数がニュートラルの時よりもゆっくりと上がるため、ループがさらに目立ちます。もしnatural RPMをそれほど超えることがなければ、長さが4秒未満でも問題ありません。

シームレス感を損なわずに

どんなエンジン音でも、シームレスにループさせる唯一の正しい方法は、昔ながらの、こちらのオーディオ編集の技に限ります。

つまり、レコーディングを、既知の的確なゼロクロス点で分割し、その前後を入れ替え、視覚的に確認しながら調節して、フェーズに合ったクロスフェードにするのです。

この動画では、Reaperを使って、ほぼ一定のRPMエンジンのレコーディングを編集していますが、最近のオーディオエディターであればどれでも大丈夫なはずです。動画のループが完璧でないのは、気にしないでください。

レコーディング内容によっては、クリップを複製して反転するなどの編集テクニックで、収録されている鋭いトランジェントが逆に再生されてしまったり、複数ループのセットの中でフェーズが分断されてしまったりすることがあります。このようなエフェクトは、絶対に回避したいものです。ループの中に、ピッチをフラットにすることのノイズやその他のテキスチャが、フェードイン・フェードアウトしている場合は、クロスフェードを長くしてみてください。

最後に、上の動画ではやっていませんが(!)、あとで見た時に分かるように、必ずnatural RPMとload状態をアセットのファイル名に入れてください。Wwiseでオブジェクトを設定する時に必要になります。数か月後、数年後に自分のアセットを見た時に、ここで時間をかけてファイル名を考えたことを、本当に良かったと思えるはずです。

次回は、実際にWwiseでループアセットを設定してみます。このトピックに関するご意見があれば、コメント欄で教えてください。

それではまた! :)

リソース

車両のレコーディングセッション(計画、準備など):Matt Bauerの、Mafia 3の車両オーディオ
車両のレコーディングのヒント(マイク配置など): Chris Jojoの、Dirt 4のサウンドのキャプチャー
エンジンレコーディングの編集ヒント(Izotope RXを使った可視化):Rory Walkerの、FMODチュートリアル
レーシングゲームのサウンドデザインのヒント:Nick Wiswellの、長めのQ&Aセッション
プロ仕様の無料車両レコーディング:Sonniss.comの、GDC Soundpackアーカイブ

アルト・コイヴィスト(Arto Koivisto)

オーディオデザイナー、コンポーザー

Bugbear Entertainment Oy

アルト・コイヴィスト(Arto Koivisto)

オーディオデザイナー、コンポーザー

Bugbear Entertainment Oy

学際的で人の好い、音や音楽や物事の仕組みを心から愛する人間。90年代後半に作曲と音楽制作を手がけて以来、サウンドの世界にますます深く入り込む。長年にわたり、さまざまなプロジェクトに取り組み、舞台公演、ビデオ制作、ビデオゲーム『AG Drive 』などでサウンドデザインや作曲を担当したほか、レコーディングスタジオセッションのエンジニア、ライブ公演のミキシング、小さなインディーレコードレーベルの共同オーナー兼代表として音楽のマスタリングと制作などに携わる。2013年にゲームオーディオデザインに目を向ける。

http://elbowski.com

http://bit.ly/FU4-Elbowski

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

WwiseとREAPERの連携(パート2)ReaOpen

9.6.2020 - 作者 二コラ・ルキッチ(Nikola Lukić)

LumoteのVFXをWwiseで動かす

Wwiseユーザーランドのみんな、こんにちは!私はカナダのバンクーバーにあるStudio X Labsのオーディオディレクターのポール・ラスケイ(Paul...

28.7.2020 - 作者 ポール・ラスケイ(PAUL RUSKAY)

ループを使ってエンジン音をWwiseでデザインする パート2

27.4.2022 - 作者 アルト・コイヴィスト(Arto Koivisto)

Wwiseライセンスと製品価格のフィロソフィー

- 気になるしくみ...

26.3.2024 - 作者 マイク・ドラムルスミス

AudioLinkと共に挑む冒険

11.4.2024 - 作者 ピーター・ドレッシャー (PDX)

ボイスデザインの世界を一気に紹介

9.7.2024 - 作者 チャールズ・ペイトマン

ほかの記事

WwiseとREAPERの連携(パート2)ReaOpen

LumoteのVFXをWwiseで動かす

Wwiseユーザーランドのみんな、こんにちは!私はカナダのバンクーバーにあるStudio X Labsのオーディオディレクターのポール・ラスケイ(Paul...

ループを使ってエンジン音をWwiseでデザインする パート2