2 ポイント 投稿者 GN⁺ 2025-07-27 | 2件のコメント | WhatsAppで共有
  • ゲームでの車両実装は、厳密な物理エンジンよりもプレイ体験を重視する
  • レーシングゲームやシミュレーターごとに、車両操作の感覚と没入感は大きく異なる
  • 車両シミュレーションは、エンジン/ギアボックス、タイヤ、シャーシの3つの構成要素から成る
  • タイヤモデリングとスリップの概念が、現実的な走行感を実現する鍵になる
  • 開発者はゲームコンセプトに合った単純化と抽象化の水準を自ら定義する必要がある

車両がゲームで特別な理由

ゲーム内の車両は、さまざまなジャンルで重要な体験要素として使われる
非現実的な操作でもリアルな運転シミュレーションでも、どちらも「運転している感覚」を伝える
たとえば Mario Kart と Assetto Corsa は根本的に異なる体験を目指しているが、どちらも車両プログラミングの本質は同じである
現実の物理法則を正確に再現することよりも、ユーザーが期待する運転の感覚をどう伝えるかに重点が置かれる
開発者の目標は「正確なシミュレーション」よりも、意図した体験を設計することにある

初期の試行と教訓: AV Racer

AV Racer の開発初期には、単純なニュートン力学モデルで車両を動かしていたが、実車のような感覚は得られなかった
旋回、ドリフト、角速度などについてハードコーディングやパラメータ調整を繰り返した
経験的な「滑る感覚」は演出できたものの、極端な状況や実際のドライバーの期待には届かなかった
実際の車両物理とドライバー体験への理解が不足していると、根本的な限界に突き当たる
最終的には、きちんと実装するために現実の車両力学の原理を研究することになった

ゲーム用車両シミュレーションの構造

ゲーム内の車両は、エンジン(およびギアボックス)、ホイール/タイヤ、シャーシという3つの概念的要素に分けられる

エンジン(ギアボックス含む)

  • スロットル、ギア変更などの入力を受け取る
  • トルクと RPM を算出し、ギア比に応じて変換する
  • 車輪と相互フィードバックする(つまり、エンジンと車輪の双方向同期)

タイヤ(ホイール含む)

  • エンジントルク、ブレーキ、ステアリング、荷重、路面摩擦など多様な入力を受け取る
  • タイヤと路面の接地点で、すべての力が発生する
  • タイヤモデリング(例: Pacejka Magic Formula)によって現実的な力を実装する

シャーシ

  • 物理エンジンにおける剛体ボディの役割を担う
  • タイヤの力、空気抵抗、重力、衝突など外部の影響に反応する
  • 車両全体の運動を決定し、タイヤ荷重の変動にも影響する
構成要素 主な入力 主な出力
エンジン/ギアボックス スロットル、変速入力、車輪速度 回転トルク、RPM
タイヤ エンジントルク、ブレーキ、ステアリング、荷重、摩擦 シャーシへの力、エンジン-ホイール同期
シャーシ タイヤの力、空力の結果 ホイール荷重、全体移動

実車のようにあらゆる細部の物理を 100% 正確に実装するのは現実的ではない
実際の自動車メーカーの研究所でもない限り、ほとんどのゲームやシミュレーションはブラックボックスモデルや公式、単純化されたアプローチを用いる
したがって重要なのは、何を省略し、何を強調するかを設計者が決めることだ

エンジンとドライブトレインの設計

エンジン(トルク算出の中核)

  • 実際には非常に複雑だが、コード上では入力(RPM、スロットル)→ トルク出力という単純なブラックボックスモデルで構成できる
  • トルク/出力カーブは数値やグラフとしてパラメータ化でき、さまざまな性格のエンジンをシミュレーションできる
  • 例: Desmos などでカーブを直接設計し、「エンジンのキャラクター」を調整できる

ギアボックス

  • ギア比テーブルを使って簡単に実装できる
  • ギア変速は車両の加速特性、最高速度などを決定する
  • 単純だが、プレイ体験に大きな影響を与える
ギア 比率
R -2.92
N 0
1 2.50
2 1.61
3 1.10
4 0.81
5 0.68

エンジン & ホイール RPM の同期

  • エンジン RPM駆動輪の角速度 は相互に連動する
  • 2つの状態変数の差に基づき、微分方程式で数値的に計算する
  • 「目標値に追従する」形で、フレームごとに徐々に一致させる

これにより、アーケード型にもシミュレーター型にも拡張可能になる
プレイヤーがエンジンの各種パラメータ(例: カムプロフィール、ターボなど)を調整する際、サウンドや出力カーブの変化と結び付けられる
実際そのままのエンジン運動を模倣しなくても、原因と結果の明確さを伝え、インタラクション体験を強化できる

タイヤモデル

タイヤの役割

  • 車両が実際の路面と接触する唯一の部分である
  • 加速、制動、コーナリングなど、すべての力はタイヤの接地面で生成される
  • 弾性変形と摩擦特性を中心に力が生まれる

ロンジチュード(加速/制動)力とスリップ率(Slip Ratio)

  • タイヤは静止摩擦の状態で最大のグリップを発揮し、限界を超えると**動摩擦(スリップ)**へ移行する
  • スリップ率は、車輪の回転速度(駆動/制動)と地面に対する移動速度の差から算出される
    • スリップ率 = (ホイール角速度 - 自由回転角速度) / 自由回転角速度
  • 一般に加速時は車輪が地面より速いとき、制動時は遅いときにスリップが発生する
  • スリップ率に応じたグリップ変化はグラフのカーブとして表せる
  • ある範囲まではグリップが増加し、ピークを過ぎると急激に低下する

スリップ率を反映した力の算出式(Pacejka Magic Formula など)

  • スリップ率を入力として受け取り、複雑なカーブ(パラメータ化された正弦/アークタンジェント)を出力する式を利用する
  • タイヤごとに個別計算が必要となる

ラテラル(コーナリング)力とスリップ角(Slip Angle)

  • コーナリング中は接地面が変形し、スリップ角が発生する
    • スリップ角 = タイヤの実際の進行方向と、車輪が向いている方向との角度差
  • スリップ角が大きくなるほど徐々にグリップが増えるが、限界を超えると滑り始める
  • スリップ角とグリップの関係も独特のカーブを描く
  • 荷重、摩擦、動的変化など多くのパラメータが影響する

アンダーステア/オーバーステアなどの現象

  • アンダーステア: 前輪のスリップ角が後輪より大きいとき、車が意図より曲がらない
  • オーバーステア: 後輪のスリップ角がより大きいとき、車の後部が外側へ滑り出す
  • 適切なタイヤモデルさえあれば、こうしたハンドリング特性は自然に発生する

ロンジチュード/ラテラル力の相互制限(Friction Circle)

  • タイヤが加速/制動とコーナリングの2方向に同時に力を使うと、それぞれの方向の最大値が相互に影響し合う
  • フリクションサークル(circle/ellipse): 2つの力ベクトルの合計は限界を超えられない
    • (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
  • 例: 急ブレーキと急操舵を同時に行うと、制御を失いやすい
  • 現実のタイヤは曲線的かつ非線形なので、実データに合わせたパラメータ補正が必要になる

コード内での扱い

  • 各タイヤでロンジチュード/ラテラル力を個別に算出する
  • 2つのベクトルを合成し、仮想的なフリクションサークル内に正規化(スケーリング)する
  • パラメータを動的に調整すれば、高度なハンドリング変化も容易に試せる

車両全体の物理エンジン統合

  • タイヤの力 + サスペンション出力 + 外部影響(重力、ドラッグなど)をシャーシに集約する
  • ニュートンの運動法則により、毎フレーム加速度と速度を更新する

拡張可能な追加要素

  • サスペンションジオメトリ: キャンバー、キャスターなど
  • 高度なタイヤ力学: 温度、摩耗、膨張、荷重変化など
  • エアロダイナミクス: ダウンフォース、ドラッグ、自動調整スポイラー
  • 駆動系/差動装置、ABS、ESP、操舵制限 など
  • 必要に応じて複数の書籍を参照: Race Car Vehicle Dynamics (Milliken), Mechanics of Pneumatic Tires (S.K. Clark)

結論

以上のモデルだけでも、実車に近い挙動をするゲーム用車両の土台を実装できる
追加のディテールは、開発目標や必要性に応じて拡張可能である
重要なのは、現実から得た基本原理の単純化/抽象化と、プレイ体験中心の設計思想である
質問や意見、修正提案があれば連絡してほしい

2件のコメント

 
dogtree 2025-07-27

「車両で車両をプログラミングする」と読み間違えて、これはちょっと危険なんじゃないか?と思いましたね

 
GN⁺ 2025-07-27
Hacker Newsのコメント
  • 興味深いのは、実際にはエンジンが最も多くの可動部品を持っているのに、コード上ではむしろ自動車シミュレーション全体の中で最も単純な部分だという点。というのも、エンジンの核心的な役割はトルク計算機だから。複数の入力を受け取り、回転トルクという1つの出力だけを返すブラックボックスのようなもの。AngeTheGreatのエンジンシミュレータ動画シリーズはぜひ勧めたい。リアルタイムで動くほど最適化されていて、実物のようなエンジン音まで生み出しているのを見ると本当に驚かされる。AngeTheGreat エンジンシミュレータ動画 参照

    • ゲームAutomationは、エンジンビルダー/シミュレーションが非常に深く作り込まれている。いろいろなエンジン実験が本当に楽しく、サウンドシミュレーションの部分でもAngeTheGreatの動画で扱われている概念を一部取り入れている

    • Houdiniでキューブをアニメーションさせるクラシックな例を思い出した。リアルタイム内燃機関シミュレーションには、予想外のことが起きる面白さがある。Houdini キューブアニメーションの例

    • 自分がプログラミングを始めるきっかけになったのは、父がBASICでエンジンシミュレータを書いていたことだった。機械工学エンジニアだった父は、さまざまなエンジン設計のトルクカーブを比較したがっていた。CIRCLELINEコマンドで、ピストン、クランクアセンブリ、クランクシャフトのワイヤーフレームを1秒未満のフレーム間隔で動かしながら描き出しているのを見て、コンピュータで何かを描いて動かせるという事実に衝撃を受けた。この人が、より良いレーシングカーのサウンドを作るために同じことをやっていたというのが本当に印象的

    • EVモーターは実際かなり単純では? エンジンは小さな爆発を使ってトルクを生み出すぶん、高価で複雑だ。だからゲーム内のほとんどの車がEVのように動いているのではないかと思う。あるいはICE(内燃機関)をもっと正確にシミュレートしない限りは

  • 自分はArmy of Twoで車両シミュレーション全体を担当していた。この記事は良い入門書だ。Pacejkaのタイヤモデルとトランスミッションのディファレンシャルを取り入れたことで大いに助けられた。それに加えて意外なのは、アンチロールバーの物理シミュレーションとサスペンションが「楽しい」運転感を作るうえで非常に重要だということ。これがないと走行が滑るような感じになり、没入しにくくなる。デモ動画にもその感覚がある。アンチロールバーとサスペンションを実装しないと車が簡単に横転するので、タイヤのスリップや路面摩擦の設定ばかりいじることになるが、かえって運転体験は悪くなる

    • この情報は本当にありがたい! アンチロールバーが基礎モデルでそこまで重要だとは知らなかった。関連内容をもっと勉強して、うまく実装できたら記事にも追記するつもり

    • 最近自分の車のサスペンションに問題が起きて、「楽しくない運転」を身をもって体験することになった。この話にはいっそう共感する

  • これは、Flightleというゲームを作っていて自分が実際に学んだことととても似ている。モバイル向けの横スクロール飛行シミュレータを作ったのだが、飛行機の動きがあまりにも不自然で、腹を立てて「こんなの何が難しいんだ?」と思い、自分で作り始めた。飛行の原理を勉強していくうちに、適切な抽象化レベルが重要だとわかった。非現実的すぎると面白くないし、現実的すぎるとプレイバランス調整が難しい。Flightle リンク

    • もうコメントを編集するには遅いけれど、詳しい経験のまとめを別記事にした。横スクロール飛行シミュレータ制作記 を見てほしい。ちなみに、その後で飛行機を点ではなく、2枚の翼を棒でつないだ構造に変えてみたのだが、面白くチューニングするのにものすごく苦労した。もっと技術のある人ならうまくやれた気がする

    • ゲームは楽しく遊べた。デスクトップユーザー向けに、マウスのスクロールホイールでスライダーを操作できるようにしたらどうだろう

  • 以前iOS向けに、車とドリフトをシミュレーションするゲームを作ったことがある。SpriteKitベースだったが、2Dゲームエンジンならどこでも簡単に実装できる。基本的なアイデアは、前方の2つの車輪をピンジョイントで長方形の車体につなぎ、車輪に力を加えるというもの。力の角度は次のように計算する: x = force * cos(bodyRotation + wheelRotation) y = force * sin(bodyRotation + wheelRotation) ここにスキッドパーティクルも追加した。ドリフトは車輪と車体のダンピング値を調整して表現した。Drift Mania Infinite Car Racer アプリ

    • ゲームは本当に雰囲気がある! すぐ始められる点が気に入った。スキッドパーティクルは実用的だし、ビジュアルも良い。ただ、自分には難易度が高すぎた。壁にぶつかってもリセットされない「禅モード」みたいなものを追加してくれたら、もっと遊べそう

    • ゲームは本当にすごい。アプリ市場は競争が激しいのに、22件も評価が付いているのは大したものだ。どうやって宣伝したのか気になる

    • 「このゲームは驚異的なグラフィックを提供します…」という自虐的ユーモアが本当にかわいい。今すぐダウンロード中

  • この記事は心から面白かった。タイヤモデルの部分だけでも何度も読み返したい。シミュレーションやリアリティなど一切不要で、ただ面白さだけを求めるなら、1980年代のアーケードゲームSuper Sprintに勝るものはない。Super Sprint ゲーム情報

  • 自分のノートに保存してあった関連講演資料の一部をコピー&ペーストしておく: Hamish Young, 『Just Cause 4』の車両物理とタイヤダイナミクス Vehicle Physics and Tire Dynamics in 'Just Cause 4' Jan Erik Steel & Patrick Donnelly, 『Skylanders』におけるスーパーチャージド車両物理 Supercharged! Vehicle Physics in 'Skylanders' Edward Pereira, オフロードの科学に関する講演 The Science of Off-Roading Jared Cone, 『Rocket League』の物理学 It IS Rocket Science! The Physics of 'Rocket League' Detailed

  • 記事自体は素晴らしいが、冒頭部分は少し混乱した。車がゲームの中でさまざまな非現実的体験を提供すると言う一方で、銃はそうではないと主張している点に疑問を感じる。実際には、ゲームには多種多様な非現実的な銃があふれている。しかも、車の運転に対する期待は直接経験ではなくメディアや文化的な間接経験から得ていると述べているが、むしろそれは銃のほうに当てはまる話では? ジャンプだってゲームでは非常に多様な形で処理されるが、自分のジャンプに対する期待は実際に「跳んだ経験」から来る部分のほうがずっと強い

    • FPSゲーム制作の経験があまりないのだと思う。実際の銃器はゲーム内の体験とは違う。ゲームが実銃とまったく同じだったら、もっと面白くなくてストレスがたまるはずだ。レーシングゲームも同様で、面白さのためには現実を適度にねじ曲げる必要がある

    • これは「リアリズム」の問題ではなく、「もっともらしさ(verisimilitude)」の問題だと思う。プレイヤーにとって「信じられる」体験を作ることが重要。ゲーム内の銃は現実とは違うが、力強く脅威的に見えるというファンタジーを優先している。ジャンプもまた、現実的根拠があるわけではないが、ゲームの目的に最も合う形で設計される。一方、車のように物理的な正確さやシステム化が可能な領域では、現実的な描写を志向し、産業用シミュレーションと比較できるほどになる。しかし、人間の動き、経済システム、戦闘の流れなどは、そのレベルの現実的アプローチが難しいため、はるかに漫画的な表現が多い。ゲームデザイナーは、プレイヤーの期待とゲーム全体の目標に合うよう適切に折り合いをつけなければならない。細部のリアリズムばかり追って全体構造を壊してしまうのは、よくある落とし穴だ

    • FPSの例は壇上で急いで思いついたものだったのだけれど、改めて考えると良い例ではなかったと気づいた。指摘してくれてありがとう

  • 坂道、傾斜路、サスペンションといった要素が抜けているように思える。Unreal Engineには非常に単純な車両デモもあるし、実際のサスペンションモデルを持つデモも存在する

    • 発表と記事の最後のほうに、実際のエンジンの現状を見せる短い動画があり、その動画には坂道や傾斜路などさまざまな地形が実装されている。発表では単純な平面グリッドを使っている。サスペンションも実装されているが、車専用の特殊問題というより、単に重量を支えられるようにする一般的な機能なので、発表時間と流れの都合で深くは扱わなかった

    • WassimがQAで触れていたように、サスペンションは物理エンジンが自動的に処理し、その影響がタイヤ荷重に反映されることでタイヤの力にも自然に影響する構造になっている

  • Rocket Leagueの車両物理に関する良いGDC講演がある。Rocket League 物理講演 参照。ちなみに自分はRocket Leagueではゲームクライアント担当ではなく、別の部分を担当していたチームメンバーだった

  • この記事を読みながら、レース物理学に関する良い講演を思い出した。Andre Marziali - Physics of Racing