F1 Simulator Track Modelling – Barrier Generation

Posted 3月 20, 2025
Share


Q3D Studios は、モータースポーツと自動車産業を専門とする、英国の小規模な 3Dビジュアライゼーションスタジオです。20年超にわたり、フォーミュラ・ワンチームとの緊密な連携のもと、レース用シミュレータで使用される実在のサーキットのデジタルツイン開発に取り組んできました。この記事では、Q3D Studios のテクニカルアーティストである George Pennyfather が、サーキットのプロシージャル生成パイプラインの一工程である、防護壁について解説します。

モータースポーツ産業では、あらゆる部門において絶え間ないイノベーションとスピードが求められます。シミュレーションも例外ではありません。そのため Q3D Studios 社のチームは、3D パイプラインの効率化を継続的に加速させることに取り組んでおり、その目標達成に最適なソフトが Houdini であることに気が付いたのです。

レースサーキットは不変のものと思われがちですが、実際は全てのコース(特に市街地コース)が常に変化しています。そのため、各レースのたびに、大量のプロシージャルジオメトリを再生成する必要があります。防護壁(とりわけ手作業で配置される「仮設コンクリート壁」)は変更が多く発生します。そこで私たちは、Houdini の高いパイプライン自動化能力 (まだその最大限には達していませんが)を生かし、防護壁生成パイプラインの刷新に注力することにしました。

図1: ルサイル・インターナショナル・サーキット (カタール) のためのシミュレータトラック

以前は、カーブやアトリビュートペイントといったユーザ入力の多いノードを使い、LiDAR データから防護壁の位置を手動でトレースし、スプライン上に広告用のアトリビュートをペイントしていました。この方法は非常に手間がかかるうえ、安定性にも欠けており、防護壁スプラインに調整を加えるたびに、たびたび作業をやり直す必要がありました。そこで新たなパイプラインでは、防護壁のトレース作業の時間短縮と、入力を更新した際の広告配置の安定性の向上に注力することにしました。



防護壁トレースのためのソリューション: Barry

シミュレータ用サーキットのモデルを制作する際、実際のサーキットの LiDAR フルスキャンデータを取得することが多くあります。このデータには非常に価値のある情報が詰まっており、私たちは、それを最大限に活用することが、可能な限り精度の高い F1 用シミュレータトラックモデルの提供には不可欠であると考えています。ただし、その利点を完全に引き出すには、非常に複雑で時間のかかるプロセスが伴います。

図2: トレース後のスプライン付 Lidar データ

私たちはパイプラインの全ての工程で「どうすればクリック回数を減らせるか」を問いました。クリックは時間を取られるうえ、与えられた時間は往々にして限られています。LiDAR 内の防護壁の正確な位置を手動でトラックするのに何日も費やすのは非効率です。このプロセスを最適化するために開発したのが VEX を活用した小型ツールの「Barry」です。Barry は、防護壁正面のトレース作業の手助けになります。開始位置から、ポイントクラウドの縁に沿って高精度のスプラインを描く際に発生するクリックを代行してくれます。このツールはボット型のインターフェースをしており、ビューポート内をクリックするだけで配置可能です。つまり、スプラインのトレース作業が、最初のポイントを大まかに指定するだけで済むようになり、大幅な時間(とクリック数)の削減につながります。

このパイプラインによって新たに加わる唯一の工程はポイントクラウドの処理です。Barry は平板化したポイントクラウドを元に防護壁をトレースするため、使用の際はまず、地面以外のサーフェスを抽出する必要があります (現時点では Cloud Compare を使用)。平坦化を行った後には、防護壁、建造物、植栽などを表すポイント群の塊が残ります。作業自体は簡単で、手作業でのトレースと比べた Barry の効率性を考えれば、必要な手間はごく小さいものです。

図3: 防護壁上に配置された Barry がスプラインをトレースする様子。Barrier Bot UI の例。

Barry の背後にあるロジックの詳細と、より高度な姉妹ツールの「Tracey」については、Everything Procedural Conference 2024 で私たちが行った、LiDAR データのプロシージャル処理に関する HIVE トークをご覧ください。


図4: Lidar to Level – Andy Footman & George Pennyfather - EPC 2024

防護壁のペイント

スプラインの描画が終わったら、防護壁ジオメトリの表面に表示する広告を決めていきます。FI サーキットは常に広告で覆われているため、デジタルツインでもその状況を再現することは、臨場感を表現する上でも、ドライバーの目印としても重要です。特に、不自然で現実味を損なうロゴの途切れが発生しないようにすることは重要です。

実際の広告パネルに使用できるのはチームのスポンサー企業のみのため、ここでは差し替えて社名を伏せています。

図5: 防護壁の生成エラー。ロゴが途中で切れたり、表示位置が別の壁で隠されています。

前述のとおり、かつてはアトリビュートペイントでスプライン上に「Material_ID」アトリビュートをペイント・調整していましたが、この方法では丸一日かかることもあり、入力スプラインに変更が加えられるたび、再調整や再ペイントが必要でした。

この問題を解消するため、新しいパイプラインでは、広告の指定にボリュームベースの手法を組み合わせ、Python と VEX によって UV 上の位置を測定し、ロゴが1ピクセルでも欠けているかどうかを判定するシステムを導入しました。


手順

1 | ボリュームの描画とフォーマットを行います。専用の HDA を使うことで、全てのスプラインが正しく構築され、マテリアルアトリビュートが適用されるようにします。スプラインの片端には「オレンジエンド」も生成されます。これは、防護壁につくられた、事故の際に用いる回収口の位置を示す目印で、車両を運び出すのに十分な幅が設けられています。

図6: フォーマットされた広告ボリューム (左)、LiDAR データに捉えられた「オレンジエンド」の例 (右)。

2 | これらのボリュームを、関連する防護壁スプラインとともに割り当て用 HDA に繋ぎます。防護壁が別の壁の裏に配置されてしまっている場合は (図5)、その壁のスプラインをオプションの「Occlusion Spline」として入力すれば、その領域の広告を削除できます。

図7: ネットワーク構造

3 | ノード内では、防護壁の種類に応じた再サンプル手法によってスプラインを処理します。防護壁は種類ごとに構築方法が異なり、広告の配置要件も変わるため、それに合わせた再サンプル処理が必要です。ここで扱っているのは「Temporary Concrete Barriers (仮設コンクリート壁)」のため「Dynamic Resample」を見ていきます。これは防御壁ジオメトリ用スプラインを最適に再サンプルするために自社開発したカスタムメソッドで、必要に応じてスプラインを延長したりトリムすることで「最適なフィット感」を可能にします。

仮設コンクリート壁は幅が固定されていますが、その幅ぴったりにスプラインが分割されることはまれです。そのため、Dynamic Resample では三段階のパスを経て、最適なケースからそうでないケースまで順にスプラインをテスト・調整します。最善のケースでは、各セグメントを均一な長さで再サンプルし、スプライン内に少しでも余りがあれば、壁の間隔をわずかに広げて調整します。例えば、100メートル長のスプラインに、3メートル幅の防護壁を並べる場合、壁と壁の間にわすかな隙間を作り、見た目に大きな違いを出さずに、1メートルの余剰を補います。

残念ながら、この手法を使えないケースも多く、適用すると強制的にジオメトリが重なってしまったり、不自然な隙間が生じたりします。その場合、防護壁の始点を外側に延長すると安全に再サンプルできます。ただし、直角に交差している2つの防護壁がある場合、一方を延長すると、不自然なオーバーラップが生じてしまいます。これに対応するため、最終パスでは交差をチェックし、スプラインを切り詰めて再調整します。後の工程で、トリムされた部分を補完するための小さな防護壁パーツを生成することもできます。

図8: 必要な防護壁がすべて収まるようスプラインが動的に延長される様子

4 | マテリアルボリューム内にキャプチャされている全てのポイントに対し、初期マテリアル ID が適用されます。その後、オクルージョン用スプラインが独自のボリュームを生成し、広告のないコンクリートテクスチャが必要とされるポイントを特定します。この時点ではかなり粗く、広告のオーバーラップや広告の切断が大量に発生する可能性があります。

図9: 未処理の MatID スプラインから防護壁を構築した結果

5 | 次に、Sweep によって UV 値のテスト用プロキシメッシュが生成されます。このテストは二段階で行われます。1つ目は、オレンジエンドのボリュームによって生じる継ぎ目のテスト、もうひとつは、異なる広告の間や壁の端にできる継ぎ目のテストです。

いずれの場合も、外部テキストドキュメントで定義された「Unsafe」領域に継ぎ目が入っていないかどうか、 UV 空間でチェックします。このドキュメントは、ロゴが配置されている 0–1 の UV 空間の範囲を定義したもので、Photoshop でロゴのピクセルを計測して生成されます。 

図10: UV 空間内のロゴ位置を記載したテキストドキュメントの例

Houdini の Python ノードでこのファイルを開いて読み込み、各行を文字列の配列の detail アトリビュートに取り込みます。次に、この配列は VEX によって浮動小数点の数値範囲に変換され、プロキシメッシュ上の U 値と比較されます。これにより、継ぎ目がロゴを含む領域に重なっていないかどうかが判定されます。


ロゴが継ぎ目と重なる時は、マテリアルの割り当てを上書きし、次の防護壁パーツにロゴをずらして切断されないようにします (次の広告が切断されない場合に限ります)。活用できる修正方法がない場合、その領域の広告が削除され、コンクリートが露出します。

図11:重なり合う防護壁の先端から、ロゴが自動的に削除されたところ

結果

この工程を経ることで、クリーンで精確な広告を、効率的かつ堅牢に作成できるようになりました。防護壁の位置調整が必要になった場合も、ペイントのスプラインが自動的に再生成されるため、手動で入力をせずとも広告をクリーンに保てます。ボリュームも大まかに配置すればよく、その年に必要な広告に割り当てれば、あとはこのノードが全てのクリーンアップを自動的に行います。

図12:途中で切れたロゴが自動的にオフセットされ、全体がきれいに表示されています

このノードは位置の精度が高いため、防護壁のビジュアルをより細かく制御できます。ロゴのない領域に、マテリアルを損なうことなくオレンジのペイントボリュームを配置できます。ロゴが十分小さければ、その周囲にオレンジの領域を収めることも可能です。このオレンジ領域の継ぎ目は技術的にロゴの UV 範囲の外に配置されるため、切り取りが適用されず、背景色がそのまま保持されます。壁が無地のコンクリートに切り替わるのは、1つ以上の継ぎ目がロゴと直接交差する場合のみです。

図13: ロゴとオレンジボリュームの相互作用の例

最終的な防護壁により多くの視覚的バリエーションを持たせるため、広告のないすべての領域にランダムな Material ID を割り当て、無地コンクリートのバリエーションを表現しています。

この段階で、広告またはコンクリートがマテリアル ID のポイントアトリビュートで割り当てられた防護壁のスプラインが完成しました。これにより、ノードのクック時間が非常に短くなり、リアルタイムでの調整や更新が可能になります。

ジオメトリの生成

複雑な工程の多くが完了したので、あとはスプラインとオレンジエンドのボリュームを使って最終的な防護壁を生成するだけです。 

1 | 入力カーブへコピーするための防護壁ピースをひとつ生成します。通常は最適化のため低ポリゴンのバージョンを用いますが、エッジの摩耗やノイズ、ランダム化した頂点カラーを適用した高ポリゴンのバリエーションも、用途に応じて用意できます。

図14: 高ポリゴンと低ポリゴンの壁ジオメトリの比較

2 | 次にそれを、広告ペイントノードで用いたのと同じ再サンプル処理を施したスプラインに転送します。前述のとおり、ジオメトリの衝突やオーバーラップを防ぐため、スプラインのトリムが必要になる場合があります。その場合、トリムするボリュームの大きさは自動的に計算されます。このボリュームの外にあるジオメトリはすべて削除され、新たなエンドキャップが取り付けられてジオメトリを塞ぎます。

図15: 防護壁のトリミング工程

3 | 次に、壁の前面に For Loop を適用します。その際、生成されたプリミティブのマテリアル ID に基づいて、それぞれの広告に合った UV オフセットとマテリアルが割り当てられます。現在、1つのテクスチャマップ内のテクスチャは4つで、バリエーションは計20種です (無地コンクリート x 4、広告 x 16)。その後、オレンジエンドのボリュームがブーリアン演算によってコンクリートに変換され、色が付けられます。

図16: For-loop によるマテリアルの割り当て

4 | 壁に汚れやさらなるバリエーションを加えるため、セカンダリのUVチャンネルを作成し、壁を20列にスタックして、汚れマテリアルと位置を揃えます。 

UV シェルの下隅が UV タイルの下隅にぴったり揃うようにレイアウトします。次に、スケール値が計算され、UV の高さの 5% に収まるよう、必要なスケーリング量を正確に割り出します。その後、いずれか1つの行にランダムで配置され、さらに U 軸方向にもランダムなオフセットが加えられます。

図17: UV2 + 汚れマップ

結論

節約すべきクリックは常に存在します。私たちは、そうした貴重なクリックを無駄にしないため、すべてのパイプラインを進化させ、完璧なものにするという使命を持っています。今回の防護壁パイプラインは、効率と安定性の面で従来より大幅に改善されました。確かに、防護壁は、サーキット全体を構成するパズルの中の小さなピースにすぎませんが、 Houdini のプロシージャルツールを活用することで1分でも節約できれば、その分、より実際のサーキットに忠実で精度の高いシミュレータ用トラックモデルを作るための貴重な時間に充てることができます。

George Pennyfather – テクニカル アーティスト | Q3D Studios


コメント

  • Fbaobao 2 ヶ月, 3 週間 前  | 

    非常不错。

  • SpeLL 2 ヶ月, 1 週間 前  | 

    Awesome tool!

Please log in to leave a comment.