LOD の使い方、設定方法

Tutorial

·

intermediate

·

+10XP

·

35 mins

·

Unity Technologies

LOD の使い方、設定方法

これまで以上に幅広いデバイスで 3D ゲームやアプリケーションが使用されるようになると、一貫してスムーズな体験を提供することが難しくなります。これを実現するためのツールの 1 つが、LOD Group を使用したビジュアルアセットのインテリジェントな最適化と表示です。

Languages available:

1. はじめに

このチュートリアルは Unity 2019 LTS を使用して検証しています


Unity では、LOD グループを使用して、カメラからの距離に応じてゲームオブジェクトを様々な LOD(Level Of Detail)で表示します。ゲームオブジェクトが一定の距離を超えると、シーンから完全に切り離すことができます。


2. LOD グループをつくる

LOD グループは、カメラからの距離に応じて異なる方法でオブジェクトをレンダリングするレンダラー(メッシュまたはスプライト)で構成されています。通常、LOD グループは低解像度によるオブジェクト全体を切れ目のない単一メッシュで構成しています。別のアプローチとしては、メッシュをパーツに分割し、ゲームオブジェクトがカメラから遠くなるにつれてパーツ数を減らして表示する方法があります。さらに、スプライトレンダラーは、遠く離れた LODs や、大きな戦場や森林など、多くのキャラクターやオブジェクトが存在するシーンで役立ちます。


3dsMax や Maya などの別のアプリケーションから LOD グループをインポートした場合、レンダラーはすでにグループ化されているため、Unity でグループ化のステップをスキップして、以下の「LOD の設定」に進みます。


Unity で LOD オブジェクトをグループ化するには:


1. レンダラーには「LOD」と名前の最後に連番をつけ、「LOD0」(2 桁の数字が必要な場合は「LOD00」)で始まります。


2. GameObject のドロップダウンから Create Empty を選択して、空のゲームオブジェクトを作成します。オブジェクトに名前を付けます。ここでは、Unity Asset Store で入手可能な 3D Game KitVegetationSmall07 を使用しています。


3. LOD グループで使用するレンダラーは、LOD グループのゲームオブジェクトの子でなければなりません。LOD スプライトまたはメッシュを Project ウィンドウから Hierarchy 内のゲームオブジェクトにドラッグします。これにより、それらがシーンに配置され、ゲームオブジェクトの親となります (画像 01)。


画像 01:LOD グループコンポーネントを含むゲームオブジェクトの親となる LOD メッシュ。

画像 01:LOD グループコンポーネントを含むゲームオブジェクトの親となる LOD メッシュ。


3. LOD の設定

次に、親のゲームオブジェクトに LOD Group コンポーネントを追加して、LOD Group の Inspector を表示します。ここでは、カメラがゲームオブジェクトの特定の範囲内にあるときに表示されるように各 LOD を設定します。LOD Group の Insector に表示されているパーセンテージは、ゲームオブジェクトが Camera ビューで垂直方向に占めるスペースの量を表しています。下の例では、ゲームオブジェクトが Camera ビューの垂直方向のスペースを 60 %以下にすると、30 %以下になるまで LOD 1 が表示され、その後も LOD 1 が表示されます。また、LOD Group の Inspector を使用して、フェードやアニメーションを設定し、LOD 間の遷移をよりスムーズにすることもできます。


1. 親オブジェクトを選択し、Inspector の Add Component ボタンを使用するか、Component ドロップダウンから Rendering > LOD Group の順に選択して、LOD Group コンポーネントを追加します。LOD Group がゲームオブジェクトの Inspector に追加されます。


2. LOD 0 をクリックして選択し、Add ボタンをクリックします。(画像 02)


画像 02:LOD 0 を選択し、Add ボタンをクリックしてメッシュレンダラーを LOD 0 に追加します。

画像 02:LOD 0 を選択し、Add ボタンをクリックしてメッシュレンダラーを LOD 0 に追加します。


3. 最高品質の LOD メッシュレンダラーをダブルクリックして LOD 0 に追加します。 (画像 03)


画像 03:ここではメッシュレンダラーのみを表示していますが、LOD グループはメッシュレンダラーとスプライトレンダラーを任意の組み合わせで表示することができます。

画像 03:ここではメッシュレンダラーのみを表示していますが、LOD グループはメッシュレンダラーとスプライトレンダラーを任意の組み合わせで表示することができます。


4. 1 つの LOD に複数のレンダラーを追加したい場合があります。例えば、ツリーの LOD グループを設定するとします。LOD 0 ではツリーを 1 つの統合されたメッシュとして表示しますが、中品質のメッシュを木の幹用のメッシュと葉用のスプライトに分割し、LOD 1 では両方を表示し、LOD 2 ではツリー全体をスプライトとして表示することができます。複数のレンダラーを追加するには、各 LOD レンダラーの Add ボタン(画像 04)を使用します。プロセスはメッシュとスプライトの LOD レンダラーは同じです。


画像 04:各 LOD のレンダラーのサムネイルがレンダラーバーに表示されます。

画像 04:各 LOD のレンダラーのサムネイルがレンダラーバーに表示されます。


5. デフォルトの 3 つ以上の LOD が必要な場合は、LOD を追加してバーを埋めることを繰り返します。LOD にレンダラーを追加するには、Add ボタンを使用します。


6. セグメントのエッジをドラッグして LOD の範囲を変更します。


7. 遷移をプレビューするには、Scene ビューでマウスのスクロールホイールでスクロールするか、LOD Group の Inspector でカメラをクリックしてドラッグします。カメラは、オブジェクトに対して移動します。しきい値を調整して、カメラからの距離ごとに適切なレベルのディテールを得ることができます。


8. オブジェクトは、最低のパーセンテージで消えたり、非常に小さくなったりすることがあります。消えてしまうしきい値を設定するには、Culled セグメントを調整するか、最大距離でオブジェクトを表示させたい場合は、Culled セグメントを右にスライドさせます。


4. スムーズな LOD レベル感の遷移を実現する

カメラが移動すると、オブジェクトがある詳細レベルから次のレベルへ明らかに切り替わる「ポッピング」することがあります。このような遷移をスムーズにするために、フェードを設定することができます。


1. LOD を選択して、その LOD と次に低い LOD との間の遷移を設定します。


2. Fade モードを選択します。


  • None:メッシュは瞬時に置換(またはカリング)されます。

  • Cross Fade:このモードを選択すると、次に低い LOD にスムーズにフェードします。Animate Cross-Fading がチェックされている場合、フェードは LOD 間のしきい値で発生し、ほぼ瞬時に行われます。または、Animate Cross Fade のチェックを外すと、以下で説明する Fade Transition Width を使用してフェードを手動で制御できるようになります。

  • SpeedTree:SpeedTree アセットはこのモードでインポートされます。SpeedTree 以外のメッシュの場合、このモードは None と同じように動作します。

3. Fade Transition Width は、次の LOD へのクロスフェードを LOD 間のしきい値よりも早く開始させることができ、よりスムーズで長い遷移を可能にします。(画像 05)


画像 05:LOD 0 と 1 は、Fade Transition Width が広くなっているため、どちらも表示されます。

画像 05:LOD 0 と 1 は、Fade Transition Width が広くなっているため、どちらも表示されます。


4. Recalculate Bounds:このボタンは、LOD グループの境界領域を再計算します。これは通常、自動的に行われます。


5. Recalculate Lightmap Scale:ライトマッピングを使用する場合、このボタンを押すと、LOD の割合 (%) に合わせてライトマップのスケールが再計算され、視覚的なアーチファクトを除去するのに役立ちます。ライトマッピングの詳細については、Unity マニュアルを参照してください。


5. まとめ

一度設定した LOD グループは、ゲームオブジェクトとカメラ間の距離が変化すると自動的に動作します。これで、オブジェクトがカメラから離れていて高品質が必要ない場合でも、高品質のメッシュを無駄にレンダリングすることなく、プロジェクトをより効率的に実行できるようになります。


Complete this tutorial