Track Collisions
残念ながら、我々があつらえたトラック表面に対しては、新しい凸形状シェイプはスフィアモデルのように容易ではありません。
トラックデータに基づいた各スフィアにプレーンを構築するのは比較的簡単でした。これは効率的ではありませんでしたが、マシンで使ったスフィアを多く使えば動かすことができました。また、バンプマップから細かなディテールをプレーンに適用するのは便利でした。
しかし、凸形状シェイプを考慮したとき、トラック表面を平面に縮小するのは現実的ではありません。長さのあるシェイプは上り下りのあるトラックの一部をまたいで引き延ばされる可能性があり、これは平坦な面で補足することはできません。
前述したようにほとんどのゲームでは低解像度の三角メッシュを使って環境を表現しています。これは GJK シェイプのより実用的な表現ですが、対応が必要な独自の問題があります。
我々の場合、高度なディテールを必要とします。要求される忠実性に到達するためには、メッシュのテッセレーションが少なくとも 0.5 メートル以内となることが必要です。ニュルブルクリンクのようなトラックでは、約 500万の三角メッシュが必要となり、これらの三角メッシュを格納するだけで約 100 MB を使います。
メッシュのコリジョンクエリーを高速化するためのデータ構造を使うこともできますが、さらに貴重なメモリを占有することになります。我々の初期の試みは、以前のシステムと比較して膨大なデータとパフォーマンスオーバーヘッドに見舞われてしまいました。
多くの難題のあと、我々自身の独自データ構造を設計できました。これは我々の高レベルなディテールに対して、十分コンパクトで効率的でした。
メッシュデータを作成するために、トラック定義パラメータを読み込んで、多くの作業後に独自フォーマットで最適化された三角メッシュを生成する前処理ツールを作成しました。このツールは特徴的なグルーブや転調を保ち路面全体を一定の精度でテッセレートすることを徹底します。
トラックのどの部分でレースが進行しているかに関係なく、一貫性は安定したパフォーマンスを保つのに役立ちます。既存システムではタイトコーナーや他の細かなディテール表現のエリアではパフォーマンスが低下しましたが、今ではすべてのエリアで同じレベルのディテールで同じパフォーマンスを発揮できるようになりました。
こちらはそのようなトラックメッシュの一例です。
タイヤモデルでメッシュに必要とされる細部まで見ることはできませんが、それなしではどのトラックもそのキャラクターを失ってあまりにスムーズな人工物のようになってしまうでしょう。
メッシュアプローチのアドバンテージはパーティクルのコリジョンモデルへの順応性にあります。新しくパーティクルのエフェクトを導入したとき、早くメッシュを使うことができました。新しくコリジョンモデルとダメージシステムを作り直すのを待つ必要はありませんでした。メッシュは既にそこにあり、使用中です。
Comments