Language:
Page Info
Skill Level:
Engine Version:
The translation of this page is out of date. Please see the English version for the latest version of the page.

Open World ツールのヒントとコツ

T_Tip-Trick_Header.png

以下のセクションでは Open World ツールを最大限活用するために利用可能なヒントとコツを説明します。 こうしたヒントやコツは、2015 Game Developers カンファレンスで初公開された Kite Demo を制作するために Open World ツールを使用したエピックの開発者から直に寄せられたものです。 以下は手順を追って説明するチュートリアルではなく、開発で何が行われたか、またこうしたテクニックをご自身のプロジェクトに適用する方法の概要を示すものです。

Open World ツールの使用方法に関する基本的情報をお探しの場合は、 プロシージャルなフォーリッジのクイックスタート をご覧ください。または Grass ツールの使用方法に関する基本情報をお探しの場合は、 Grass ツールのクイックスタート をご覧ください。

Grass ツールによるフォーリッジ メッシュのカリング

Grass ツールのカリングを調整してかなり遠く離れたスタティックメッシュをレンダリングすることができますが、オプションの設定を高くしすぎると、ビデオカードあるいは UE4 エディタ セッションがクラッシュする危険性があるので注意してください。

Grass ツールをプロジェクトで使用すると、一定の距離を過ぎると使用中のスタティックメッシュが表示されなくなることに気が付くと思います。 これをカリングといいます。。カメラから一定距離以上離れたオブジェクトがレンダリングされないようにして、プロジェクトのレンダリング要求を減らすために使う最適化手法です UE4 では何通りかの方法で、Grass ツールを使ってスタティックメッシュのレンダリングを停止することができます。 最初の方法は、Grass ツールがスタティックメッシュをカリングする距離を、Landscape Grass Type Actor の[Grass Varieties] セクションの [Start][End] Cull Distance 設定で設定する方法です。

Grass_Tool_Cull_Distance.png

上の画像は、草原のスタティックメッシュに使ったカリング設定です。Kite デモの草にもいくらか使いました。 下の画像は、6,500 という元の設定と、もっと遠くでレンダリングされている草にスタティックメッシュを使うように 30,000 に変更した設定の比較です。

Default of 6,500

Set to 30,000

上の比較画面をよく見ると、End Cull Distance の数値をどれだけ大きく設定しても、使用するスタティックメッシュはある一点より先はレンダリングされないことが分かると思います。 さらに遠くまでスタティックメッシュをレンダリングするためには、10 進数の前に次のコマンドを UE4 コンソールに入力する必要があります。

Foliage.MinimumScreenSize 0.0001

Foliage.MinimumScreenSize は、スタティックメッシュがカリングされる画面スペースでのサイズを増減するコマンドです。 カメラから非常に離れている小さなオブジェクトを間違えてレンダリングしてしまわないようにするために、画面スペースのサイズをカメラからの距離と一緒に使用するのです。 この設定はどちらかというと、あるメッシュのカリング距離の設定を誰かが間違ってしてしまった場合にプロジェクト パフォーマンスが落ちないようにするための安全網と考えてもいいです。 コマンドを入力するには、キーボードの [~] または [`] キーを押して、UE4 エディタでアンリアル コンソールを開きます。 アンリアル コンソールが開いたら、UE4 エディタは以下の画像のようになっていると思います。

UE4_Console.png

Foliage.MinimumScreenSize 0.0001 を入力したら [Enter] キーを押してコマンドを適用します。 Grass Map がリビルドされたら、ビューポートでスタティックメッシュが前よりさらに遠くまでレンダリングされていることが確認できると思います。

UE4_Foliage_Command.png

デフォルト設定 0.0001 の時と、 0.00000001 に変えた場合のカリング距離の違いが以下の画像で分かります。

Original Settings of 0.0001

Max Settings of 0.00000001

デフォルト値 0.0001 よりも大きい値を使用すると、パフォーマンス上の問題が発生する可能性があることに留意してください。 それでも Foliage.MinimumScreenSize を大きくする場合は、必ずパフォーマンス テストをしてプロジェクト全体にカリングが大打撃を与えないことを確認してください。

プロシージャルなフォーリッジのボリューム ベースのマスキング

森全体の木々をプロシージャルにスポーンする機能があれば、膨大な時間を節約できるでしょう。しかし、ある木々を特定のエリアでのみスポーンするように制限したい場合はどうでしょう? これを実現するために、例えば、プロシージャルなフォーリッジ ボリュームを複数使用したり、フォーリッジ ツールを使用して必要な場所に木々を配置したり、行えることが数多くあることでしょう。しかし、これはプロジェクトの複雑度と維持コストが大幅に増すことになります。 幸い、 Foliage Types には、アサインされたスタティックメッシュの配置をランドスケープ マテリアルの特定のレイヤーに制限するオプションがあります。これは、ペイント中にそのレイヤーがエクスポーズされる場合に、そのフォーリッジ タイプだけをスポーンできるようにします。

どの方法を使用する場合でも、常にレベル内で [Procedural Foliage Volume] を選択し、[Resimulate (再シミュレーション)] ボタンをクリックして更新して変更を確認します。

T_Resim_Button.png

以下の画像は 3 種類のフォーリッジ タイプを 3 種類のテクスチャと合わせて使用できるごく単純なランドスケープ マテリアルのセットアップです。 Layer Blend の各入力に固有の名前が付いているのがわかります。 これは重要です。この名前によって、フォーリッジ タイプをどのランドスケープ テレイン レイヤーに制限するかを関連付けるからです。

T_Landscape_Material.png

ランドスケープ マテリアルをセットアップしたら、フォーリッジ タイプをセットアップし、正しいランドスケープ レイヤーと関連付けできるようにします。 以下の画像は、アサインされたスタティックメッシュをランドスケープ マテリアルの特定のレイヤーに配置するように制限するために必要なフォーリッジ タイプのセットアップ例です。

T_Restrict_To_Landscape_Layers.png

ご自身で設定する場合、フォーリッジ タイプ内で以下を行う必要があります。

  1. [Show Advanced (詳細表示)] の矢印アイコンを展開し、[Landscape Layers] オプションをエクスポーズします。

  2. elements」という語の右側にある [+] 記号の アイコンをクリックして、新しいエントリを配列に追加します。

  3. このフォーリッジ タイプを制限したいランドスケープ マテリアルのレイヤー名を入力します。

マテリアルとフォーリッジ タイプをセットアップしたら、マテリアルをランドスケープ テレインにアサインしてから、通常どおりランドスケープのペイントを開始します。 ペイントを終了したか、作業の成果を単に確認したい場合は、レベルで [Procedural Foliage Volume] を選択し、次に [Resimulate (再シミュレーション)] ボタンを押して更新し、変更があれば適用します。 完了すると、以下の画像のように、スポーンされたフォーリッジは関連付けられたランドスケープ テクスチャに制限されます。

T_Content_Breakdown.png

上の画像をよく見ると、何もかもが期待どおりにプロシージャルに配置されていますが、スポーンされたメッシュはひとつも混在していません。 例えば、葉がついた木々は、ランドスケープで草のテクスチャが適用された場所にのみスポーンします。 良く見ると、低木の茂みや松の木々でも同じことが起きているのがわかります。

Grass ツールのためのテクスチャ ベースのマスキング

フォーリッジのメッシュがスポーンできる、またはスポーンできない場所を制御する他の方法としては、特定のエリアでフォーリッジのメッシュをスポーンするか否かを Open World ツールに指示するマスクとして機能するテクスチャの使用があります。 以下の画像は、テクスチャ ベースのマスキングを示すごく単純なマテリアルです。

T_Texture_Based_Masking.png

この画像の左端に、World Position Scaling のセクションがあります。 これは、ワールド空間でマスク テクスチャをスケーリングし、ランドスケープ テレインにフィットする十分な大きさになるようにします。 移動すると、マスク テクスチャがあります。これは、フォーリッジの配置場所を定義するために使用、および 2 つのランドスケープ テクスチャのブレンドにも使用します。 以下はマスク テクスチャの様々なチャンネルの用途を分類したものです。

  • 赤チャンネル:このチャンネルは草のメッシュがランドスケープのどこでスポーンされるか、およびランドスケープのベース テクスチャをどのようにブレンドするかを定義するために使用します。

  • 緑チャンネル:このチャンネルは岩のメッシュがランドスケープのどこでスポーンされるかを定義するために使用します。

最後に、画像の右端にメイン マテリアル ノードと Grass Output (草の出力) があります。 メイン マテリアル ノードは、他の標準マテリアルと同様にセットアップします。 しかし、Grass Output はテクスチャ ベースのマスキングで行うのと似たような方法でセットアップします。主な違いは、(単に異なるテクスチャを示す代わりに) スタティックメッシュをスポーンするか否かでマスクされる、またはマスクされていないマテリアルの一部を使用するということです。 このマテリアルを UE4 のランドスケープに適用すると、以下の画像に類似した画像になります。ただし、どのマスクカラーがランドスケープに対して何を行うかを示す目的で隅に配置されたマスク テクスチャ部分を以下の画像から除いたものになります。

T_Masking_In_Action.png

上の画像では草のスタティックメッシュは大部分においてマスク テクスチャの緑チャンネルを使用しているエリアだけでスポーンされています。一方、岩はマスク テクスチャの赤チャンネルを使用してスポーンされています。 お気付きかもしれませんが、草と岩はそれらをスポーンしたマスク テクスチャのエリア内に完全には入っていません。 これは想定内の挙動です。スタティックメッシュの配置では、ずれが生じることがあり、より自然に見えるように補正するからです。

Grass ツールのための演算ベースのマスキング

マスキングにテクスチャを使用すると迅速で便利ですが、パフォーマンス上の理由から余分なテクスチャ データを持つ余裕がなかったり、配置をそんなに制御する必要がない場合があるかもしれません。 こうした場合は、テクスチャの代わりにマテリアル エディタで Math 関数を配置に利用できます。

T_Math_Based_Masking.png

上の画像は、最後の例のマテリアルを利用しましたが、草や岩がどのようにスポーンされるかは変更しました。 この例では、配置を制御するために草や岩は Checker Pattern マテリアル関数を使用してチェッカーボード パターンでスポーンされます。 草がスポーンしない部分で岩がスポーンするように、岩に One Minus を追加しました。 ランドスケープに適用すると、以下のようになります。

T_Check_Pattern.png

Grass ツールのための非ランダム配置

適切に調整すると、Grass ツールは畑で成長する農作物などをシミュレーションするために使用することもできます。 以下の画像では、このタイプの挙動例がわかります。

T_Spawing_In_Row.png

このように Grass ツールを機能させるには、[Use Grid (グリッドを使用)] にチェックが入っていること、[Placement Jitter (配置ジッター)]0 に設定されていること、[Grass Density (草の密度)] が 100 よりも低い値に設定されていることを確認します。 以下の画像は最初の画像で見た結果にするために、Landscape Grass Type をどのように設定するかを示しています。

T_LGT_Crops_Setup.png