
ぷらずも
みなさんこんにちは!
ぷらずもです!

エレキベア
こんにちクマ~~

ぷらずも
今回紹介するのは、Heightfield Visualize に関するTipsになります。
これは Heightfieldの高さやレイヤーを可視化 する機能になります。
参考:HeightField Visualize | Houdini

▲Heightfieldの高さやレイヤーを可視化する機能

エレキベア
状態を確認するのによく使う機能クマね
これの何に不満があるクマ?

ぷらずも
可視化する時に複数レイヤーを重ねることができるのですが、
この時デフォルトだと 下のレイヤーから上のレイヤーに重ねる形で表示 されます。
そのため レイヤーの順番を変えると表示状態が変わって しまいます。

▲上に重ねるように表示される

ぷらずも
対してUnrealEngineの場合は WeightBlend というブレンド方式があり、こちらは各箇所で重みづけされて表示されるので順不同な表示になります。
こちらの表示と合わせて レイヤー順不同なブレンドにしたい、というのが今回の目的になります。

エレキベア
複数レイヤー設定されていたら割合でブレンドしてくれるというわけクマね

ぷらずも
なお今回検証で使用したバージョンは以下になります。
バージョンによって挙動が異なる可能性もある点にはご了承ください。
✔ 検証したバージョン
- Houdini
- Houdini Indie 21.0.512
- Unreal Engine
- 5.3.2
前提知識:UEにおけるブレンド方式

ぷらずも
まず前提知識として UnrealEngineでのブレンド方式 について記載します。
先ほど触れた通り、WeightBlendとは 全てのレイヤー間で重みづけられてレイヤーの順番に依存しないブレンド方式 のことです。
✔ WeightBlendとは
- 全てのレイヤー間で重みづけられたブレンド方式で、レイヤーの順番に依存しない

ぷらずも
他には以下のようなブレンド方式もあります。
Height BlendはWeight Blendの特殊版のようなものなので、大きくは 順不同なWeightBlend、順序が影響するAlphaBlend の2つが存在すると考えていていいと思います。
Landscapeレイヤーブレンド方式
ブレンド方式 | 概要 |
|---|---|
LB Weight Blend | ・全てのレイヤー間で重みづけられたブレンドを使用する ・0-1の間で補間され、順不同になる |
LB Alpha Blendd | ・アルファブレンドされたオーバーレイを実装する ・下のレイヤーに重ねる形で表示され、順番が影響する |
LB Height Blendd | ・ウェイトブレンドと基本は同じだが、レイヤー間の遷移にディテールも追加する ・ディテールはHeightmapに基づいたものになる |
参考:
Unreal Engine でのランドスケープ マテリアル | Unreal Engine 5.7 ドキュメンテーション

エレキベア
対等にブレンドしたい場合は WeightBlendで、雪や草とか上に被せたい場合は AlphaBlend の方が向いてそうクマね
Heightfield Visualizeの挙動を確認

ぷらずも
それでは次にHeightfield Visualizeの、レイヤーが順に重なる挙動について見ていきます。
確認用のレイヤー構造

ぷらずも
確認用のレイヤーは以下の2つ(layer_1、layer_2)で、0-1の間で重みづけした状態 にしてあります。
それぞれ 赤、青単色で設定 して確認してみます。

▲layer_1

▲layer_2

▲レイヤーの値はVolume Normalize Weightノードで正規化している
レイヤー順を変えて可視化する

ぷらずも
この状態でHeightfield Visualizeで 表示するレイヤーの定義順を変えてそれぞれ確認 してみます。
layer_1 → layer_2の順


▲少し青が強い
layer_2 → layer_1の順


▲今度は赤が少し強くなった

ぷらずも
このように下から上に重なるような挙動になることが確認できます。

エレキベア
UEのAlphaBlendの挙動に近いクマね
WeightBlendで表示する

ぷらずも
それではここから本題となるWeightBlend表示の方法について記載します。
諸々調べましたが、結果としてHeightfield Visualizeに Color Layer というレイヤーをRGB情報として可視化する機能 があったため、こちらに計算した色情報を計算して設定する方針にしました。

▲Color Layerの設定、r・g・bというレイヤーを設定している

エレキベア
おお~~
これがあれば自由にカスタマイズできそうクマね
最終的なノード構成

ぷらずも
最終的なノード構成は以下のようになりました。
しっかりと中間色である紫が表示されていることが確認できます。

▲中間色が表示され、レイヤーを入れ替えても結果は同じ

▲ノード構成
- 処理内容
- Volume Normalize Weight でレイヤーの値を正規化
- Heightfield Copy Layer で可視化用レイヤー(今回はrgb)を作成
- 各レイヤーのウェイト値を見て色の計算を行い、可視化用レイヤーに設定する
- 可視化用レイヤーを表示する

エレキベア
色は手計算して表示する、というわけクマね
ノード設定内容

ぷらずも
参考までに、各ノードの設定内容は以下のようになっています。
-
Volume Normalize
- 平均化するレイヤー名を設定することで重みづけされる

-
set_visualize_color (Heightfield Wrangle)
- volumesampleでレイヤー情報を取得してrgbレイヤーに色を設定する

- コード内容(VEX)
-
Heightfield Visualize
- rgbレイヤーを可視化する


ぷらずも
VEX部分でメインとなる色の計算を行っています。
今回はWeightBlendにあわせていますが、調整することで様々な可視化にも対応できそうですね。

エレキベア
汎用性がありそうクマ~~~
UnrealEngine側での動作確認
表示結果

ぷらずも
最後にUnrealEngine上での表示も確認してみます。
HoudiniEngineで出力して以下のように単純なブレンドシェーダーを設定したところ、想定通りの表示が行われることが確認できました。
-
UnrealEngine側での表示確認
- ブレンドされて表示されることが確認できた

-
マテリアルの設定
- WeightBlendで単色設定するのみの状態



エレキベア
想定通りの表示になっているクマね
注意点

ぷらずも
一転注意点として、正規化されていないレイヤーをHoudiniから出力する場合、unreal_landscape_layer_nonweightblended アトリビュートを設定して出力しないと、勝手に値が補間されて出力されてしまう、といったことがありました。
参考:
アトリビュートとグループ | Houdini Engine for Unreal

▲正規化されていないレイヤーをそのまま出力すると出力時に補間されるような挙動になった

▲unreal_landscape_layer_nonweightblendedアトリビュートを付与して出力するとそのままの値で出力される

エレキベア
おおう・・・これは不思議クマね

ぷらずも
このアトリビュートは LayerInfoの「No Weight Blend」フラグを制御するもの なので、はじめはUnrealEngine側の挙動かと思っていましたが、出力後にフラグを外しても結果が変わらなかった ので出力された値自体が異なっている気がします。

▲出力後に「No Weight Blend」フラグを外しても結果が変わらなかった

ぷらずも
細かい部分まで検証出来ていないですが、恐らく デフォルト状態がWeightBlend扱いということで自動で補間するような挙動 になっているのかもしれません・・・。

エレキベア
まあ詳しくはHoudiniEngineのコード見るしかないクマかね・・・
おわりに

ぷらずも
というわけで今回はHeightfield Visualizeに関する話でした!
どうだったかな?

エレキベア
ブレンドについてやWrangleでの制御が知れたのはよかったクマね
今後も応用が利きそうクマ

ぷらずも
Heightfieldを扱えると幅が広がるから、今後も積極的に触っていこう!
それでは今日はこの辺で!アデューー!

エレキベア
クマ~~~~
【Houdini21.0】Heightfield VisualizeでレイヤーをWeightBlend(順不同)で表示する ~完~










