【Unreal Engine】LODとカリング入門:遠くを簡略化し、見えない物の描画を減らす

作成: 2025-12-12最終更新: 2026-09-07

UE5のLOD・視野外のカリング・オクルージョン・距離カリングを図解。メッシュ一個から簡略化と非表示を試し、Cull Distance VolumeやFreezeRenderingで結果を確かめる入門です。

岩や木を増やしていくと、広い景色を見渡したときにゲームが重くなることがあります。近くの岩は細部まで見たいけれど、遠くの小さな岩に同じ細かさが必要でしょうか。壁の向こうに隠れた岩も、今の画面へ描く必要はなさそうです。

こうした違いを使って描画の仕事を減らすのが、LODとカリング です。LODは形を簡略化し、カリングは描く対象を絞ります。どちらも「置いた物を全部消して軽くする」のではなく、プレイヤーに必要な見た目を残すための調整です。

近くでは細かく描き、小さく見える物は簡略化し、不要な描画を減らす

この記事では、立体モデルの形を表す メッシュ 一個から「形が変わる」と「表示されなくなる」を試します。その後、壁に隠れた物の確認や、複数の物への距離設定へ進みます。

この記事でわかること

  • LOD・視野外・遮蔽・距離による、描画の減らし方の違い
  • LODの生成と、Screen Sizeで切り替わる仕組み
  • Cull Distance Volumeの設定と、消えないときの確認
  • 見た目と計測を往復して、使える設定へ調整する流れ

Windows版UE5で、レベルへ物を配置したことがある方を想定します。実践には Naniteを使わない、レベルへ配置したStatic Mesh を使います。Blueprintや外部アセットの準備は不要です。図はブログ用の模式図です。

Sponsored

まず、減らす仕事を分ける

LOD(Level of Detail) は、同じ物に細かさの違う形を用意する仕組みです。近くでは細かい形、画面上で小さくなったら簡略な形を使います。

カリング は、条件に合う物を描画の対象から外すことです。視野の外、物陰、遠すぎる場所では、その物を画面へ描く仕事を減らせます。

LODは描く形を簡略化し、カリングは描く対象を絞る
方法何を変えるか
LOD一個の形を簡略にする遠くの岩の細かな凹凸を減らす
フラスタムカリングカメラの視野外を除く背後の岩を描画対象から外す
オクルージョンカリング手前の物に隠れた対象を除く壁に完全に隠れた岩を外す
距離カリング決めた距離より遠い対象を除く遠くの小さな装飾を消す

LODで三角形を減らせば、その形を処理する仕事を減らせます。カリングは、対象の描画準備やGPU側の描画を減らせます。ただし「LODならGPUだけ、カリングならDrawだけ」とは決まりません。stat unitで、全体と各担当の時間を比べます。

カリングされても、Actorそのものが削除されるわけではありません。Tickや当たり判定、メモリ上のデータも、そのまま残ることがあります。「画面へ描かない」と「ゲームから取り除く」は分けて考えましょう。

LOD:小さく見える物を簡略化する

従来のStatic Meshでは、最も細かい形を LOD0、簡略版を LOD1、LOD2… と呼びます。切り替わるときに輪郭が大きく変わらないよう、見える大きさに合った形を使います。

同じ物の細かな形と簡略な形を、画面上の大きさに応じて使い分ける

遠くなら細部を省けますが、どこまで省けるかは物次第です。岩の細かな凸凹は目立たなくても、橋の柱や木の輪郭が欠けると、遠くからでも気づくことがあります。

まず一個のメッシュにLODを用意する

歩いて確認できるThird Personテンプレートのプロジェクトを使います。練習用に、Engineの基本形状Sphere(球)をプロジェクトへコピーします。

  1. Content Browserの「Settings」で「Show Engine Content」をオンにします。
  2. 「Engine → BasicShapes」にある Sphere を選び、Ctrl + C でコピーします。
  3. 自分の「Content」に練習用フォルダを作り、Ctrl + V で貼り付け、名前を SM_VisibilityProbe にします。
  4. コピーしたアセットをダブルクリックし、Static Mesh Editorを開きます。
  5. 「Nanite Settings」の「Enable Nanite Support」がオフであることを確認します。変更した場合は「Apply Changes」を押します。

以降はこのコピーを編集します。すでに自作の岩などがある場合も、練習用の複製で試せます。

「LOD Settings」で Number of LODsを3 にし、「Apply Changes」を押します。これはLOD0を含む3段です。次にLOD1・LOD2の「Reduction Settings」を開き、「Percent Triangles」をそれぞれ50、15にして適用します。

Percent Triangles は、簡略版へ残す三角形の割合を調整する値です。ここでは違いを見つけやすくするために大きく減らします。各LODに表示される三角形数も見て、実際に段階的に減ったか確認してください。

練習用メッシュにLOD0からLOD2を用意し、各段の三角形数を確認する

最初は Auto Compute LOD Distancesをオン にし、切り替えの目安を自動計算させます。LODの項目が見えない場合は、「LOD Picker」の「Custom」をオンにして各段を表示します。

Static Mesh Editorのプレビューを遠ざけ、表示されるLOD番号が変われば、切り替えを確認できています。番号を手動指定したままなら、「LOD Auto」へ戻してください。確認できたら保存します。

Screen Sizeは、距離ではなく画面上の大きさ

各LODの Screen Size は、切り替えを決める大きさの目安です。メッシュを包む球が画面上でどれくらいの直径になるかをもとに計算します。0.25を「25メートル」や「画面の面積25%」とは読みません。

距離が同じでも、大きな岩と小さな石では画面上の大きさが違います。カメラをズームして大きく映した場合も、必要な細かさは変わります。

同じ距離でも、小さく映る物と大きく映る物では必要な細かさが違う

手動で調整するときは、Auto Compute LOD Distancesをオフにします。たとえばLOD1を0.5、LOD2を0.2にし、プレビューを前後させて切り替えを見ます。これは練習用の値で、全アセット共通の推奨値ではありません。

LOD1への切り替えを遅らせて細かい形を長く残したいなら、LOD1のScreen Sizeを小さくします。早めに簡略化したいなら大きくします。設定値だけを追わず、輪郭が跳ねるように変わらないかを確認してください。

レベルでは、色分けして切り替えを見る

SM_VisibilityProbeをレベルへ一個配置します。ScaleはX・Y・Zとも1のまま、床に埋まらない位置に置いてください。ビューポートの「Lit」などが表示されたView Modeメニューから、「Level of Detail Coloration → Mesh LOD Coloration」を選びます。カメラを近づけたり遠ざけたりして、LODごとの色が切り替わるかを見ます。

色の変化を確認したらLitへ戻し、普段の見た目でも確認します。色が変わることは設定の確認、輪郭が気にならないことは品質の確認です。

Sponsored

カリング:視野外や物陰の描画を減らす

カメラが映せる空間を 視錐台(フラスタム) と呼びます。カメラから先へ広がる、視野の立体的な範囲です。フラスタムカリング では、その範囲の外にある物を描画対象から外します。

一方、範囲内でも壁の後ろに完全に隠れている物があります。この遮蔽を調べるのが オクルージョンカリング です。

カメラの視野外の物と、視野内で壁に完全に隠れた物を区別する

通常のPC向けプロジェクトでは、こうした判定をエンジンが行います。まずは新しい仕組みを自作するより、どこが除外されているかを確認します。通路の曲がり角は奥を隠せますが、高いカメラで見渡すRTSの平原では、隠れる物が少なくなります。同じオクルージョンでも、場面によって効き方が違います。

バウンズは、物を包む判定用の範囲

可視性の判定では、メッシュを包む バウンズ が使われます。箱や球で、おおよその広がりを表したものです。エディタの「Show → Advanced → Bounds」で表示できます。

実物より大きすぎるバウンズは、物が隠れていても「まだ見えるかもしれない」と扱われる一因になります。逆に小さくしすぎると、見えている部分まで消える問題につながります。

物を包むバウンズが大きすぎると、壁からはみ出して見える候補に残る

たとえばマテリアルで木を揺らすときは、動いた枝まで含めた範囲が必要です。カリングを早めるためだけに縮めず、見た目の動きと判定範囲を合わせます。

遮蔽の判定にも仕事がかかり、結果の反映に遅れが出る方式もあります。また、画面へ直接見えなくても影などに必要な描画は別に扱われます。「物陰に入れば、そのActorに関わる負荷が全部ゼロ」とは考えないようにしましょう。

距離カリング:一個で試して、まとめて設定する

遠くの物が見えていても、「ここまで離れたら小さな装飾は描かない」と決める方法です。まず一個に設定し、何が変わるかを確かめます。

一個だけ、15メートルで消す

  1. レベルに置いたSM_VisibilityProbeを選び、Detailsの「Mobility」を Static にします。ゲーム中に動かさない物として扱う設定です。
  2. Detailsで「Draw Distance」を検索し、Desired Max Draw Distanceを1500 にします。
  3. 「Never Distance Cull」はオフにします。この設定がオンだと、距離による除外をしません。
  4. 選択を外し、ビューポートにマウスを置いて G を押し、Game Viewへ切り替えます。
  5. 球へ近づいたり離れたりして、表示が切り替わることを確認します。

UEの標準的な距離単位は1uu=1cmなので、1500は15mです。距離はプレイヤーの足元ではなく、カメラから対象のバウンズ中心まで を基準に考えます。Game Viewは、エディタで編集用の表示を隠し、ゲームでの見え方を確かめるモードです。

カメラから15m未満では球を表示し、それより遠くでは距離によって非表示にする

離れると消え、近づくと戻れば成功です。今は仕組みが分かるよう、あえて短い距離にしています。

Cull Distance Volumeで、サイズごとにまとめる

岩や小物へ一つずつ距離を入れる代わりに、範囲内の対象へまとめて設定できるのが Cull Distance Volume です。Volumeは、設定を適用する空間の範囲を表します。

  1. 球のDesired Max Draw Distanceを 0 へ戻し、個別の距離制限を外します。「Allow Cull Distance Volume」はオンにします。
  2. 「Place Actors」でCull Distance Volumeを検索して配置し、球を囲む大きさに広げます。
  3. Volumeの「Enabled」をオンにし、Detailsの「Cull Distances」を次の表に合わせます。初期の行を編集し、足りなければ「+」で追加します。
SizeCull Distance意図
1001500小さな物は15mまで
5004000中くらいの物は40mまで
100000大きな物は距離では消さない

Size は対象のバウンズの大きさ、Cull Distance は消す距離です。各対象に近いSizeの行を選んで適用します。Size100は「100以下のすべて」という範囲指定ではなく、Size0も「全サイズ」の指定ではありません。

対象の大きさに近い行を選び、その行のCull Distanceを使う

行の間の距離を滑らかに計算するわけでもありません。対象を選んで Current Max Draw Distance を見ると、実際にどの距離が設定されたか確認できます。球には1500が割り当てられることを確かめ、Game Viewで再び近づいたり離れたりします。

表のCull Distanceが 0 の行は、「その行の対象を距離では消さない」という意味です。遠くから見える大きな建物などを残すために使います。複数のVolumeが重なる場合や個別の距離制限がある場合は、0を除いた短い距離が優先されるため、Current Max Draw Distanceで結果を確認してください。

消えない・すぐ消えるとき

状況先に確認すること
編集中は消えない選択を外し、Game Viewにしたか。Playでも確認
個別設定でも消えないNaniteオフか。Never Distance Cullがオフか。カメラが十分離れたか
Volumeだけ効かない対象を囲んだか。EnabledとAllow Cull Distance Volumeはオンか。今回はStaticの配置物か
想定より近くで消えるCurrent Max Draw Distanceは何か。別のVolumeや個別設定が残っていないか
大きな床まで消える大きいSizeとCull Distance0の行を用意したか。必要なら床のAllow Cull Distance Volumeをオフにする

今回は、事前に配置した通常のStatic Meshで試します。Foliage、インスタンス、実行中に生成する物へ広げるときは、それぞれの配置方法と距離設定を確認します。

参考:Visibility and Occlusion CullingCull Distance VolumesStatic Mesh Automatic LOD GenerationLOD Screen Size

FreezeRendering:隠れた物の扱いを確かめる

カリングが働いても、もともと見えない物が描かれなくなるだけなので、正面の景色では分かりにくいものです。FreezeRendering は、その視点での描画状態を固定し、別の角度から調べるために使います。

練習用の球を、十分大きな不透明の壁の後ろへ置きます。基本形状のCubeを幅・高さ方向に拡大すれば、確認用の壁を作れます。ここでは距離カリングと混ざらないよう、球のDesired Max Draw Distanceを0、Allow Cull Distance Volumeをオフにしておきます。

  1. エディタのレベルビューポート をLitにし、球が壁に完全に隠れる位置へ移動します。
  2. 判定が落ち着くまで少し待ち、コンソールへ FreezeRendering と入力します。
  3. カメラを壁の横へ移動し、壁の後ろをのぞきます。
  4. 固定した時点で球が除外されていれば、後ろへ回っても球は描かれません。
  5. もう一度 FreezeRendering を入力して解除し、球が再び表示されることを確認します。
壁の前で描画状態を固定し、横へ回って確認してから固定を解除する

コンソールはstat unitの記事と同じ方法で開けます。固定中は通常のプレイ表示ではないため、この状態で性能を比べるのは避け、確認後に解除してください。

球が残る場合は、壁から一部が見えていないか、バウンズが大きくはみ出していないかを確認します。Wireframe表示ではオクルージョンの確認にならないため、Litを使います。

別の確認方法として、エディタで r.VisualizeOccludedPrimitives 1 を使うと、遮蔽で除外された物のバウンズが緑の枠で表示されます。確認後は値を0へ戻します。

Sponsored

実践:見た目を保ちながら、変更前後を比べる

一個で仕組みを確認できたら、同じ球を少しずつ増やしてみます。最後は自分の岩や木へ置き換え、見た目を保てる設定を探します。

同じ配置で、設定だけを変える

遮蔽を試した壁から離れた、見通しのよい場所を使います。球をAlt+ドラッグで複製し、手前から奥まで数列に並べます。まず32個程度で十分です。必要なら128個、256個へ増やします。正面から重なって一列に見えないよう、横にも間隔を空け、カメラから15m以内と15mより遠い列の両方を作ります。

全体をCull Distance Volumeで囲み、球のAllow Cull Distance Volumeはオン、Desired Max Draw Distanceは0へ揃えます。VolumeのEnabledを切り替えれば、同じ配置で距離カリングの有無を比べられます。

同じ配置のまま、LODと距離カリングを一つずつ変更して比較する

比較する状態は次の三つです。アセットのScreen Sizeなど、戻す必要がある値をメモしてから始めます。

状態設定見る変化
A:細かい形を維持配置した球のForced LOD Modelを1、Volumeは無効比較の出発点
B:LODを自動切り替えForced LOD Modelを0、Volumeは無効小さく映る球が簡略化するか
C:さらに遠くを除外Forced LOD Modelを0、Volumeを有効遠い球が描画から外れるか

レベル上の球をまとめて選び、Detailsで Forced LOD Model を検索して変更します。ここは 0が自動、1がLOD0固定 です。LOD番号そのものとは一つずれるので注意してください。

数字だけでなく、何が変わったかを読む

各状態でStandaloneを起動し、同じ位置・向き・画質・解像度・FPS上限で測ります。読み込み直後を避け、stat unit でFrame・Game・Draw・GPUを、stat scenerendering で描画の集計を控えます。

stat initviews では、Frustum Culled Primitives が視野外、Occluded Primitives が遮蔽によって除外された数です。プリミティブ は、ここでは描画側が扱うメッシュなどの単位です。Actor一個と必ず一対一になるわけではありません。

結果次に考えること
Bで三角形数は減ったが、Frameはあまり変わらない今の場面では別の仕事やFPS上限が全体を制限しているかもしれない
Cで遠い物は消えたが、Drawはあまり変わらない対象の数が少ないか、ほかの描画準備が大きいかを調べる
Occludedの数が少ない開けた景色なら自然。除外率の高さ自体を目標にしない
時間は短くなったが、前方に球が急に現れる距離が短すぎる。表示品質も調整する

三角形数の変化はStatic Mesh Editorの各LOD表示や、レベルのLOD色分けと合わせて読みます。stat scenerendering のMesh draw callsも参考になりますが、配置数と同じになるとは限りません。同じメッシュのまとめ方やマテリアル、影などの描画で変わります。

球の少数配置は、設定の意味を確認する練習です。特定の時間短縮は保証されず、小さな差しか出ない場合もあります。設定を一度Aへ戻して元の傾向を確かめると、条件が変わっていないかにも気づけます。

歩いて、消えてよい距離を決める

状態Cで実際に歩きます。突然現れる ポップイン が気になるなら、Cull Distanceを1500から2500へ伸ばし、見え方と時間を再確認します。重要な建物や目印は、遠くから残す設定にします。

最後はForced LOD Modelを0へ戻し、Litの通常表示・FreezeRendering解除済みで確認します。診断用の表示も閉じ、普段どおり遊んだときの見え方を確かめてください。

Naniteとの使い分け

Nanite は、メッシュを細かなまとまりに分け、必要な細かさと表示範囲を自動で選ぶ描画の仕組みです。通常のStatic MeshのようにLOD0・1・2を手動で調整する流れとは異なります。

この記事でNaniteをオフにしたのは、従来のLODと距離設定を一つずつ確かめるためです。Naniteにも同じCull Distance Volumeの設定がそのまま効く、とは考えないでください。使用するUEの版と、メッシュやFoliageなどの配置方法で対応範囲を確認します。

従来メッシュの段階的LODと、Naniteの細かなまとまりによる選択を分けて考える

草木だから必ずNanite非対応、というわけでもありません。葉の形に切り抜くMaskedと、ガラスのように透けるTranslucentは別です。Skeletal Meshへの対応も進んでいるため、「キャラクターはすべて非対応」と一括りにせず、Naniteの記事で用途と制約を確認してください。

おまけ:先に知っておくと良いこと

大量の背景にはLOD Groupも使う

Static Mesh EditorのLOD Groupは、SmallPropなどの用途別設定です。何十種類もの背景へ手作業で同じ設定を入れる前に、プリセットを出発点にできます。適用すると既存のLOD設定が変わるため、最初は複製で試します。

まとめて描く方法もある

同じ岩や木を大量に置くなら、Instanced Static Mesh / HISMでまとめて扱う方法があります。必ず全体が一回の描画命令になるわけではありませんが、個別に持つ負荷や描画準備を減らす選択肢です。

カリングで読み込みまでは減らない

描画対象を減らしても、大きなレベルの全データが必要なままでは、メモリの問題が残ることがあります。その場合はレベルストリーミングとWorld Partitionへ進みます。遠景をまとめるHLODも、広いレベルで検討する方法です。

最初の一個で「簡略化した」「距離で消えた」「壁の後ろで除外された」を確認できると、重い場面でも試す設定を選びやすくなります。自分のゲームでは何を遠くまで残したいかを考えながら、描く量を調整してみてください。

まとめ

  • LODは「粗くする」、カリングは「そもそも描かない」
  • LODはScreen Size、つまり画面に占める大きさで切り替わる
  • Cull Distance Volumeは、距離で消す範囲をまとめて決められる
  • 見た目と計測を往復して、気づかれない範囲まで削る

調整するときの問いかけは、「この物は、プレイヤーからどれくらい離れて見えるか」 です。遠いものほど大胆に削れます。

同じ物を大量に並べるなら Instancingで描画命令を減らす、読み込み自体を分けるなら Level Streaming へ進んでください。

Unreal Engine このセクションのノート98