岩や木を増やしていくと、広い景色を見渡したときにゲームが重くなることがあります。近くの岩は細部まで見たいけれど、遠くの小さな岩に同じ細かさが必要でしょうか。壁の向こうに隠れた岩も、今の画面へ描く必要はなさそうです。
こうした違いを使って描画の仕事を減らすのが、LODとカリング です。LODは形を簡略化し、カリングは描く対象を絞ります。どちらも「置いた物を全部消して軽くする」のではなく、プレイヤーに必要な見た目を残すための調整です。
この記事では、立体モデルの形を表す メッシュ 一個から「形が変わる」と「表示されなくなる」を試します。その後、壁に隠れた物の確認や、複数の物への距離設定へ進みます。
この記事でわかること
- LOD・視野外・遮蔽・距離による、描画の減らし方の違い
- LODの生成と、Screen Sizeで切り替わる仕組み
- Cull Distance Volumeの設定と、消えないときの確認
- 見た目と計測を往復して、使える設定へ調整する流れ
Windows版UE5で、レベルへ物を配置したことがある方を想定します。実践には Naniteを使わない、レベルへ配置したStatic Mesh を使います。Blueprintや外部アセットの準備は不要です。図はブログ用の模式図です。
まず、減らす仕事を分ける
LOD(Level of Detail) は、同じ物に細かさの違う形を用意する仕組みです。近くでは細かい形、画面上で小さくなったら簡略な形を使います。
カリング は、条件に合う物を描画の対象から外すことです。視野の外、物陰、遠すぎる場所では、その物を画面へ描く仕事を減らせます。

| 方法 | 何を変えるか | 例 |
|---|---|---|
| LOD | 一個の形を簡略にする | 遠くの岩の細かな凹凸を減らす |
| フラスタムカリング | カメラの視野外を除く | 背後の岩を描画対象から外す |
| オクルージョンカリング | 手前の物に隠れた対象を除く | 壁に完全に隠れた岩を外す |
| 距離カリング | 決めた距離より遠い対象を除く | 遠くの小さな装飾を消す |
LODで三角形を減らせば、その形を処理する仕事を減らせます。カリングは、対象の描画準備やGPU側の描画を減らせます。ただし「LODならGPUだけ、カリングならDrawだけ」とは決まりません。stat unitで、全体と各担当の時間を比べます。
カリングされても、Actorそのものが削除されるわけではありません。Tickや当たり判定、メモリ上のデータも、そのまま残ることがあります。「画面へ描かない」と「ゲームから取り除く」は分けて考えましょう。
LOD:小さく見える物を簡略化する
従来のStatic Meshでは、最も細かい形を LOD0、簡略版を LOD1、LOD2… と呼びます。切り替わるときに輪郭が大きく変わらないよう、見える大きさに合った形を使います。

遠くなら細部を省けますが、どこまで省けるかは物次第です。岩の細かな凸凹は目立たなくても、橋の柱や木の輪郭が欠けると、遠くからでも気づくことがあります。
まず一個のメッシュにLODを用意する
歩いて確認できるThird Personテンプレートのプロジェクトを使います。練習用に、Engineの基本形状Sphere(球)をプロジェクトへコピーします。
- Content Browserの「Settings」で「Show Engine Content」をオンにします。
- 「Engine → BasicShapes」にある Sphere を選び、
Ctrl + Cでコピーします。 - 自分の「Content」に練習用フォルダを作り、
Ctrl + Vで貼り付け、名前を SM_VisibilityProbe にします。 - コピーしたアセットをダブルクリックし、Static Mesh Editorを開きます。
- 「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に表示される三角形数も見て、実際に段階的に減ったか確認してください。

最初は 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へ戻し、普段の見た目でも確認します。色が変わることは設定の確認、輪郭が気にならないことは品質の確認です。
カリング:視野外や物陰の描画を減らす
カメラが映せる空間を 視錐台(フラスタム) と呼びます。カメラから先へ広がる、視野の立体的な範囲です。フラスタムカリング では、その範囲の外にある物を描画対象から外します。
一方、範囲内でも壁の後ろに完全に隠れている物があります。この遮蔽を調べるのが オクルージョンカリング です。

通常のPC向けプロジェクトでは、こうした判定をエンジンが行います。まずは新しい仕組みを自作するより、どこが除外されているかを確認します。通路の曲がり角は奥を隠せますが、高いカメラで見渡すRTSの平原では、隠れる物が少なくなります。同じオクルージョンでも、場面によって効き方が違います。
バウンズは、物を包む判定用の範囲
可視性の判定では、メッシュを包む バウンズ が使われます。箱や球で、おおよその広がりを表したものです。エディタの「Show → Advanced → Bounds」で表示できます。
実物より大きすぎるバウンズは、物が隠れていても「まだ見えるかもしれない」と扱われる一因になります。逆に小さくしすぎると、見えている部分まで消える問題につながります。

たとえばマテリアルで木を揺らすときは、動いた枝まで含めた範囲が必要です。カリングを早めるためだけに縮めず、見た目の動きと判定範囲を合わせます。
遮蔽の判定にも仕事がかかり、結果の反映に遅れが出る方式もあります。また、画面へ直接見えなくても影などに必要な描画は別に扱われます。「物陰に入れば、そのActorに関わる負荷が全部ゼロ」とは考えないようにしましょう。
距離カリング:一個で試して、まとめて設定する
遠くの物が見えていても、「ここまで離れたら小さな装飾は描かない」と決める方法です。まず一個に設定し、何が変わるかを確かめます。
一個だけ、15メートルで消す
- レベルに置いたSM_VisibilityProbeを選び、Detailsの「Mobility」を Static にします。ゲーム中に動かさない物として扱う設定です。
- Detailsで「Draw Distance」を検索し、Desired Max Draw Distanceを1500 にします。
- 「Never Distance Cull」はオフにします。この設定がオンだと、距離による除外をしません。
- 選択を外し、ビューポートにマウスを置いて
Gを押し、Game Viewへ切り替えます。 - 球へ近づいたり離れたりして、表示が切り替わることを確認します。
UEの標準的な距離単位は1uu=1cmなので、1500は15mです。距離はプレイヤーの足元ではなく、カメラから対象のバウンズ中心まで を基準に考えます。Game Viewは、エディタで編集用の表示を隠し、ゲームでの見え方を確かめるモードです。

離れると消え、近づくと戻れば成功です。今は仕組みが分かるよう、あえて短い距離にしています。
Cull Distance Volumeで、サイズごとにまと める
岩や小物へ一つずつ距離を入れる代わりに、範囲内の対象へまとめて設定できるのが Cull Distance Volume です。Volumeは、設定を適用する空間の範囲を表します。
- 球のDesired Max Draw Distanceを 0 へ戻し、個別の距離制限を外します。「Allow Cull Distance Volume」はオンにします。
- 「Place Actors」でCull Distance Volumeを検索して配置し、球を囲む大きさに広げます。
- Volumeの「Enabled」をオンにし、Detailsの「Cull Distances」を次の表に合わせます。初期の行を編集し、足りなければ「+」で追加します。
| Size | Cull Distance | 意図 |
|---|---|---|
| 100 | 1500 | 小さな物は15mまで |
| 500 | 4000 | 中くらいの物は40mまで |
| 10000 | 0 | 大きな物は距離では消さない |
Size は対象のバウンズの大きさ、Cull Distance は消す距離です。各対象に近いSizeの行を選んで適用します。Size100は「100以下のすべて」という範囲指定ではなく、Size0も「全サイズ」の指定ではありません。

行の間の距離を滑らかに計算するわけでもありません。対象を選んで 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 Culling、Cull Distance Volumes、Static Mesh Automatic LOD Generation、LOD Screen Size。
FreezeRendering:隠れた物の扱いを確かめる
カリングが働いても、もともと見えない物が描かれなくなるだけなので、正面の景色では分かりにくいものです。FreezeRendering は、その視点での描画状態を固定し、別の角度から調べるために使います。
練習用の球を、十分大きな不透明の壁の後ろへ置きます。基本形状のCubeを幅・高さ方向に拡大すれば、確認用の壁を作れます。ここでは距離カリングと混ざらないよう、球のDesired Max Draw Distanceを0、Allow Cull Distance Volumeをオフにしておきます。
- エディタのレベルビューポート をLitにし、球が壁に完全に隠れる位置へ移動します。
- 判定が落ち着くまで少し待ち、コンソールへ
FreezeRenderingと入力します。 - カメラを壁の横へ移動し、壁の後ろをのぞきます。
- 固定した時点で球が除外されていれば、後ろへ回っても球は描かれません。
- もう一度
FreezeRenderingを入力して解除し、球が再び表示されることを確認します。

コンソールはstat unitの記事と同じ方法で開けます。固定中は通常のプレイ表示ではないため、この状態で性能を比べるのは避け、確認後に解除してください。
球が残る場合は、壁から一部が見えていないか、バウンズが大きくはみ出していないかを確認します。Wireframe表示ではオクルージョンの確認にならないため、Litを使います。
別の確認方法として、エディタで r.VisualizeOccludedPrimitives 1 を使うと、遮蔽で除外された物のバウンズが緑の枠で表示されます。確認後は値を0へ戻します。
実践:見た目を保ちながら、変更前後を比べる
一個で仕組みを確認できたら、同じ球を少しずつ増やしてみます。最後は自分の岩や木へ置き換え、見た目を保てる設定を探します。
同じ配置で、設定だけを変える
遮蔽を試した壁から離れた、見通しのよい場所を使います。球をAlt+ドラッグで複製し、手前から奥まで数列に並べます。まず32個程度で十分です。必要なら128個、256個へ増やします。正面から重なって一列に見えないよう、横にも間隔を空け、カメラから15m以内と15mより遠い列の両方を作ります。
全体をCull Distance Volumeで囲み、球のAllow Cull Distance Volumeはオン、Desired Max Draw Distanceは0へ揃えます。VolumeのEnabledを切り替えれば、同じ配置で距離カリングの有無を 比べられます。

比較する状態は次の三つです。アセットの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などの配置方法で対応範囲を確認します。

草木だから必ず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 へ進んでください。