プレイヤーがレベルに配置したスタティックメッシュの間近にきたら、メッシュが非常に詳細に見えるようにしたいことでしょう。しかし、プレイヤーがメッシュから遠く離れたらメッシュを非常に詳細、複雑に表示する必要はありません。画面上でわずかなピクセルしか使わず、プレイヤーからほとんど見えない場合は、複雑で詳細なメッシュを持つ意味はありません。しかし、プレイヤーがメッシュの間近にきてはっきりとメッシュを見ることができるようになった場合は、メッシュを詳細化する必要があります。UE4 では、レベルのパフォーマンスを高めるために、メッシュをレベルに配置し、プレイヤーがメッシュから遠くに離れると複雑度が低いメッシュに切り替わるようにすることができます。これは、Level of Details (詳細度) すなわち LOD を使用して行うことができます。この操作ガイドでは、メッシュの詳細度が低いバージョンを UE4 にインポートし、プレイヤーが近くに来たり、離れたりするにつれてあるメッシュから他のメッシュにシームレスに切り替わるようにします。
セットアップ
この操作ガイドでは UE4 にインポート可能な .FBX として保存した何らかのメッシュを既に持っている必要があります。この例では Maya で作成した単純なポリゴンの球体を使用します。別のアプリケーションで作成した独自のアセットも使用可能です。
メッシュをエクスポートしたら、UE4 を起動します。作業対象にしたいプロジェクトがあれば、この操作ガイドでそれをご利用いただいても構いません。そうでなければ、[New Project] タブに進み、Starter Content を必ず有効にして Blueprint Frist Person Template を選択します。有効にしないと、この操作ガイドで後で使用することになる一部のアセットが存在せず、理解が難しくなるかもしれません。
新しいプロジェクトの作成方法の詳細は、新しいプロジェクトを作成する を参照してください。
その後、プロジェクトに名前を付けてその場所を決めて、[Create Project (プロジェクト作成)] ボタンをクリックします。
LOD の作成
プロジェクトを読み込んだら、コンテンツ ブラウザ 内の 「Meshes」 フォルダに移動し、 FirstPersonCube_Rounded という名前のアセットを見つけます。
アセットを見つけたら、以下のいずれかの方法でスタティックメッシュ エディタ内で開きます。ダブルクリック するか、右クリック して表示されるコンテキスト メニューから Edit を選択して開きます。以下のようになるはずです。
スタティックメッシュ エディタでアセットを開いたら、[Details (詳細)] パネルを探します。デフォルトで右上隅にあります。見つかったら以下の画面のようなものが見えるはずです。
一番上のセクションは LOD0 とラベル付けされています。LOD はゼロ基点のシステムです。従って、LOD0 は一番めのエントリで LOD1 は二番目というようになります。LOD0 はメッシュのベース LOD であり、メッシュが LOD をひとつだけ持つ場合に使用されます。この例で、ちょうどメッシュがそれを行っています。次に、これを変更していきます。
このすぐ下にあるセクションは LOD Settings と名前が付いています。このセクションには、これから説明するいくつかのオプションがあります。ひとつめのオプションは、[Number of LODs (LOD 数)] です。デフォルトで 1 になっており、LOD をインポートするにつれて増えていきます。この値は、自動メッシュ削減機能が利用可能であれば編集可能です。しかし、この機能を利用するためには最初に Simplygon からライセンスを取得しなければなりません。
次に説明するオプションは、 [LOD Import] です。このオプションは、 に類似したドロップダウン メニューを表示します。Import LOD Level 1 を選択します。これで、この操作ガイドの前の部分で説明した .FBX ファイルにブラウズできるウィンドウが開きます。.FBX ファイルにブラウズし、選択するとそのメッシュ LOD1 すなわち二番目の LOD がインポートされます。一度これを行ったら画面右下に以下の画面に類似したポップアップ通知が表示されます。
この例では、LOD をひとつだけインポートします。これで、合計 2 になりますが、必要であればさらにインポートすることができます。これを行うには、 LOD Import のドロップダウン メニューでクリックし、 Import LOD Level X を選択します。この場合、数字 X はインポートしたかったものの次の LOD になります。インポート済みの LOD も再インポートすることができます。LOD1 に対してインポート済のものの代わりに別のメッシュをインポートしたい場合、LOD Import のドロップダウン メニューをクリックして Reimport LOD Level 1 を選択します。ここでドロップダウン メニューをクリックすると、オプションの表示は以下のようになるはずです。
LOD1 のメッシュがインポートされたので、LOD の威力をお見せするために、いくつかの値を調整してみます。[Details] パネルの [LOD Settings] セクション内で、最初のオプションは [Auto Compute LOD Distances (LOD 距離を自動計算)] です。このオプションは、ある LOD から別の LOD にいつ切り替えるかを指示します。これは画面サイズのパーセントを LOD の数で均等に割って行います。例えば、このケースでは 2 つの LOD があります。そのため、メッシュが画面の 50 パーセント以上を占有している場合、LOD0 が表示されます。メッシュが画面の 50 パーセント未満を占有している場合、LOD1 が表示されます。LOD が 3 つある場合、LOD0 はメッシュが画面の 66.7 パーセント以上を占める場合に表示されます。LOD1 はその値と 33.3 パーセントの間で表示されます。LOD2 はメッシュが画面の 33.3 パーセント未満を占める場合に表示されます。しかし、これは、このケースでは役立たないかもしれません。使用するメッシュは多くの場合、画面の 50 パーセント未満しか占めないことが多いからです。しかし、こうした値は手動で変更できます。これは、[Auto Compute LOD Distances] のチェックを外し、個々の LOD の Screen Size 値を手動で調整します。
このデモの目的上、[Auto Compute LOD Distances] のチェックを外します。これを行ったら LOD1 の Screen Size 値を見つけて、それを 0.01 に変更します。つまり、レベル内にあるキューブ メッシュが画面サイズの 1 パーセント未満を占める場合、キューブは LOD1 としてインポートしたものに切り替わります (この例では球体になります)。各 LOD のマテリアルも変更できます。LOD の威力と有用性をさらに実証するために、LOD1 のマテリアルを M_Metal_Gold に変更します。
コリジョン
インポートした LOD (Level of Detail) から Complex Collision (トライアングル毎) を使うように スタティックメッシュ を設定することができます。これは物理パフォーマンスを最適化するのに便利です。特に、スタティックメッシュ に対する Complex Collision や、Complex Collision Trace が多数ある場合に便利です。ただし、LOD が変化する場合に Complex Collision 間でランタイムのスイッチがありません。メッシュに対するすべての Complex Collision に対して選んだ LOD が使用されます。
セットアップ方法については、 %WorkingWithContent/Types/StaticMeshes/HowTo/LODCollision:title% をご覧ください。
使用中の LOD
これを行ったら、メッシュを保存し、レベル エディタ に戻ります。メッシュに近づくたびに、丸みを帯びたキューブになることがわかります。メッシュから遠ざかると、インポートした球体になります。距離ではなく、画面サイズで計算されることにも注意してください。そのため、メッシュの大きなインスタンスを小さなインスタンスの横に配置し、両方から同じ距離だけ移動し始めると、小さい方のインスタンスは大きなインスタンスよりも先に次の LOD に切り替わります。まず、以下の例を見てみましょう。
遠くの場合の LOD | 近くの場合の LOD |
さらに遠くに離れると、前面にあるキューブだけが画面の 1 パーセントを超える量を占めます。そのため、まだ LOD0 、すなわちキューブです。しかし、後ろにあるメッシュは移動して離れると小さくなります。したがって、1 パーセント未満しか占有せず、LOD1 (すなわちこの例では金色の球体) に変わります。また、LOD は画面サイズに対応していることにも注意してください。ビューポートをデタッチし、それをリサイズすると、メッシュがカバーする比率が、ビューポートのサイズに対応し、それに応じて LOD を変更します。
キューブを球体に変更することは、明らかに LOD の実用的な使い方ではありませんが、この例では LOD がどのように機能するかを示すためにこうした表示にしています。これで間近で見栄えを良くして、遠くではパフォーマンスのために最適化するように LOD をレベル内のメッシュに適用する用意ができました。