お世話になっております。
NiagaraSystemのカメラ視野外のカリングに関しまして、お伺いしたいことがございます。
NiagaraSystem内で複数のEmitterでパーティクルを生成した場合、カリングは各Emitterのバウンディングボックスに基づいて
Emitter単位で行われますでしょう?
<br/>
確認しましたところ、Emitter単位でカリングは行われず
各Emitterごとに設定されているバウンディングボックスが収まる全体のバウンディングボックスが作成され
そのバウンディングボックスを元にカリングが行われているように感じました。
上記の認識でお間違いないでしょうか?
(緑のボックス単位ではなく、赤色のボックスに基づいてカリングされている?)
[Image Removed]
<br/>
<br/>
また、NiagaraSystem内でEmitter単位のカリング方法がございましたらご教授いただきたく存じます。
お忙しいところ恐縮ですが、何卒宜しくお願い致します。
t-nikaido1
(t-nikaido1)
2
お世話になっております。
検証して頂いた通り、NiagaraSystem に関しては Emitter 単位ではなく System(つまり コンポーネント)単位でのカリングが行われます。
SceneVisibility.cpp 内の FrustumCull 関数あたりが参考になるかと思います
(ここではカリングの単位について Primitive という言葉で表現されていますが、これは SceneProxy を通じてコンポーネントと対応しています)。
したがって Emitter 毎にカリングが行われるようにすることは難しく、状況に応じて NiagaraSystem を分割することを検討して頂くくらいになるかと思います。
また、カリングに使用される Bounds についてもご指摘の通りで赤色のボックスが使用されます。
なお GFrustumCullUseSphereTestFirst(r.Visibility.FrustumCull.UseSphereTestFirst)が true である場合は外側の球も使用されます。
よろしくお願いいたします。