エンジン音はゲームオーディオのデザインにおいて、主に以下の理由から常に難題とされてきました。
1. 要求される品質の高度化と、高価なオリジナルアセットの費用
レーシングゲームが出現してからしばらく経ちますが、エンジン音は常に中心的な存在です。どのゲームスタジオにも独自のアプローチがあり、専用のゲームエンジンを社内開発するところもあるくらいです。時代の流れと共に、プレイヤーは今まで以上のサウンド品質を求めるようになっています。しかも独自アセットは容易に入手できるものではありません。高級車両は収録用に1台レンタルするだけでもかなりの費用がかかります。レコーディングする時はスタジオでマイクを数本用意するだけというわけにもいかず、収録するために必要な空間や技術的要件が細かく制約されます。
2. 複雑で多様なサウンドメカニズム
走行中の車両では様々な部品が同時に音を出しています。音の出し方も変化の仕方も異なります。ゲーム内の車両のエンジン音を作成して動きを不自然にならないようにシミュレーションするには、サウンド設計・制作の卓越した技量はもちろん、内燃機関(ICE)、トランスミッションギア、クラッチ、ギアボックス、ターボ、サスペンション、排気管などの各パーツの動きの基盤となる仕組みを深く理解することも必要です。
3. ゲームオーディオのインタラクティブ性の難しさ
ゲーム中の車両の走行音はゲームの進行状況や、車両ステータス、プレイヤーアクションに合わせてリアルタイムで変化する必要があり、同時に物理の法則や聞く側の習慣に準拠していなくてはなりません。ところがゲーム内のサウンドの大半はサンプル・保存・トリガー・再生という単純なロジックで動いていることが多く、サウンドサンプルは固定されています。最近のサウンドエンジンはサンプル、ピッチ、フィルターなどを制御して音を変化させることができるものも多いですが、レーシングゲームにおけるオーディオのインタラクティブ性に対する要求は高まるばかりで、対応するのは容易ではありません。
4. オーディオプログラミングの高度な要件
エンジン音がうまく動くためには車両エンジンをシミュレーションするプログラムカーネルが必要です。実際の走行動作を細かく再現してくれるサウンドエンジンに、さまざまなパラメータを提供するためです。
私は最近Wwise向けREVプラグインの研究をして、UE4のレーシングゲームテンプレートを使ったデモプロジェクトをつくってみました。なかなか上手くできたと思います。また比較的低コストでレーシングエンジン音を作成できる可能性を証明できました。そこで自分のプロセスと成果をみなさんに紹介したいと思います。
REVプラグインの紹介
Crankcase Audio社のREVは、グラニュラーシンセサイザーによって本格的でパワフルなエンジン音を作成する手段をWwiseユーザに提供してくれます。REVやそのパラメータについて詳しく知りたい方は、プラグインのユーザガイドを確認してください。
以後のセクションを理解しやすくするために、まず以下のREVの主なパラメータについて説明します:
上図に示されているのはREVの一部の主要オプションとパラメータです。青色のボックスは現在読み込まれているエンジンサンプルです。"Import Model"ボタンでほかのサンプルも必要に応じてインポートできます。すぐに使える優秀なサンプルがREVに多数同梱されていますので、ライセンスさえ取得すればご自分のゲームに直接使うことができます。
赤色のボックスはREVの制御に必要なすべてのパラメータで、これを使い自由にエンジン音を調整できます。
• Throttle: スロットル開度が変わった時のエンジン音の変化をシミュレーションします。
• Gain: エンジン音全体の音量を制御します。
• RPM: エンジン回転数による音の変化を制御します。
• Gear: プレイヤーのギアシフト操作を反映します。
• Velocity: 車速による音の変化を制御します。
最初にそれぞれのパラメータに対応するGame Parameterを作成する必要があります。以下はその一例です:
続いてこれらのRTPCを以下のようにすべてマッピングします:
これによってREVはゲームエンジンからパラメータを受け取り、ゲーム内の車両の状態をシミュレートしてリアルタイムに音を出すことができるのです。次にこのエンジン音のイベントを作成し、UE4で実装します。
REVで作成したサウンドをUE4で呼び出す
UE4でAdvanced Vehicleテンプレートのプロジェクトを開き、ブループリントを開いてオーディオ設定を見てください。ループする非常に単純なエンジン音があるだけで、それが車両の走行速度によって変調されることが分かります。
それではこのサウンドを削除し、Wwiseで作成したサウンドを追加してパラメータを変更してみましょう。こうすることで走行速度、ギアレベル、エンジン回転数が読み込まれ、RTPCに送信されます。
UE4はWwiseからくるサウンドを受け、変調します。結果は次の通りです:
REV自体の音響品質が優れているため、エンジン音はよくなりました。ところが全体的な聴き心地は、まだ改善の余地があります。今は一部が非現実的に聞こえてます。例えば車両が比較的早い走行速度に達した時はエンジン回転数が5,700rpmに固定され、音も変化しなくなります。現実世界ではこのようなことはありえません。実際のエンジン回転数は常に変化しています。すべてのICEには必ず燃料カットと呼ばれる保護システムがあり、最大回転数に達した時に燃料供給が強制的に断たれます。これを回避するにはサウンドメカニズムを最適化する必要があります。
この問題を解決するのはかなり複雑です。パラメータをひとつふたつ変えればうまくいくというわけにはいきません。とりあえずゲームエンジンのことは忘れて、ICEの実際の動き方を大まかに把握しておくことにします。
エンジンの音が出る仕組み
ここでは自動車の動的な構造と動作機構をICE、クラッチ、ギアボックスの3つに分けて説明します。
1. ICE
ICEは種類が多く、この短いブログで工学的な構造を網羅することはできません。今回はそのしくみだけに焦点を当てたいと思います。無関係な項目には触れません。シリンダー数やストローク数やロータリーエンジンなどの考え方について詳しく知りたい方は、後で調べてみてください。
最も標準的なレシプロピストンICEを例に見てみます。燃料ガスと空気の混合物が空気吸入口からシリンダー内に入り、スパークプラグで点火すると、ピストンが下に押し下げられてローターが動きます。次に空気排出口が開きピストンが上昇し、燃焼した排気ガスが排出されます。このサイクル全体が何回も繰り返されます。しくみは以上です。
この一連の処理においてゲームオーディオ制作に緊密につながる3つのパラメータが、Throttle、Engine Speed、そしてTorqueです。
スロットルペダルをより強く踏むと、より多くの燃料がICEに入り点火後により激しく燃焼するため、より大きな出力を発生させることができます。
ゲームで車両の音の変化に最も大きく影響するのがEngine Speedパラメータです。
ICEのメカニズムをよく知らない人は、Torqueパラメータを無視してしまうことがよくあります。単純にエンジンから生成される出力の大きさだと思い込み、ThrottleやEngine Speedパラメータに比例していると考えるようです。実はこれは間違っています。
TorqueパラメータはICE動作のサイクルが完了した時点で出力される動力を表すために使います。次の単純化された式を見れば簡単に理解できます:
トルク × エンジン回転数 = エンジン出力
ここでよくある2つの誤解を紹介したいと思います:
• エンジン回転数が上がるとトルクが大きくなる。
間違いです。エンジン回転数が上がりあるしきい値を超えると、逆にトルクは減少します。
• エンジン回転数が高いということはエンジン出力が高く、高出力であることを意味します。
間違いです。低・中回転域ではエンジン出力は増加しますが、比較的高回転域ではエンジン出力は減少します。
トルク、エンジン出力、エンジン回転数の関係を分かりやすくするために、ターボエンジンと自然吸気(NA)エンジンの動作状態を示す以下の2つの表をご覧ください。
Volkswagen EA211 1.4TSIエンジンのエンジントルク出力表
ICEをよく知らない人にとって、上記2点は直感に反するように思えるかもしれません。ところが経験豊富なドライバーはこれを簡単に理解できます。
高速道路を走るときは適切なギアレベルを選択し、中高速のエンジン回転数で走り続けることは、ドライバーなら誰でも知っていることでしょう。ギアを上げたい場合はエンジン回転数が上限に達するのを待つのではなく、少しずつ上げていくのです。前述の通り、出力はエンジン回転数に比例しません。エンジン回転数がある値に達すると、それ以上出力は上がらなくなります。エンジンを効率的に稼働させるにはギアアップしなければなりません。そうすることで同じ燃費でより遠くまで移動することができます(これを燃料の節約、または燃料の効率化と言います)。ただしレースゲームなどでは、エンジン回転数が上限に近づくと変速する場合があります。理由は後ほどお伝えします。
この分析に従うと先ほどのデモ動画でエンジン回転数が上限に達した理由が分かります。トルクや摩擦の設定が合理的ではなかったのです。
レースゲームでは通常、車両が最大速度に近づくとエンジン回転数は最大出力に対応した値となるはずで、これは通常上限値の90%~95%ほどです。上限値を超過するとエンジンが単位時間あたりに提供する出力が減少します。これがギアを上げずにエンジン回転数を上げ続けることができない理由です。トルクカーブや出力カーブを適切に設定しないと、エンジン音の変化が実際の車両の動作と異なってしまいます。そこで私はUE4の車両ブループリントのトルクカーブに以下の修正を加えました。
実はこの曲線は厳密には正確でありません。自分のニーズに合わせて調整してよいのです。このような調整を行うと、すぐに上限値に達してしまうこともなくなります。
ただしほかのパラメータも変更されている場合は、新たな問題が発生するかもしれません。例えばギアアップがスムーズにできなかったり失敗したりするかもしれません。3速から4速にギアアップした時にすぐに3速に戻ってしまうのです。この2つの問題を解決するには、自動車エンジンの別の重要なパーツやギアボックスに目を向けます。
2. ギアボックス
ギアボックスは車両のエンジン回転数と走行速度を調整するために使用されます。下図はギアボックスの仕組みを簡単に表したものです。右側の歯車がギアボックスです。歯車が小さければエンジン一回転で移動する距離が長くなり、エンジンへの負荷が大きくなります。
ギアボックスがあると、同じエンジン回転数でもギアレベルを変えて走行速度を変えることができます。こうしてギアをシフトしてエンジンを効率的に動かせます。ゲームエンジンでは普通、各ギアレベルのパラメータをギア比(Gear Ratio)で調節します。上図を見るとギア比の意味がよく分かります。
それではUE4のギアボックス設定を見て各パラメータの役割を確認していきます。
※表示されているパラメータ値はデモ用なので必要に応じて変えてください。
• Automatic Transmission: 車両が自動的にギアをシフトするか、プレイヤーが手動でシフトするのかを決めるパラメータです。
• Gear Switch Time、Gear Auto Box Latency: ギアシフトにかかる時間をこの2つのパラメータで制御します。
• Final Ratio: すべてのギアレベルに影響するパラメータです。数値が小さければ小さいほど最大走行速度が高くなり、エンジン負荷が大きくなります。
• Gear Ratio: 各ギアレベルにおけるエンジン回転数と走行速度の比率を示すパラメータです。数値が小さければ小さいほど同じエンジン回転数でも走行速度が速くなり、エンジン負荷が重くなることを意味します。
• Up Ratio: Automatic Transmissionモードに設定した時に、エンジン回転数と上限値の比率がこの値を超えると自動的にギアがシフトアップします。
• Down Ratio: Automatic Transmissionモードに設定した時にエンジン回転数と上限値の比率がこの値を下回ると、自動的にギアがシフトダウンします。
ギアボックスの仕組みとパラメータの役割が分かったところで、前述の問題点を解決していきます。
もしAutomatic Transmissionモードで車両のギアシフトのタイミングが不自然だと感じたら、それは各ギアレベルの不適切なGear Ratio設定が原因です。例えばすべてのギアレベルでGear Ratioの設定が同じであれば、各ギアレベルの加速が同じになります。ギアとギアの間で差がありません。
もしギアがシフトアップせずに低いギアレベルに逆戻りすることがあれば、2つのギアレベルのGear Ratioの差が大きすぎるか、エンジントルクが小さすぎます。この場合エンジン負荷が大きすぎて加速に対応できません。そのためエンジン回転数が落ち、車両のギアが自動的にシフトダウンします。
またギアシフトの制御に重要な役割を果たすもう1つのパーツがクラッチです。
3. クラッチ
下図はクラッチ(Clutch)の仕組みを簡単に表したものです。
クラッチは主にICEとギアボックスの協調動作を制御するために使用されます。クラッチがあることで両者をゆっくりつなげたり切ったりできます。エンジン回転数が非常に高いときでも機械的なダメージが発生しません。クラッチが具体的にどのような処理をしているのかはここでは説明しません。私たちサウンドデザイナーにとって大事なのは、クラッチが動力伝達をどのように制御し、ギアシフトのトリガーになっているかということです。
ドライビングシミュレーションのゲームでは、コアユーザ以外がマニュアルのクラッチを使うことは稀です。また非リアルなドライビングゲームではプレイヤーがクラッチを制御することさえできません。制御できるのはスロットル、ステアリング、そしてブレーキだけです。ギアシフトは完全にオートトランスミッションシステムに任せられます。そこで実際の車の運転と同レベルのクラッチシステムを私たちが設計する必要があります。しかしクラッチの正確な使い方を説明するのは複雑なため、少し簡素化させてください。エンジンが車両に動力を供給し始める時にクラッチは接触しているはずです。そしてエンジンが車両への動力の供給を停止させた時に、クラッチを切り離す必要があります。UE4のデモではスロットルを使ってクラッチを直接制御できます。ほかの運転シミュレーション以外のゲームでも同様にすることができます。
UE4の車両モジュールも同じしくみです。スロットルを離すと車両は減速します。エンジン回転数が低下してもギアダウン操作は行われません。クラッチ着脱時に音がどう影響を受けるのかを分かりやすくするために次の動画をご覧ください:
この動画の字幕をオンにしてください。26秒経過でクラッチのつながるエフェクトが聞けます。53秒経過でクラッチを切るエフェクトが聞けます。
現実世界ではクラッチを完全に切った状態でスロットルペダルを踏んでも車は動きません。聞いて分かる通り、この効果音はあまりよくありません。
クラッチが常時入った状態で自動車が減速した時や、ブレーキした時でさえもギアアップ音が鳴りました。これは私たちが求めているものとは少し違います。特にブレーキ時はできるだけ早く停止させ、エンジンへの動力供給を停止したいです。シフトダウンしている時は絶対にエンジン回転数が上がるべきではありません。
よりリアルなクラッチロジックを実現することで、複雑なインタラクションロジックをゲーム内で実装できます。それがなければスロットルだけクラッチを制御することになるかもしれません。クラッチの仕組みとサウンドへの影響が分かったところで、Wwiseに戻って以下のようにパラメータを設定します:
Enableshifting: このパラメータはクラッチを制御するために使用されます。“On”にしておけばギアレベルが切り替わった時にREVがギアシフト音を再生します。“Off“に設定すればギアシフト音は再生されません。これをThrottleパラメータにバインドします。こうすることで、スロットルペダルを踏み込むとクラッチがつながるようになります。
ギアレベルやクラッチやエンジンのパラメータを設定すると、以下のような結果になります。実際の車の運転と基本的に一致します。
ところが今はエンジン音しかありません。まだまだ足りない部分がたくさんあります。次の章では自動車音にさらにディテールを追加していきます。
車両音にさらなるディテールを加える
一般的に車両音は以下のように分類することができます。
ICE、クラッチ、そしてギアボックスについてはすでに説明しました。次に音を出すほかのパーツについて考えます。
1. タイヤノイズと風切り音
タイヤノイズは主にループサンプルを使います。ループにランダムアセットをいくつか追加してバリエーションをつくり、走行速度にRTPCを追加してループのピッチ、ボリューム、トランジションを調整することができます。さらにさまざまな地面素材を作成して、Switchで切り替える必要があります。タイヤと地面の間の摩擦係数を求めるとさらに良くなります。こうすることでタイヤの横滑り音を制御したり、鳴らしたりすることができます。私はここでは摩擦係数を計算していません。ブレーキ時やステアリング時に音を鳴らします。
2. サスペンション
実はサスペンションは種類が豊富です。ここでは音への影響だけについて考えます。サスペンションとは基本的に衝撃を吸収するもので、凸凹道を走行する際に車両の安定性を確保します。段差があるとエンジン音に影響します。サスペンションはタイヤの空気圧に影響を与え、これがエンジン負荷を変化させます。サスペンションシステムに関しては以下2点を行います:
• サスペンションへの負荷に応じて変化する車体揺れの音を作成します。
• サスペンションの揺れがエンジン音やタイヤ音に影響を与えるようにします。
そのためにはまずサスペンションのオフセットパラメータが必要です。5つのRTPCを設定しますが、車輪ごとのオフセットとなる"pianyi1"、"pianyi2"、"pianyi3"、"pianyi4"と、4輪のオフセットの合計となる“zhendong“です。
強度の異なる車体の動揺音を作成し、オフセットレベルや走行速度に応じて変調させる必要があります。
次にサスペンションを使ってエンジン音やタイヤ音を変化させます。
これで段差があれば音が動的に変化するようになります。
3. ターボ
ターボとは実は超高速ファンのことで、エンジンの吸気量を増やし、1回のストロークでより多くの燃料を燃焼させることができ、エンジン性能を向上させるために使われます。トルクの説明の時にターボエンジンと自然吸気エンジンの作動状況を示す2つの表をお見せしました。ターボエンジンの方が最大トルクに達しやすく、より長く維持できます。ここではターボの仕組みの詳細は割愛します。ここではターボがどのような条件で、どのような音を出すのかに焦点を当てたいと思います。
ターボの音はターボの種類によってやや異なります。ただしほとんどのゲームでは高周波のローター音として表現されています。というのもターボ自体が超高速のファンで簡単に10,000rpmほどに達し、100,000rpmを超えることさえあります。
一般的にターボは一定の回転数(rpm)に達すると音を出し始めます。具体的には少なくとも2,000rpmは必要です。ターボ音は回転数が高くないと聞こえません。またターボ音はエンジン音ほど変化しません。
エンジン回転数が下がってもターボ音が止まるとは限りません。一部の高性能レーシングカーではエンジン回転数が下がっても、ターボが動き続けることでターボラグを回避するアンチラグシステムが搭載されています。そのため車種ごとにターボ音をカスタマイズする必要があります。そして普遍的な解決策はありません。
簡素化のために今回のプロジェクトでは例外的なケースを考慮していません。ターボはエンジン回転数に紐づけてあり、ターボサンプルを使用していません。その代わり電動ドリル音を加工してターボの挙動を模倣しています。
4. 排気管
高品質のレースゲームでは排気管の別途作成する必要があります。必要に応じてループさせることができます。ここではゲーム中で特に誇張されるバックファイア音に注目したいと思います。
実際の車両でバックファイアが発生しやすいのは排気量の多い車です。その視覚的・聴覚的な効果はプレイヤーの体験を高める重要な要素の1つです。優れたバックファイア音を作成するには、バックファイアの特徴を分析する必要があります。一般的にバックファイアには以下の3種類があります:
• 安定したバックファイア
シナリオ: 車両が高速で走行し、負荷が高い場合にしか発生しません。
特徴: 安定した継続的な炎。
音: 継続的で安定した燃焼音で、破裂音はありません。
原因: 一部の車両ではエンジン温度が高すぎる場合(負荷が高く回転数が高い)、三元触媒やエンジンシリンダーを冷却するために、シリンダー内に噴射する燃料を増やすことがあります。この時に燃料と空気の混合気で燃料が相対的に多くなるため、不完全燃焼の状態となります。余分な気化した燃料は排気管で空気と出会い燃焼し続けるため、青色の炎が見られます。ゲームでは通常、ニトロ加速などさまざまな超高速走行状態の時に、この安定した炎が利用されます。
• バーストバックファイア
シナリオ: エンジンの吸気量が著しく不足している時(主に高速での始動)や、高負荷で走行中にスロットルを急に抑えられた時に発生します。
特徴: 一瞬の発火のような炎。
音: 爆発音に似たはっきりとした破裂音。
原因: 吸気量が不足してシリンダー内の燃料の燃焼が全く不十分です。排気ストロークの時に燃焼しなかった高温の燃料が、空気流と共に高温の排気ヘッダーと三元触媒コンバータ(再び加熱される)を通ります。気化した高温の燃料は酸素不足のため燃焼できません。そしてこれらのガスが排気口まで来て新鮮な外気に触れると瞬時に炎が上がり、続いてバーストバックファイアが発生します。
•アンチラグバックファイア
シナリオ: ギアシフトし、スロットルを戻した時に発生します。
特徴: 短い炎が弱い爆発と共に発生。
音: 低周波のくぐもった排気管音。
原因: レースゲームでギアをシフトしてスロットルを戻すと、排気量が減少してターボ回転数が低下します。スロットルペダルを踏んで再加速するときにターボラグが発生します。レーシングカーにはアンチラグシステム (ALS)という装置が搭載されています。エンジンが車に動力を供給する必要がない時は点火を停止させ、排気弁を開放した後に意図的に混合気を排気ヘッダーへ流入させます。排気ヘッダ―は非常に高温なため混合気は一瞬で発火します。この大きい爆発の圧が排気ブレードを押し、ターボブレードを高速で稼働させてブースト状態を維持します。こうすれば車の速度が遅くなったりギアをシフトしてスロットルを戻したりしても、ブースト効果が続きます。この種類の炎はエンジン内で発火し、排気管から出ます。このため低周波のくぐもった排気管音になります。
実は私のデモプロジェクトでは排気管音は分けてつくりませんでした。というのも車体に排気管が全くなく、高性能レーシングカーのように感じられなかったからです。そのためのビジュアルエフェクトも一切ありません。バックファイア音はエンジン速度が4,100回転未満になった時だけ発生します。ほかの複雑な音は追加していません。
車の音がどうなったか見てみましょう:
ようやく記事の最初に言及したサウンドエフェクトが得られます。基本的に車が走行する時に必要な音がすべて揃っています。オーディオ品質をさらに改善したいのであれば、前述のすべてのサウンドに関してもっとよいサンプルを探してみてください。高度な制御機能を実行できるようにプログラムを修正することも可能です。
REVのグラニュラーシンセサイザー
ここまでの章では主に車両に音を追加することについて見てきました。この章ではREVのグラニュラーシンセサイザー機能を簡単に紹介します。エンジンサウンド用に自分のグラニュラーモデルを作成する方法について説明します。
まずエンジンサウンドのサンプルを3種類、つまりアイドリング状態のループするサンプルと、アイドリングから最高速度までの均一な加速時に使うサンプルと、最高速度からアイドリングまでの均一な減速時のサンプルを準備します。
次に、REVのメイン画面を開いて"Open in REV.Tool"をクリックし、REVのグラニュラーシンセサイザーに移動します。
"File"をクリックして"Open wav file"を選択します。先ほど準備した一定加速サンプルを読み込みます。REVは共振ピークスペクトルを解析して表示します。
スペクトルが少し乱れているのが分かると思います。これは私のサンプルに機械的な動作音が含まれているため、共振ピークの連続的な変化が少なかったためです。
"Auto tag harmonics"をクリックしてスペクトル内の共振ピークセットを選択します。理論的には理想的な共振ピークは連続的であるべきです。ところが私のサンプルは低品質のため選択されたスペクトルが断続的です。次に"Start Cycle Tracking”をクリックするか共振の範囲を手動で選択します。
ここまでの操作が完了するとREVがスペクトルの解析を行いグラニュラーモデルを生成します。そしてスペクトル上のラインをドラッグすることで、異なる回転数での加速音を聴くことができます。
青い線上の小さい黒の〇は、rpmノードを示しています。変化の範囲を調整するには黒の〇の間の距離を変更します。
スペクトルにズームインして"Select Cycle”を選択すると生成された共振ピーク曲線を修正できるため、不要なセグメントをモデル内から削除します。
最後に"File"をクリックして"Save partial document"を選択します。生成されたグラニュラーモデルがこれで保存されます。今度は減速のサンプルを開き、同じようにグラニュラーモデルを生成します。その後"Model"タブに画面を切り替えます。
すでに作成したグラニュラーモデルと、アイドリング音のループを追加します。"Simulate"をクリックします。これで新しいエンジン音モデルが生成されます。"Simulation"パネルでモデルの調整と確認を行うことができます。
最後に"Save"をクリックして自分の.modelファイルを生成します。
そしてREV画面に戻り"Import Model"をクリックし、自分で生成したモデルを見つけてください。これにより自分が作成したエンジン音をゲーム内で使用できるようになります。
bnkをパッケージ化してUE4でサウンドを再構築すると、新しいエンジン音を入手できます。それでは音を確かめてみましょう。
まとめ
私はこのようにしてREV プラグインを利用してレーシングエンジン音を作成しています。最終的なレンダリングエフェクトはまだ改善を必要としています。エンジン音は自分の日々の仕事のほんの一部で、このようなタイプの音は特殊なのでその制作や研究に関心があります。みなさんからのコメントやアイデアを楽しみにしています!
コメント