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

フレームレートの請求書なしの密な葉群:実践ガイド

シーンを植生で満たしつつ速く保つ方法。インスタンシング、カル距離、LOD戦略、影のコスト、オーバードロー、密度配置、そして各最適化が実際に報われたことを証明する固定カメラのプロファイリング・ループ。

Illustration of a row of trees next to a rising frame-rate graph

要点: 密な植生が三角形数だけで殺されることは稀。それは千のドローコール、不注意なアルファカードのオーバードロー、 そして誰も入っていると覚えていなかった影で死にます。労力をこの順で使え:まずインスタンシング、次にカル距離、三番目に影、 四番目にLOD、五番目に密度配置。そして各ステップを同じ固定カメラで、一度に一変数だけ検証せよ、さもなくば何も学べない。 本ガイドは、それがあなたの問題だと告げるプロファイラの署名とともに、各段階を扱います。

静かな小川に映る密な森の樹冠 本物の森が「無料で」レンダリングされるのは、物理が大規模に並列だから。あなたのGPUはその見た目を60 fpsで偽装できる。 ただし、まさにこの仕事のためにエンジンがすでに出荷している機構をあなたが打ち負かすのをやめれば。

心的モデル:五つのボトルネック、一つの順序

植生パフォーマンスは一つの問題ではなく五つで、予測可能な順序で支配します。ドローコールがまずCPUを縛り、カル距離がそもそも GPUに何をどれだけ描かせているかを決め、影がそれを落とすすべてのコストを静かに倍にし、LODとオーバードローがピクセルあたりの 請求を治め、密度配置がそのすべてのうちあなたが実際に必要だった量を決めます。順序を違えて攻めれば、ボトルネックでなかった ものを最適化してしまう。下の順序は、コストが実際に噛む順序です。

まずインスタンシング、他はすべてその後

5000回描かれる一本の木は、5000本の個別の木より根本的に安い。どちらのエンジンも繰り返しメッシュを インスタンス化された描画にバッチし、あなたの最初の仕事は単にその機構を打ち負かさないこと。

Unrealはfoliageと階層的インスタンス化スタティックメッシュでバッチし、UnityはGPUインスタンシングと地形ディテールで。バッチを 静かに壊すもの:

  • インスタンスでなく唯一のアクター/オブジェクトとして置かれた植生;
  • インスタンスごとのマテリアル変種。見た目ごとにマテリアルを作る代わりに、一つのマテリアル内でインスタンスごとの データ(色、スケール)を使え;
  • 組織的に散らばった配置で、エンジンがクラスターを単位としてカルできない。

プロファイラの証拠は明白:植物数に比例するドローコール。森のビューが何千ものドローコールを示すなら、他の何にも触れる前に これを直せ。このリストの下にあるどれもあなたを救わない。GPUが始まる前にCPUバウンドだから。健全なインスタンス化植生は、中に 何千の植物があろうと、森のビュー全体でドローコールを低い数百に保ちます。

カル距離は無料のお金

草は800メートル先でレンダリングする必要はない。タイプごとのカル距離(地被30〜60 m、低木100〜200 m、木だけが 長距離に値する)を、ポップを隠すフェード範囲とともに設定せよ。

これはパイプライン全体で分あたり最高価値の設定で、そこがデフォルトで誰も気づかないから、日常的に「無限」に放置されます。 理由は知覚的:地被は100 mよりずっと前に一ピクセル未満しか張らない。最終画像に文字通り何も寄与しないのに、依然として毎フレーム 頂点、オーバードロー、影の仕事を費やします。遠方の被覆はより安いシステムのもの:地形マテリアルの色、不透明なインポスター、 あるいは単に正しい緑に塗られた地形レイヤーの遠LOD。

フェード範囲(ディザまたはアルファ)はポップアウトを隠し、プレイヤーはカル距離そのものを決して見ません。フェードを不可視に なるちょうど十分な長さにし、それ以上にはするな。長すぎるフェードは、クロスフェード中に同じ植物の二つの表現に払っている意味。

影:請求書の静かな半分

小さな地被の動的影の投射をオフにし、木にはそれを保ち、低木には距離制限せよ。草の影はほぼゼロの視覚的利得の ために、あなたのコストを倍にする。

影パスの各草の葉は、光の視点から再び描かれます。密なシーンでは影パスがしばしばベースパスと同じだけかかる。つまり草の影は 植生予算全体で最大の単一項目でありうるのに、房の根元の単純な環境の暗化と視覚的に区別できません。修正はほぼ無料:地被は影投射 オフ、木はオン(その影は本物の構図的仕事をする)、中間は距離制限。それから前後でプロファイラの影パスを確認せよ。たいてい インスタンシングの次に最大の単一勝利で、数分で済む。

LOD:シルエットを予算せよ、ポリゴンではなく

良い植生LODチェーンは輪郭を保ち内部を切り刻む。遷移距離を目で検証し、インポスター前の最後のメッシュLODを 最も強く最適化せよ、それがあらゆるワイドショットで画面上にあるものだから。

小道沿いの森床のシダと下草 このような地層の植物は、カル距離と影の設定が最も報われるところ。何千ものインスタンス、それぞれが数十メートル越しにほぼ何も 寄与せず、それぞれが動的影を落とすならコストが倍になる。

ヒーローの木の実践的チェーン:フルメッシュ → 内部~50 %削減(同じシルエット)→ 統合カードで~15 % → 不透明なインポスター/ ビルボード。本物の痛みを省く二つの注記:

  • 仮想化ジオメトリのエンジンでも遠方のインポスターは依然として価値がある。オーバードローと影は、三角形がどう払われるかに かかわらず本物のコストであり続けるから。仮想化ジオメトリは三角形数を解くのであって、透明のコストではない。
  • 透明は距離での敵。密なアルファテスト済みカードは、GPUが最も弱いところ(中間LOD)、に正確にオーバードローを積む。近くでは メッシュの葉を、遠くでは不透明なインポスターを好め;アルファ重の中間こそフレーム時間が隠れる場所。ある一つのLODが謎に高い なら、ほぼ常に透明なやつ。

オーバードロー:見えないコスト

オーバードローは、積み重なった透明面を通してGPUが同じピクセルを何度もシェードすること。植生特有の呪い、最終画像 では不可視で、しばしば「軽い」シーンが遅い理由。

ほとんどのエンジンにはオーバードロー可視化モードがある;それをオンにして草原を見よ。白く光るなら、重なるアルファカードが 積み重なるにつれ各ピクセルを五、十回シェードしている。緩和策:多くの細い葉でなく、より少なく大きな葉;シルエットが許すところ では不透明ジオメトリ;そして最も寄与しないカードの積極的なカル。オーバードローは「シーンは遅いが何も高そうに見えない」の古典的 犯人。三角形は安く、ピクセルは何倍も払われているから。

密度は設計の決定であり、スライダーの位置ではない

プレイヤーが歩き見るところは密に、しないところは疎に。小道沿い20 mの豊かなディテールの帯は、均一コストの一部で 「どこも生い茂る」と読まれる。

斜面と高さのマスクがその一部を自動でやり(急斜面と遠い台地は地被を全く必要としない)、クラスタリングが残りをやる。隙間のある房は 均一な埋めより安くレンダーしかつより自然に見える、ゆえにパフォーマンスの勝利と美の勝利は同じ方向を指す。ここで配置ツールが 元を取る:マスクと種ごとのルールで密度を塗り、それからエンジンネイティブのインスタンスへ直接ベイクすることが、午後と一週間の 差です。それがNumivoのスキャッターがすることの核心であり、普通のfoliageとインスタンス化メッシュにベイクするので、 本記事のあらゆる技法が結果にそのまま適用されます。あなたと標準の最適化の間にプラグインのランタイムはない;ベイクされたシーンは ただのエンジンコンテンツです。

プロファイリング・ループ

同じカメラ、同じビュー、一度に一変数。各変更の後にGPUフレーム時間、ドローコール、影パス、オーバードローを 測れ。

最も密なビスタで固定の「予算カメラ」を選び、上の各ステップの前後で統計をスクリーンショットせよ。規律が大事なのは、植生の 最適化が相互作用するから:カル距離の変更は影パスが見るインスタンス数を変え、LODの変更はオーバードローを変え、密度の変更は それら全部を一度に変える。ランダムな飛行はランダムな数字と、変更が助けたか否かの反証不能な議論を生む。固定カメラは、あなたが 擁護できる決定を生む。数字を共有シートに保て、傾向線が単一の測定にはできない物語を語る。

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

  • 地被カル:30〜60 m · 低木:100〜200 m · 木:視線
  • 健全なインスタンス化森ビューのドローコール:低い数百
  • 密なシーンでの影パスの割合:しばしば植生コストの約半分。草の影オフは存在する中で最も安い大勝利
  • 「どこも生い茂る」と読まれる小道帯ドレッシング幅:約20 m
  • ヒーローの木のLOD数:3メッシュLOD + 不透明インポスター
  • 草のオーバードロー目標:オーバードロービューで約3×未満、積まれたアルファカードの白熱8〜10×ではなく

ミニFAQ

Nanite/仮想化ジオメトリはこれを時代遅れにする? 支配するどの項目かを変えるのであって、規律ではない。アルファカードの オーバードロー、影のコスト、インスタンスごとのオーバーヘッドはすべて残り、遠方のインポスターは依然として払う。新技術があなたの 特定のボトルネックを解いたと仮定するのでなく、ターゲットハードウェアで測れ。動かしただけで、除いてはいないかもしれない。

低密度でもシーンが遅いのはなぜ? いつもの容疑者、順に:動的影を落とす草、バッチを打ち負かす変種ごとの唯一マテリアル、 無限のカル距離、あるいはオーバードローを積むアルファテスト済みLODチェーン。それぞれ別のプロファイラ署名がある。変える前に 確認せよ、さもなくば間違ったのを直す。

ゲームプレイに「密すぎる」のはどれくらい? 戦闘の可読性がパフォーマンスより先に密度を上限する:シルエットが雑然に消えれば、 プレイヤーはドレッシングでなくゲームを責める。ビスタで密、アリーナで中庸が、プロファイラとプレイテストの両方を生き延びる パターン。

ベイクすべきか、プロシージャルのままにすべきか? 出荷にはベイクせよ。ベイクされたインスタンスは正直にプロファイルし、 ランタイム依存なしで出荷する。プロシージャルの設定(マスク、ルール、シード)をバージョン管理に保て、地形変更の後に手で作業を やり直さず再ベイクできるように。

密に見えかつ速いのは矛盾ではない。それはほとんど、五つのことを正しい順序で行い、それぞれを同じカメラで証明する規律です。