
2026/10/07 21:30
2D 車両
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
「Motion Lab」は、1996 年に GFA BASIC で書かれた先駆的な物理エンジンが GTA の車体システムを動力源としていたのを記念し、同エンジンの 30 周年を祝うためのモダンな Web ベースの再現作品です。当時の一般的なシンプルな「ポインタ・フィジックス」と異なり、この JavaScript インプリメンテーションは、リアルなトルクおよび力の相互作用を含む高度な古典的な 2 次元剛体動力学を正確にシミュレートします。本プロジェクトは、教育的目的のためにレガシースタイルを維持しつつ、オリジナルのソフトウェアが後に摩擦に関する推測に基づいた近似的かつ技術的に不正確な車体シミュレーション層を追加したことを認める一方で、「リマスター」された、より美しいバージョンの元のワイヤフレーム美学を提供しています。ユーザーは「Car(カー)」「Spaceship(スペースシップ/通称:Ship)」「Brick(ブリック)」という 3 つの異なるモードを体験でき、これらのモードは歴史的に「Brick モデル」から始まり、「Ship 要素」を含むよう進化し、最終的に「Car 要素」を取り入れた経緯を持っています。体験には、重力やバリアーの有効/無効化に加え、キーボードまたはタッチ入力により制御される GTA スタイルのカメラズームが含まれています。重要なのは、この非公式なプロジェクトが Rockstar Games および Take-Two から独立しており、オフィシャル製品ではなくトリビュートであることです。2026 年の発表を予定している本再現作品は、ユーザーが外部プラグインに依存せず、数十年にわたる技術開発を直接体験することを呼びかけています。
本文
プロジェクト「Motion Lab」:GTA 車両システムの起源と JS リマスター
1996 年夏に作成された 2D 物理シミュレーションのプロトタイプ。後に**『グランド・セフト・オート(GTA)』の車両システム**の基礎となりました。30 周年を記念し、JavaScript で完全再現した「リマスター版」です。
🎮 インストラクション
ブラウザ上で動作するモーション実験室です。
- 操作方法:
- モバイル端末:タッチ操作でプレイ可能。
- PC キーボード:以下のキーで切り替え・設定が可能。
- 数字キー (1-3): モード切り替え
- B キー / クリック: 衝突バリアのオン/オフ
- G キー: 重力の切替(Ship/Brick でのみ有効)
- Z キー: カメラ「デッドゾーン」の有効/無効(車両の追従遅延調整)
- X キー: 速度に応じたズーム切替(高速時カメラが引き、GTA の挙動再現)
⚠️ 免責事項:本作品は『グランド・セフト・オート』シリーズ、開発元「Take-Two」および「Rockstar Games」とは一切関係ありません。無断模倣ではなく、技術的な敬意を表した独立したプロジェクトです。
📜 歴史と背景
- 1996 年 8 月: Atari ST で GFA BASIC を使用して作成。
- 開発経緯: 家庭用コンピューターでのワイヤーフレームデモから始まり、後に C 言語へ移植。
- 2026 年現在: JavaScript による高品質なリマスター版を公開中。
⚙️ システムの仕組み
基本構造:二つの層
システムは以下の 2 つの層から構成されています。
- 物理コア: 汎用性の高い2D 剛体動力学シミュレーション。
- 従来の「ポイント物理学(F=ma)」や回転のハックではなく、トルクを含む正統的な剛体物理を採用。
- 角度・角速度を追跡し、一貫性のある回転を実現。
- 車両層: 物理コアの上に構築された近似モデル。
- タイヤ挙動は技術的に厳密ではないが、「十分良好」と判断された簡易モデル。
- 教育による推測に基づいた設計。
動作モード
剛体の形状(シェル)と振る舞い(ダイナミクス)のみを切り替えることで、位置・運動量は保持されます。
| モード | 特徴 |
|---|---|
| Brick (ブロック) | ポインタードラッグから力を受ける単純な物体。 |
| Ship (宇宙船) | 接着点で推力を追加する挙動(クラシックゲーム『Thrust』風)。 |
| Car (車) | エンジン力・ステアリングを併用し、4 箇所タイヤに抵抗を適用。 |
物理演算の詳細
剛体の動き
- 力は物体の移動と回転を引き起こします。
- 中心を通る力=移動変化のみ。中心から離れた場所への力=回転(トルク)も誘発。
- シミュレーションフロー:力の合計 → トルク計算 → 速度更新 → 位置・角度進捗。
バリア接触処理
- 「点速度」アプローチ: 形状がエッジを横切ると、内部に戻し接触インパルス適用。
- 偏心衝突対応: 進入速度がある場合、スピン(回転)も同時に変化させる。
- 人工的スピンの回避: 平坦な面の接点を検出する際、単一隅を選ばず中間点を採用。
タイヤモデル(近似手法)
- Car モードでは、各タイヤ位置での速度を進行方向成分と横方向成分に分解。
- ローリング抵抗(微弱)と横移動抵抗(強く適用)で滑りを抑制。
- 抵抗力は速度に比例し、上限なし(都合の良い減衰モデル)。
- ステアリング: 前輪の進行方向変更により、同時に物体全体の回転を引き起こす。
- ハンドブレーキ: 後輪のローリング抵抗増加・横グリップ低下。
🛠️ アーキテクチャ概要
システムは入力コントローラと描画レンダラーを分離し、以下のフローで動作します。
[ページ/コントローラ] ↓ (入力) [シミュレーション (固定時間ステップ)] ↓ (更新) [Canvas レンダラー] -> [結果描画]
処理の流れ
- Vehicle コーディネータ: 選択されたダイナミクスオブジェクトに対し、力を適用。
- 状態進化: 剛体の位置と運動を時間ステップで進める。
- 座標変換: シェルの局所的な点をワールド座標に変換して描画。
- 接触検出: バリアに向き合った表面点を検出(バリア接触の解決)。
これにより、ボタン押下が力へ、力が移動へと至るプロセスを明確に追跡できます。