2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VRChat】オクリュージョンカリングでワールドの描画負荷を下げる

Last updated at Posted at 2021-04-14

概要

ここでは描画負荷を下げるための手法の一つである**「オクリュージョンカリング」について解説します。VRChatのワールド制作向けに書いてはいますが、VRChat以外でも使用できる手法です。
あくまでも「ワールドの
描画負荷を下げる手法」であって、「ワールドの容量を減らす**手法」ではないのでそこだけは注意してください。

環境

・Unity2018.4.20f1を使用
・VRCSDK2-2020.11.16.12.43_Publicを使用

※Unity側の機能しか使用していないので、VRCSDKのバージョン・種類に関わらず実装できるはずです。

オクリュージョンカリングとは

あるオブジェクトが他のオブジェクトに隠されてカメラに映らないときに、隠れているオブジェクトのレンダリングを無効にする機能です。
「壁の後ろにあるものはどうせ見えないんだから、描画しないで処理を軽くしちゃおー」って感じ。
ただし、なんでもかんでもオクリュージョンカリングを適応してしまうと、逆にオクリュージョンカリングの処理で重くなり、本末転倒になってしまうので適切に設定しましょう。

1. オクリュージョンカリングについて

1-1. 前準備

カメラの設定

カメラのOcclusion Cullingにチェックが入っているか確認しましょう。デフォルトで入っているので恐らく大丈夫なはずです。
image.png

オクリュージョンカリングを行うウィンドウ

WindowRenderingOcculusion Culling でオクリュージョンカリングの設定を行うウィンドウを出すことができます。
image.png

1-2. オクリュージョンカリングの設定について

まず初めに遮蔽物となるオブジェクトと遮蔽物に隠れると描画されなくなるオブジェクトの設定をそれぞれ行います。
設定は各オブジェクトのInspectorの右上のStatic設定で行います。
その中の**Occluder StaticOccludee Static**の2つがオクリュージョンカリングの設定に関わってきます。
それぞれチェックマークを入れることで、そのオブジェクトにオクリュージョンカリングを適用できます。
image.png

両方とも似たような名前で分かりにくいと思うのでそれぞれ説明していきます。

名称 説明
Occluder Static 他のオブジェクトを遮蔽するオブジェクト。「隠す方」
Occludee Static 他のオブジェクトから遮蔽されるオブジェクト。「隠される方」

1-3. どんなものに設定するのか

基本的には、静的オブジェクト(動かないオブジェクト)にしか設定しません。
以下に、どの対象物にどのように設定するのがオススメなのかまとめます。

設定対象 設定するもの
動的オブジェクト(PickUpできるもの等) 共に設定しない
家の壁や塀 Occluder Static・Occludee Staticともに設定する。
家具や小物類 Occludee Staticのみを設定する。

2. オクリュージョンカリングを実践する

2-1. ベイク

以上のことを元にオブジェクトにOccluder StaticOccludee Staticの設定を行いましょう。地道にポチポチと。
設定が終わったら早速オクリュージョンカリングを適用させていきます。
Occulusionのウィンドウを開き、右下にあるBakeを押しましょう。ワールド規模にもよりますが遅くても5~10秒ほどでベイクが完了します。データ容量自体は多くても50KB辺りになると思います。
せっかく設定してもベイクをしないと意味がないので忘れないようにしましょう。
image.png

オクリュージョンカリングを設定したオブジェクトを移動させるなどした場合は、そのたびに再度Bakeし直しましょう。
そうしないと、視界内のオブジェクトがチラチラと消えたり現れたりする原因となります。

2-2. それぞれのタブの説明

OcculusionのウィンドウにそれぞれObjectBakeVisualizationの3つのタブがあると思います。それぞれ説明していきます。

Objectタブ

選択中のオブジェクトのOccluder Staticと・Occludee Staticを行う場所です。
先ほど説明したInspectorのStatic設定と同様のことが行えます。

Bakeタブ

オクリュージョンカリングのBake設定を行う場所。
以下、説明。

名称 説明
Smallest Occluder この値よりも大きいオブジェクトが遮蔽物(Occluder)として見なされる。
Smallest Hole この値よりも小さな隙間は視線を通さないと見なされ、奥にあるオブジェクトは遮蔽される。
Backface Threshold 値を100未満に設定するとオブジェクトの見えない裏側のメッシュの描画を省略して、データを小さくする。

Visualizationタブ

シーンでオクリュージョンカリングの状態を確認する場所。
このタブを選択した状態でカメラを動かしてみると……

(赤色が遮蔽物 / 青色が遮蔽されるオブジェクト)
Videotogif (1).gif

ただし、カメラがこの青いセルの範囲外にでるとオクリュージョンカリングが効かなくってしまいます。

そういうときにはOcculusion Areaというものを使います。

2-3. Occulusion Area

まず、CreateCreateEmpty で空のオブジェクトを作成し、AddComponentからOcculusion Areaを追加します。
image.png

そして範囲を設定します。

この状態のまま再びベイク。すると…
先ほどは範囲外だった遠い位置からでもオクリュージョンカリングが効いてることが分かるかと思います。(分かりづらいけれど)
Videotogif (2).gif

説明は以上となります。

参考記事

UnityDocumention オクリュージョンカリング

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?