技術(非IT系)

オクルージョンカリングとは?意味や仕組みも!(3DCG:レンダリング:非表示処理:ゲームエンジン:Unityなど)

当サイトでは記事内に広告を含みます

3DCGやゲーム開発の現場では、いかに美しい映像を保ちながら処理負荷を抑えるかが大きな課題です。

特にリアルタイムレンダリングを扱うUnityなどのゲームエンジンでは、画面に映らないオブジェクトまで律儀に描画してしまうと、フレームレートの低下や動作のもたつきにつながりかねません。

そこで注目されるのがオクルージョンカリングとは?意味や仕組みも!というテーマで語られることの多い、非表示処理の仕組みです。

オクルージョンカリングという言葉は聞いたことがあっても、具体的にどのような仕組みで負荷を軽減しているのか、正確に説明できる方は意外と少ないのではないでしょうか。

また、フラスタムカリングやLODなど似たような最適化用語も多く、混同してしまうケースも珍しくありません。

本記事では、オクルージョンカリングの基本的な意味や仕組みはもちろん、種類ごとの特徴やUnityでの設定方法、導入時の注意点まで幅広く丁寧に解説していきます。

3DCGのレンダリング効率を高めたい方や、ゲームエンジンの最適化について理解を深めたい方は、ぜひ最後までご覧ください。

オクルージョンカリングとは?結論は画面に映らない物体を描画しない非表示処理です

それではまずオクルージョンカリングの基本的な意味と結論について解説していきます。

結論から申し上げると、オクルージョンカリングとは、カメラから見て他の物体に完全に隠れてしまい、画面上に映らないオブジェクトの描画処理を省略する最適化手法です。

3DCGの世界では、シーン内にどれだけ多くのオブジェクトが存在していても、実際に画面に描画されるのはカメラの視界に入っている部分だけで構いません。

にもかかわらず、隠れている物体まで律儀に計算し描画してしまうと、GPUやCPUに余計な負荷がかかってしまいます。

その無駄な描画をあらかじめカットし、必要な部分だけを効率よくレンダリングする仕組みこそが、オクルージョンカリングです。

ゲームエンジンにおいてはUnityやUnreal Engineなど、多くのエンジンが標準機能としてこの仕組みを備えています。

オクルージョンカリングの本質は、見えないものは計算しないというシンプルな発想にあります。

この発想を実現するために、視錐台や遮蔽物との位置関係を判定するさまざまな仕組みが用いられているのです。

オクルージョンカリングの基本的な意味

オクルージョンとは英語で遮蔽や閉塞を意味する言葉です。

カリングは間引くという意味の単語で、不要な要素を取り除く処理全般を指します。

つまりオクルージョンカリングとは、直訳すると遮蔽されている部分を間引く処理ということになるでしょう。

3DCGにおいては、壁の裏側に隠れているキャラクターや、建物の奥にある家具などが典型的な対象です。

これらは計算上は存在していても、視覚的には一切見えていないため、描画する必要がありません。

言い換えれば、見えるかどうかという一点だけを基準に、描画するオブジェクトを取捨選択する処理と言えます。

なぜレンダリングで注目される技術なのか

近年のゲームやCGコンテンツは、非常に高精細なモデルや広大なオープンワールドを扱うことが増えています。

シーンに含まれるポリゴン数やオブジェクト数が膨大になるほど、すべてを描画しようとすると処理負荷は際限なく増えていきます。

そこでオクルージョンカリングを導入することで、実際に見えている部分だけに計算リソースを集中させることができるのです。

結果として、フレームレートの安定や消費電力の削減にもつながり、快適な描画体験を実現できます。

大規模なシーンを扱う開発現場ほど、オクルージョンカリングの重要性は高まっていくでしょう。

特にVRコンテンツのように高いフレームレートが求められる分野では、なくてはならない最適化技術の一つです。

フラスタムカリングとの違い

オクルージョンカリングとよく混同される技術に、フラスタムカリングというものがあります。

フラスタムカリングとは、カメラの視錐台の外側にあるオブジェクトを描画対象から除外する処理です。

一方でオクルージョンカリングは、視錐台の内側にあっても他の物体に隠れているものを除外する処理という違いがあります。

簡単に言えば、視野の外にあるかどうかを判定するのがフラスタムカリングで、視野内で見えているかどうかを判定するのがオクルージョンカリングです。

両者は競合する技術ではなく、実際には併用されることがほとんどでしょう。

例えば視野角60度のカメラを想定した場合を考えてみます。

視野の外にある背景オブジェクトはフラスタムカリングで除外されます。

視野の中にあっても、手前の壁に完全に隠れているオブジェクトはオクルージョンカリングで除外されます。

オクルージョンカリングの仕組みを詳しく解説

続いてはオクルージョンカリングが実際にどのような仕組みで動作しているのかを確認していきます。

大まかな流れとしては、カメラの位置や向きをもとに視界を計算し、その中で他の物体に遮られているオブジェクトを判定して描画リストから除外するという手順を踏みます。

この判定処理は非常に高速に行う必要があるため、さまざまな工夫が凝らされているのです。

視錐台とオクルーダーの関係

視錐台とはカメラから見える範囲を表す四角錐状の領域のことです。

この視錐台の中に存在するオブジェクトのうち、他の物体を隠す側の役割を果たすものをオクルーダーと呼びます。

壁や大きな建造物、地形などは代表的なオクルーダーの例でしょう。

反対に、オクルーダーによって隠される側のオブジェクトはオクルーディーと呼ばれます。

オクルージョンカリングでは、このオクルーダーとオクルーディーの位置関係を常に計算し続けているのです。

オクルーダーが少ないシーンでは判定処理も軽くなりますが、複雑な地形が多いシーンほど計算コストは上がりやすくなります。

オクルージョンクエリの流れ

実際の判定処理では、オクルージョンクエリと呼ばれる仕組みが使われることが一般的です。

まず対象オブジェクトを囲む簡易的なバウンディングボックスを用意します。

次に、そのバウンディングボックスがカメラから見て他の物体に隠れているかどうかをGPU上で高速に判定します。

隠れていると判定された場合、そのオブジェクトの詳細な描画処理はスキップされる仕組みです。

逆に少しでも見えている部分があると判定されれば、通常どおり描画が行われます。

この一連のクエリ処理をフレームごとに繰り返すことで、常に最適な描画リストが保たれるというわけです。

GPUとCPUでの処理の違い

オクルージョンカリングの判定はGPUで行われる場合と、CPUで行われる場合の両方が存在します。

GPUベースの判定は精度が高い一方で、クエリの結果を取得するまでにわずかな遅延が生じることがあります。

CPUベースの判定は、事前に計算しておいたデータを参照するだけで済むため、比較的高速に処理できるのが特徴です。

どちらの方式を採用するかは、ゲームエンジンや対象プラットフォームの特性によって変わってくるでしょう。

用途に応じて最適な方式を選ぶことが、快適なパフォーマンスを実現する鍵と言えます。

オクルージョンカリングの種類と代表的な手法

続いてはオクルージョンカリングにどのような種類や手法があるのかを確認していきます。

一口にオクルージョンカリングと言っても、実装方法にはいくつかの種類が存在します。

それぞれ得意とするシーンや処理コストが異なるため、目的に応じた使い分けが重要でしょう。

手法 特徴 向いているシーン
ハードウェアオクルージョンクエリ GPUを使い実際の描画結果に基づいて判定する 動的オブジェクトが多いシーン
ソフトウェアラスタライゼーション 簡易的な深度バッファをCPU上で構築し判定する 大規模かつ静的なシーン
PVS事前計算方式 あらかじめ可視領域を計算しデータとして保持する 屋内マップなど区画が明確なシーン

上記のように、それぞれの手法には得意な場面と苦手な場面があります。

ハードウェアオクルージョンクエリ

ハードウェアオクルージョンクエリは、GPUの機能を直接利用して可視判定を行う手法です。

実際にオブジェクトを簡易描画してみて、ピクセルが書き込まれたかどうかを確認するという仕組みになっています。

精度が高く、動的に動き回るオブジェクトが多いシーンでも柔軟に対応できる点が魅力でしょう。

ただし判定のたびにGPUとのやり取りが発生するため、多用しすぎると逆にオーバーヘッドが増えてしまうこともあります。

適用するオブジェクトの数やタイミングを調整する工夫が求められるでしょう。

ソフトウェアラスタライゼーション方式

ソフトウェアラスタライゼーション方式は、簡易的な深度情報をCPU側で構築し、その情報をもとに可視判定を行う手法です。

GPUとのやり取りが少なく済むため、比較的軽量に動作させられるという利点があります。

大規模なオープンワールドや、地形の起伏が複雑なシーンとの相性が良い手法と言えるでしょう。

一方で判定精度はハードウェア方式に比べてやや粗くなる傾向があります。

用途や求める精度に応じて選択することが大切です。

事前計算型オクルージョンカリング

PVSとはPotentially Visible Setの略で、あらかじめ可視となりうる領域を計算しておく手法です。

マップを細かい区画に分割し、それぞれの区画からどの区画が見える可能性があるのかを事前に計算してデータ化しておきます。

実行時はそのデータを参照するだけで済むため、リアルタイムでの計算コストを大幅に抑えられるのが大きな強みです。

Unityのオクルージョンカリング機能も、基本的にはこのPVSに近い考え方でベイクを行っています。

ただし事前計算に時間がかかることや、動的に変化する地形には不向きな点には注意が必要でしょう。

Unityにおけるオクルージョンカリングの設定と使い方

続いてはUnityというゲームエンジンにおけるオクルージョンカリングの具体的な設定方法を確認していきます。

Unityにはオクルージョンカリングを扱うための専用機能が標準で用意されており、比較的手軽に導入できる点が魅力です。

Occlusion Cullingウィンドウの基本操作

UnityでオクルージョンカリングとはOcclusion Cullingウィンドウから設定できる機能を指します。

メニューからWindow、Rendering、Occlusion Cullingの順に選択すると、専用のウィンドウを開くことができます。

このウィンドウでは、シーン内のオブジェクトをどのように区画分けし、可視判定を計算するかを設定できます。

設定が完了したら、Bakeタブからベイク処理を実行することで、可視性データが生成される仕組みです。

ベイクにはシーンの規模に応じて数分から数十分程度の時間がかかる場合もあるでしょう。

設定項目 役割
Smallest Occluder 遮蔽物として扱う最小サイズを指定する
Smallest Hole 視認可能とみなす隙間の最小サイズを指定する
Backface Threshold 裏面ポリゴンをどこまで考慮するかを調整する

これらの数値は、シーンの規模やオブジェクトの密度に応じて細かく調整していくことになります。

Occlusion Areaとベイクの手順

Occlusion Areaとは、オクルージョンカリングの計算対象となる範囲を指定するためのコンポーネントです。

広大なシーンの中でも、実際にプレイヤーが移動する範囲だけに絞って計算させたい場合に活用します。

Occlusion Areaを設置したら、対象オブジェクトのStaticフラグを有効にしておく必要があります。

準備が整った状態でベイクを実行すると、区画ごとの可視性データがシーンに保存される流れです。

ベイクを行う前に、必ず不要なオブジェクトのStaticフラグを見直しておくことをおすすめします。

Staticフラグの設定が不十分だと、正しく可視判定が行われず、想定外の描画不具合につながることがあるためです。

静的オブジェクトと動的オブジェクトの扱い

Unityのオクルージョンカリングは、基本的に位置が変化しない静的オブジェクトを前提に計算が行われます。

キャラクターや車など、動き回る動的オブジェクトについては、Occlusion Cullableコンポーネントを個別に設定することで対応可能です。

動的オブジェクトが多いシーンでは、事前計算だけに頼るのではなく、先述したハードウェアオクルージョンクエリとの併用も検討すると良いでしょう。

静的と動的、それぞれの特性を理解したうえで組み合わせることが、安定したパフォーマンスへの近道です。

オクルージョンカリングを使うメリットと注意点

続いてはオクルージョンカリングを導入することで得られるメリットと、注意しておきたいポイントを確認していきます。

描画負荷を抑えるメリット

最大のメリットは、やはり描画負荷を大幅に軽減できるという点でしょう。

特に建物内部やダンジョンのような、視界が壁で区切られやすいシーンでは効果が顕著に表れます。

不要な描画が減ることでフレームレートが安定し、プレイヤー体験の向上にも直結します。

モバイル端末など処理性能に制約のあるプラットフォームでは、その恩恵はさらに大きなものとなるでしょう。

結果として、より高精細なモデルやエフェクトを他の部分に予算として回せるようになる点も見逃せません。

導入時に起こりやすい不具合

一方で、オクルージョンカリングの導入時にはいくつかの不具合が起こりやすい点にも注意が必要です。

代表的なものが、本来見えるはずのオブジェクトが一瞬だけ消えてしまうポッピングと呼ばれる現象でしょう。

これはベイクの区画設定が粗すぎたり、Staticフラグの設定漏れがあったりする場合に発生しやすくなります。

対策としては、Occlusion Areaの範囲を細かく調整したり、問題の起きやすいオブジェクトを個別に確認したりすることが挙げられます。

導入後は必ず実機やターゲット環境での動作確認を行うようにしましょう。

他の最適化手法との組み合わせ方

オクルージョンカリングは万能の最適化手法というわけではありません。

LOD、すなわちレベルオブディテールによる描画品質の段階調整と組み合わせることで、より効果的な負荷軽減が期待できます。

また、先述したフラスタムカリングとの併用も基本と言えるでしょう。

バッチングやオブジェクトプーリングといった手法とあわせて、総合的に最適化を進めていくことが大切です。

単体の技術に頼るのではなく、複数の手法を適材適所で組み合わせる視点を持ちましょう。

まとめ

今回は、オクルージョンカリングとは何か、その意味や仕組みについて詳しく解説してきました。

オクルージョンカリングとは、カメラから見て他の物体に隠れているオブジェクトの描画を省略する仕組みであり、3DCGやゲームエンジンにおける重要な最適化技術です。

ハードウェアオクルージョンクエリやPVSといった手法にはそれぞれ特徴があり、シーンの規模やオブジェクトの動きに応じて使い分けることが求められます。

Unityではウィンドウ上から比較的手軽に設定できる一方で、Staticフラグの管理やベイクの区画設定など、細かな注意点も存在します。

フラスタムカリングやLODなど、他の最適化手法とあわせて取り入れることで、より快適でパフォーマンスの高いコンテンツづくりにつながるでしょう。

ぜひ本記事の内容を参考に、ご自身の制作環境に合ったオクルージョンカリングの活用方法を検討してみてください。