Created on | Updated on
フォローする

Houdini Terrain上にインスタンスをセットアップし、UE4でプロップと置き換える

この記事は先日ご紹介した「Houdini TerrainをUnreal4のLandscapeで使用する」の続きとなります。

現在、UE4にHoudini Terrainで作成したHFを使用して、地形を再現することができました。今度はその地形上にインスタンスをセットアップし、UE4のデータとインスタンスを置き換える方法をご紹介いたします。

ここまで作成した地形データです。

まずは、地形の特性からマスクを作成します。

まずは写真でどの辺にどのような植物が生えるのか確認してみました。

003.jpg002.jpg001.jpg

崩れた部分にはもちろん草や木は生えておらす、背の高い木は比較的水平に近い部分に木が生えていることがわかります。そして、直角に削れた崖部分には草も気も生えていません。この写真はイタリアで撮影したものです。

HF(HeightFieldの略、この記事では今後HeightFieldをHFと記載します)からマスクを作成するために、ネットワークエディタにてTabキーからhfmと入力し、heightfiel mask by featureを作成します。

デフォルトでは、Mask by Slopeが有効になっており、Slopeに応じてマスクを作成できます。

Min Slope AngleおよびMax Slope Angleを調整し、また、最小から最大の間のグラデーションをSlope Rampeで調整します。

写真に比べ、Houdiniで作成した山の標高は少し高いので、山頂近くに植物が生えないように、Mask by Heightも有効にして、Max Heightを調整します。

Tabキーからhfclと入力し、HeightField Copy Layerを作成します。

作成したmaskレイヤーをbushという名前のレイヤーにします。

このままでの情報を確認すると、bushというレイヤーができていることがわかります。

このbushレイヤーにコピーできたので、HeightField Mask Clearを作成し、マスクを削除します。

hf scatterを作成し接続します。
Mask Layerを先ほど作成したbushに設定すると、bushレイヤーの範囲にのみポイントが作成されます。

※Heightfield Scatterをそのまま使用すると、ポイントのY値に上下オフセットが入り、空中に浮かんだプロップがでてきます。編集したい場合はこちらをご参照ください。

Tabキーを押して、Copy to Pointを作成します。

この時に必ずPack and Instanceを有効にします。

このPack and Instanceを有効にすることで、UE4のインスタンスとしてジオメトリをUE4上で追加が可能になります。


HOUDINIのパックドプリミティブ

Houdiniでは、パックドプリミティブは、ビューポートの表示とレンダリングに対しインスタンスを効率的に管理する方法を提供します。 copyノードに供給するジオメトリは単一のプリミティブにパックされ、インスタンスのように扱われます。 Houdiniでは、パックドプリミティブは、ビューポートの表示とレンダリングに対しインスタンスを効率的に管理する方法を提供します。 ノードに供給するジオメトリは単一のプリミティブにパックされ、インスタンスのように扱われます。 このレッスンで表示されているコピーされたボックスでは、パッキングが完了すると1,500個のプリミティブが250個まで減少します。UE4用のHoudini Engineプラグインを使用すると、パックドプリミティブはより効率的なゲームプレイを可能にするUE4インスタンスとして認識されます。

UE4でのインスタンス

HoudiniEngineプラグインがパックドプリミティブを検出すると、入力ジオメトリとインスタンスの回転、スケーリング用等のパラメータを含むインスタンス入力がDetailsタブに作成されます。これをUE4コンテンツウィンドウのジオメトリに置き換え、それに応じてサイズを変更することができます。 プラス記号を使用すると、より多くのインスタンスされた入力を追加して、同じシステムでより多くのインスタンスを作成できます。


 

ポイントにコピーする仮オブジェクトとしてTubeを作成し、OrientationをZ Azxisに設定します。

HeightがTubeの高さなので、Center ZはHeightを2で割った値にし、Centerがジオメトリの中心ではなく、底辺にしたい面上にくるようにします。

地形データと一緒に表示するためにMergeノードを追加し、hf visualizeとCopyToPointを接続します。

Mergeノードを表示するとこのようにTubeがポイントにコピーされていることがわかります。

ここまで出来たら、修正したHDAの中身を保存します。

Assets>Save Asset>HDAアセット名で修正を保存します。

UE4側でシーン内に既に変更したHDAを使用している場合、そのHDA上で右クリック>Rebuild All Instanceを選択します。

再計算が終わると、このようにインスタンスしたTubeがシーン上に配置されていることがわかります。

002.png

現在は仮オブジェクトで配置しているため、これをUE4のプロップと置き換えます。

HDAを選択し、Houdini Instanced Inputsの下にあるジオメトリインプットに任意のプロップをドラッグします。

Playを実行してみると、先ほどTubeだった部分が全てインプットしたプロップに代わっていることがわかります。

今はインスタンスに指定しているプロップが1つだけなので、この入力ジオメトリを増やしてみます。

Houdini Instanced Inputsの+マークをクリックします。

これでインスタンス入力ジオメトリを増やすことができるので、他のプロップをドラッグして入力してきます。

このような形で色々なプロップをインスタンスとして使用することができました。

次の記事ではScatterしただけのポイント方向を修正したり、アトリビュートを追加してみましょう。