ダンジョン(洞窟)を地形に配置するため、
Landscapeに穴を開けたい。
UE4のLandscapeには確か Visibility を指定して穴をあける機能があったはず・・・。
これだ。
- Landscape Visibility Mask ノード
https://docs.unrealengine.com/ja/BuildingWorlds/Landscape/Materials/index.html#landscapevisibilitymask%E3%83%8E%E3%83%BC%E3%83%89
どうやら Landscape Material の OpacityMask 出力に Landscape Visibility Mask ノードを繋いで実現するらしい。
なるほど。
仕組みは単に Opacity Mask で非表示にしているだけなのか。
システムで勝手にやられるよりは分かりやすくていいな。
さて、これをプロシージャルに、動的に制御するため、内部実装を確認する。
・・・
わかった。
どうやらマテリアルウエイトと同じ仕組みで、マテリアルウエイトテクスチャの1チャンネルが割り当てられるようだ。
現状マテリアル x 4チャンネルのつもりで作っていたので、
VisibilityMask が 1チャンネル増えるとテクスチャがもう1枚増えるな・・・。
マテリアル x 3 + Visibility x 1 にすべきだろうか?
あるいは受け入れて マテリアル x 7 + Visibility x 1 で考える?
負荷に結構効いてきそうな気がするので前者だろうか?
・・・だが、3つは少なくないか?
・・・
まだビジュアル的な検討をしていないので今は決められない。
後で考える。
次。
----
マテリアルと同じように、Visibility Mask も塗れるように処理を実装。
Visibilityという名前に反して、チャンネルに 0 を書き込むと表示、0xFF を書き込むと穴になるようだ。
・・・
表示は消えるようになったけれども、コリジョンが消えていない。
まぁ勝手には消えないか。
コリジョンはどんな実装になっている・・・?
・・・
みつけた。
physx::PxHeightFieldSample の materialIndex0, materialIndex1 に以下の値を入れると、そこが穴になるようだ。
Sample.materialIndex0 = physx::PxHeightFieldMaterial::eHOLE
Sample.materialIndex0 = physx::PxHeightFieldMaterial::eHOLE
physx の HeightField がサポートしている機能のようだ。
なので、いずれ CHAOS に切り替わったらまた実装の再確認が必要。
・・・
・洞窟の周囲を山として盛り上げる
・洞窟の入り口付近の Landscape に穴を開ける
この2つをデータで仕込めるように Landscape を加工するための Component を作った。
これで洞窟を地形に配置できる。
----
洞窟の中を暗く見せるため、ライティングやらポストプロセスやらの値を調整。
・・・
うーーーん、
うまくいかない。
やっぱライティングわからん。
とりあえずこんな感じにしてみた・・・が、
これが合っている気は全くしない。
- Exponential Height Fog の Volumetric Fog にチェックを入れる。(重くなるので本当は入れたくない)
-> これで洞窟の中のスペキュラが光って見える症状が改善した。影を見るようになるからかな。 - PostProcessVolume の Exposure - Min EV100 を 3.0 に。
- 洞窟に入ったら SkyLight の Intensity を 0.0 に。
-> 松明つけないと真っ暗にしたいので。
調整キリがないので、ひとまずこれで。
しかしこれだと洞窟に入る瞬間と、不自然に暗くなるのがわかってしまう。要改善。
穴
洞窟
ue4-master@ue4master80
Placing the cave, and landscape holes. 第0081回 / Landscapeに穴を開ける #ue4 #gamedev #indiedev #indiegamedev #indiegame… https://t.co/rgl1gMO7F1
2021年02月02日 12:01