お世話になっております。
NaniteFoliageを使用していて、ボクセル化について質問・相談があります。
1. NaniteFoliageがカメラに近い場所でボクセル化している場合がある
・大量のNaniteFoliageが配置されている場面で、カメラから近い場所の樹木がボクセル化してしまうことがある
・ボクセル化している樹木に対してカメラが近づいていった際に、樹木がボクセル化した状態から戻るのが遅れてしまう場合がある
r.Nanite.Streaming.StreamingPoolSizeを大きな値にすることである程度は改善するのですが、それでもときおり大きなボクセルが表示されてしまうことがあります。(添付画像1)
こういった事象が起きる点についてはNaniteFoliageの仕様ということでよいでしょうか。
ボクセル化する距離を制御するためにr.Visiual.NaniteLODBiasを設定して遠くでボクセル化するようにしても、効果は薄いようです。
MaxPixelPerEdgeを小さくするというのも行ってみましたが、こちらについてはGPU処理負荷があがるようなのであまり大きくさげることもできません。
また、ボクセル化する部位のマテリアルの色・明るさが明るい場合、他の樹木よりも大きなボクセルが目立って見える場合もあります。
樹木のコンポーネントごとにボクセル化する距離を変更できるような機能などがあれば、目立つものだけ別途遠くで変化するように調整を入れることができると思うのですが、現状そういった機能は存在しますでしょうか、もしくは今後実装の予定はありますでしょうか?
2.細いメッシュのボクセルが非常に汚く表示される
枯木で枝部分が多く露出している樹木が、ボクセル化した際に枝部分が非常に汚く見えてしまいます。
こちらはr.Nanite.Streaming.StreamingPoolSizeを大きくしても改善しにくい場合が多いです。
本来枝があるべき場所に沿ってボクセルが間に隙間を開けて並んでいて、空中に浮いているような見た目になる場合もあります。(添付画像2の赤枠部)
一応、VoxcelではなくPreserveAreaに設定をすることでこの症状が発生しないようにできることは確認できました。(少ない葉がさらに消えやすくなってしまいますが)
本件については、メッシュが細長くなっている部位で発生しておりますが、ボクセル化した際に綺麗な表示になるようなモデルの作り方として注意すべき点などがあればご教授お願いしたいです。
また、NaniteFoliageは「形状保持」についてPreserveAreaを設定することは想定された使い方なのかどうかもお聞きしたいです。
[Attachment Removed]
[mention removed] 様、
(以下は、サポート担当の Oztalay Matt によるコメントを翻訳したものです。)
お世話になっております。
本件に関しましては、以下の点についてが重要です。すなわち、フォーリッジは、マスク (カード) ベースのフォーリッジなのでしょうか、それとも完全に不透明なフォーリッジなのでしょうか?
私の理解では、Nanite のボクセル化は、集合的なジオメトリを保持することをねらいとしていますが、カードベースのフォーリッジに対して必ずしも最適ではありません。Voxel から Preserve Area に切り替えることによって問題が解決するというのでしたら、カードベースのフォーリッジであると考えられ、その結果にも納得できます。
一般的には、Megaplants のようなフォーリッジ (すなわち、完全に Nanite 化された不透明のスケルタル メッシュのフォーリッジ)については、私なら Preserve Area をできるだけ使わないようにします。これは主にカードベースのフォーリッジのために暫定的な措置として導入されたものだからです。
Quixel が公開している Megaplants を参考になさってください。適切な Nanite Foliage の作成方法の良い見本となります。
もし、ご自分のアセットもそのベストプラクティスに合致しているとお考えでしたら、こちらでもっと詳しく調査する必要があります。その場合、問題が発生しているアセットを、再現用プロジェクトとともに共有していただくことはできますでしょうか?
また、UE 5.8 でも同じ問題が発生するかどうか確認していただくことも意味があります。The Witcher デモ の公開後も引き続き改善を行っているため、5.8 で本件問題が改善されている可能性がありますので。
[Attachment Removed]
(下記リンクは、Epic Games のサポートが内部的に使用するリンクですので、ユーザーの方に下記リンクを利用して頂く必要はございません。回答はこの日本語スレッドに日本語として表示されることになります。)
[How to control voxelized rendering in Nanite [Content removed]
[Attachment Removed]
[mention removed] 様
(以下は、サポート担当の Oztalay Matt によるコメントを翻訳したものです。)
非常に参考になりました。ありがとうございます。
本件問題では、ベースとなるスケルタル メッシュの密度と、それに伴う単純化が大きな問題であると思われます。幹をスタティック メッシュに変換してみると、Nanite がスケルタル メッシュをより高い解像度に維持すべく、かなり苦労していることが分かります。推測するに、このことはスケルトンのボーンの数に関係しており、Nanite がボーンの影響 (頂点のボーン ウェイト) に基づいて、より多くのクラスタを生成しているためだと思われます (私が数えたところ、Tree_Japanese_Cypress_01_C には 456 本のボーンがありました) 。このことは、頂点カラーの変化が大きい箇所や UV アイランドの境界に対してクラスタ境界が作成されるのと同じような仕組みです。
ツリーを生成する際に、ボーン数を減らしたバージョンでテストしてみることは可能でしょうか?
また、5.8 の Procedural Vegetation Editor には多くの改善が加えられていますので、こちらもぜひお試しください。
[Attachment Removed]
ご回答ありがとうございます。
プロジェクトで使用しているNaniteFoliageのモデルについてはマテリアルのブレンド設定はOpaqueになっており不透明なフォリッジとして作成しています。
テクスチャにアルファチャンネルがあったのでマテリアルの設定と関係なくMasked扱いされているのかとも考えましたが、オパシティマスクのノードリンクを切っても改善はしませんでした。
また、頂いた回答をもとにUE5.8で試してみましたところ、
質問1・2の症状はいずれも
・ UE5.8でも発生する
・ Fab公開されているMegaPlantsのサンプル樹木でも発生する
という状態でした。
添付したZipファイルに含まれているプロジェクトのTestMap.umapで再現します。
こちらはUE5.8のプレーンなプロジェクトに対して、「MegaPlants:Japanese Cypress」の樹木を2種類4本設置しただけのものになります。
1.NaniteFoliageがカメラに近い場所でボクセル化している場合がある
メモリが足りない状態を再現するために
r.Nanite.Streaming.StreamingPoolSize 12
のコマンドを実行します。
その後、フィールド内でカメラを回しながら周囲を走ってから樹木に近づくと再現します。
Zipファイルにスクリーンショットを添付してあります。
この状態で時間をおいても、ボクセル化が解けることはありません。
2.細いメッシュのボクセルが非常に汚く表示される
メモリが足りている状態に戻すために
r.Nanite.Streaming.StreamingPoolSize 256
のコマンドを実行します。
この状態で、樹木を少し離れると再現します。
Zip内にある添付スクリーンショット②となります。
細い枝部分はボクセル同士が離れているのが目視できています。
シーンの明るさによっては浮いているボクセルが目立つ場合があります。
元々の質問と重なる点もありますが、再度質問させてください。
・ 例えばr.Visiual.NaniteLODBias をモデルごとに設定しなおす方法や、それに類するインターフェイスなどは存在していたら教えていただきたいです
・ VoxelではなくPreserveAreaを設定することで症状は改善しますが、これは単にボクセル化しないというだけでPreserveAreaの機能が生きているわけではないということでしょうか…?
[Attachment Removed]
すいません、上記添付のプロジェクトは、樹木が2本しか立っていないものでした。
再度、再現するプロジェクトを添付いたします。(樹木が2種類4本)
[Attachment Removed]
ありがとうございます。こちらのほうの zip ファイルを使わさせて頂きます。
[Attachment Removed]