すべての記事
チュートリアル · 6 min read

フレームレートの崖なしの密な森:LOD、インポスター、インスタンシング

フレームレートで数千の木をレンダーする方法。フルメッシュからビルボードまでのLODチェーン、あらゆる角度から持ちこたえる八面体インポスター、インスタンシングとカリング、そしてベイクされた森が死んで見えないようにする風とシェーディングのトリック。

Spruce forest on a green alpine slope with a handful of wooden cabins below

要するに: 説得力ある密な森はパフォーマンスのボス戦だ。数千の高ポリゴンの木、層を成す透明度、地平線まで伸びるイン スタンス。あなたはインポスター(カメラ向きのビルボードで、あらゆる角度から3Dの木を偽装する)で終わる規律あるLODチェーン、 攻撃的なインスタンシングとカリング、そして安価な遠方の木が正体を露呈しないようにするいくつかのシェーディングトリックで これに勝つ。この記事は、フルメッシュからビルボードまでのチェーン全体、八面体インポスターのトリック、そして高度に最適化さ れた森が死んで見えないようにする方法を歩く。

森の縁、木々が奥へ退いていく ここのすべての木はカメラから異なる距離にあるので、すべての木は異なるコストであるべきだ。安価な森の芸術は、近くのものだ けにポリゴンを使い、残りを説得力を持って偽装することだ。

核心アイデア:距離ごとに支払う

5メートル離れた木と500メートル離れた木は同じコストであってはならない。LODチェーンは近くではフルディテール を、距離とともに漸進的により安価な表現を使い、平らなビルボードで終わる。森が育つ間、合計コストが平らに保たれるように。

ゲーム全体は、カメラがほとんど解像できない木に定価を払うことを拒むことだ。近くでは木は個々のリーフカードを持つフルメッ シュ;遠くでは、平らな画像が完璧に再現する一握りのピクセルだ。LOD(レベル・オブ・ディテール)チェーンはそれを形式化す る:同じ木の複数バージョンを減少するコストで、画面サイズで交換する。それで一万本の木の森は、フル品質での各木の合計ではな く、およそディテールで見えるものだけのコストになる。それなしでは、密度はフレーム時間を線形に地面に向けてスケールする; それとともに、同じ予算で木の数をはるかに高く押し上げられる。

LODチェーン、ステップごと

LOD0リーフカード付きフルメッシュ(近く);LOD1–2削減されたジオメトリと簡素化された葉(中);LOD3いくつかの カードまたは単一のカード;最終LODインポスター/ビルボード(遠く)。各ステップは大まかにコストを半分にし、交換は不可視のま まだ。

典型的な植物のLODチェーンはこんな感じで走る:LOD0、すべてのリーフカードを持つフルディテールメッシュ、プレイヤーのすぐ 隣の木のため;LOD1–LOD2、削減された幹のジオメトリとより少ない、より大きなリーフカード、中間地面のため;LOD3、 劇的に簡素化されたカードクラスター;そして最終インポスター(本質的に平らな画像)、遠くのすべてのため。技は遷移距離 とブレンドにある。交換がポップしないように。ディザリングまたはクロスフェードされたLOD遷移は切り替えを隠す;間違った距離 での硬いポップは幻想を壊す兆候だ。実際のカメラに対して距離を調整し、デフォルトではなく。

インポスター:あらゆる角度から3Dを偽装

インポスター(八面体インポスター)は木を数十の角度からアトラスに事前レンダーし、次にキャプチャされた最も近い ビューをビルボードとして表示する。平らなビルボードとは異なり、カメラが周りを動く間も正しく見える。安価だが3Dっぽい。

チェーンの遠端は最大の節約が住む場所であり、インポスターはそれらを受け入れ可能にする巧妙なトリックだ。素朴なビルボード (カメラに面するために回転する一つの平らな画像)、は正面ではよく見えるが、動くにつれて平らになり不自然に滑る。八面体イ ンポスターは木を球の周りに配置された多数の視点から事前レンダーし、それらをテクスチャアトラスに詰め、現在のカメラ方向 に最も近くキャプチャされた角度を表示することで(最も近いいくつかの間でブレンドしながら)これを解決する。結果はコストのご く一部で、あらゆる角度から本物の3Dの木として読まれる。だからこそインポスターは信じられる遠方の森の背骨だ。それらは一度 ベイクされ、描くのにほぼゼロコストだ。

森の床を敷き詰めるシダと低い下草 地上層はインスタンス数を速く倍増する。下草は木と同じ規律が必要だ:それをインスタンス化し、LODし、硬くカリングする。80 メートルのシダはまったく描画すべきでない。

インスタンシングとカリング

繰り返しの木をインスタンスとして描画して、数千本が少数のドローコールで済むようにし、攻撃的にカリングする。 画面外のものはフラスタムカリング、小さなものは距離カリング。インスタンシングはCPUコストを修正する;カリングは不可視のた めに支払うのを止める。

完璧なLODでさえ、一万本の木を個々のオブジェクトとして提出するとCPUを埋める。インスタンシングは木のすべてのコピーを少数 のドローコールに崩壊させる。それは本物の森には交渉不可能だ。そしてまさにそれが、スキャッターをネイティブエンジンインスタ ンスにベイクすることが与えてくれるものだ。その上で、無慈悲にカリングせよ:フラスタムカリングはビュー外のものすべてを落と し、距離カリングは特定の範囲を越えて気づくには小さすぎる地上の雑物と小さな植物を取り除く。特に草と下草は硬く、近い距離カ リングを持つべきだ。なぜなら木よりも速くインスタンス数を倍増するからだ。密度をペイントしてからインスタンス化されたメッ シュにベイクするワークフロー(Numivoのような)、は、密な森が必要とするまさにそのバッチされ、カリング可能な形 をエンジンに渡す。

安価な森を生かし続ける

重い最適化は森を静的で死んで見えるようにできる。近いLODで微妙な風、インスタンス間の色とスケールの変動、そし て遠いインポスターが平らな段ボールとして読まれないようにするシェーディングでそれに対抗せよ。

このすべての効率のリスクは、素晴らしく走り生気なく感じる森だ。3つの安価なタッチがそれを取り戻す:。近いLODで頂点 アニメーション、遠いインポスターが静止していても、近い植物は動くように(誰も300メートル先の静的な木に気づかない)。変 動:目が繰り返しをつかまないように、インスタンスごとにスケール、回転、色合いをランダム化する;同一の木はコピー・ペー ストの兆候だ。そしてインポスターへのシェーディングケア。太陽の角度が変わったときに明らかな段ボールに平らにならないよ うに、彼らのライティングをベイクする。プレイヤーが実際に見る近くのこれらのディテールに、あなたが節約したフレーム時間を使 え。そうすれば最適化された森は最適化されていないものと同じくらい生きているように感じる。数倍速く走りながら。

盗む価値のある現場の数字

  • コスト原則:距離ごとに支払う。遠くの木は近くの木のようにコストしてはならない
  • LODチェーン:フルメッシュ → 削減 → カードクラスター → インポスター、それぞれ〜コストを半分にする
  • インポスター=アトラスに事前レンダーされた角度 → あらゆるビューから3Dっぽいビルボード
  • 繰り返しをインスタンス化(少数のドローコール)+小さな遠くの植物を硬くカリング
  • 生かし続ける:近-LODの風+インスタンスごとの変動+ベイクされたインポスターシェーディング

ミニFAQ

ビルボード vs インポスター。違いは何か? ビルボードはカメラに面する一つの平らな画像で、あなたが周りを動くと平らにな る。インポスターは多くの角度を保存し、正しい角度を表示するので、3Dで持ちこたえる。プレイヤーが周回するか通過するものに は、インポスターを使え;素朴なビルボードは本当に遠い、静的な背景幕にのみ良い。

木にはいくつのLODレベルが必要か? 一般的に3〜4プラスインポスター。多いほうが自動的に良いわけではない。各レベルは オーサリングとメモリのコストだ。各交換を小さく、目立たないステップにするのに十分なのが目標であり、最大ではない。

ナナイトはこれを陳腐化するか? それはジオメトリ側を変える(ナナイトは伝統的なLODなしで密なメッシュディテールを扱う) 。しかし透明度(リーフカード)、インスタンシング規律、そしてカリングは依然として重要であり、インポスターは遠距離のために 有用であり続ける。原則は生き残る;ツーリングはシフトする。

森のパフォーマンスを最も頻繁に殺すのは何か? 重なる透明なリーフカードからのオーバードローと、カリングされていない地 上植物だ。リーフカードを締め、下草を近くでカリングし、すべてをインスタンス化する。その三つ組は、木のメッシュに触れる前 に予算の大部分を回収する。

密な森はレンダリングするのに最も罰される事の一つであり、正しく行うのに最も報われる事の一つだ。LODチェーンを構築し、イン ポスターに距離を運ばせ、容赦なくインスタンス化してカリングし、節約を近くの風と変動に費やせ。そうすればあなたは地平線ま で伸びかつフレームレートを保つ森を持つ。