Rendering/LODGroup

Last-modified: 2024-11-01 (金) 16:38:49

LODGroup(レベル オブ ディテール グループ)

表示解像度に応じて、表示するMeshRendererを切り替えるコンポーネント
描画負荷軽減に使う。


項目

UpdateOrder:
更新順序。
とりあえず「1」以上に設定します。

Enabled:
効果なし。


LODs(list):
Add押すと増える。
LODのリスト。
複数段階での切替ができる。(もし複数段階で行う場合は、必ずUpdateOrderを「1」以上にしましょう。)

例えば、3段階のLODを設定する場合。
1,近距離:LOD0(ハイポリゴン)、画面(縦方向)に10%以上が映ったら表示する。
2,中距離:LOD1(ローポリゴン)、画面(縦方向)に2%以上10%未満なら表示する。
3,遠距離:Culled(非表示)、画面(縦方向)に2%未満なら表示しない。
Addを2回押して、LOD0とLOD1のリストを作ります。
LOD0のScreenRelativeTransitionHightを0.1(10%)に設定し、Renderers(list)に近距離用のMeshRendererを指定。
LOD1のScreenRelativeTransitionHightを0.02(2%)に設定し、Renderers(list)に中距離用のMeshRendererを指定。

ScreenRelativeTransitionHight:
MeshRendererを切り替える縦画面比率。
0.01以下の数値も設定できるけど、インスペクター上では丸められちゃう。

FadeTransitionWidth:
???

Renderers(list):
Add押すと増える。
MeshRendererのリスト。
複数個指定できる。SkinnedMeshRendererも指定できる。

複数個指定する場合はバウンディングボックスを意識して設定すると良いでしょう。
またProceduralMeshやSkinnedMesh等の変形するMeshを使用する場合は、バウンディングボックスを手動で設定する事をお勧めいたします。


CrossFade:
???

AnimateCrossFading:
???


使用例

  • 適当なスロットにアタッチ。(大抵は、MeshRendererと同じスロット又は親スロットにアタッチします。)各設定を行います。
  • LODはMeshRendererを切り替えて表示するものなので、全く異なるMeshやMaterialを使うこともできます。(もちろん、座標や回転も弄れます。)
  • MeshRendererの切り替わるタイミングは、VRHMDやPCモニターの解像度によって変化します。カメラやミラー、望遠鏡や虫眼鏡等のアイテムも解像度によって変化します。
    このおかげで、大抵はVRHMDよりも写真機の方が高解像度なので、LODの切り替わるタイミングがズレます。VRHMDだとローポリ、写真だとハイポリで写ったり、1Km先のオブジェクトは表示されないけど、望遠鏡を覗くと表示されたりします。


その他

  • Resoniteでは、視錐台カリング(フラスタムカリング)機能があります。これは、視界外(画面外)のオブジェクトを描画対象から除外する事で、不必要な描画処理をせずに済みます。
    しかし、視錐台カリングでは遠くのオブジェクトもそのまま描画処理してしまいます。さらに、ユーザーは自由に空を飛び回り、大きさが変わり、アイテムを持ち込んだりします。
    そのため、作品の品質を維持しつつ描画負荷を軽減できるLOD機能は、とても重要です。
    ワールド、アイテム、アバター、全てにLODを活用し、描画負荷の軽減を図りましょう。
  • LODはプレイヤーに気付かれない様に、さり気なく切り替えると良いかも。(切り替わりが目立つことを「ポッピング」と言います。)
    でもResoniteは自由度が高すぎるので、完全にポッピングを無くす事は不可能です。(ポッピングが起きる事を、ある程度は許容しましょう。)
    段階を細かくし過ぎると、Meshアセットが増えてしまうので、多くても3段階程度に抑えましょう。
    LOD用差分モデル作るのがめんどくさい場合は、約1~5%以下で消す設定が楽ちんです。
  • アバターにも積極的にLODを設定しましょう。
    アクセサリー等、遠くから見たらゴマ粒サイズになってしまう物は、LODで消しちゃいましょう。
    顔等の表情ブレンドシェイプが大量についているSkinnedMeshRendererも、積極的にLODで消しちゃいましょう。(数百m離れたアバターは、シルエットが分かる程度で十分です。)
  • 対象オブジェクトのバウンディングボックスを意識して設定しましょう。
    同じバウンディング(範囲)であれば、LODGroupをまとめた方が効率的です。
  • バウンディングがリアルタイムで変化する場合は、設定が面倒なので、予めバウンディングボックスを手動で設定しておくと良いです。
  • ResoniteのFrooxEngineでは、描画処理をUnityEngineにやらせています。
    その為、LODGroupの機能はUnityEngine側へ指示できる仕様になっていますが、全てが機能するわけではないみたいです。
    (もし、クロスフェード機能の使い方をご存じの方がいらっしゃいましたら、教えて頂けると幸いです。)
  • LODGroupの解説については、Unityマニュアルが参考になります。