ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

パーティクルのLODについて

UE4のエフェクトツール「Cascade」で設定できるパーティクルのLODについて解説します。

パーティクルのLODとは


パーティクルの各種設定をカメラからの距離に応じて変えることができる機能です。
Unreal Engine | パーティクル システムの詳細度 (LOD)

例えば、ゲーム中にエフェクトがカメラから遠い場合はパーティクルの発生数を少なくしたところで見た目の違いはよく分からないので、一定距離を超えると発生数が少なくなるように設定することで計算負荷を抑えるといったことができます。

発生数以外にも変更可能な設定は沢山あります。
各種モジュールのほとんどの項目を変えることができるのではないでしょうか。
このあたりが強力な部分だと思います。
距離に応じてマテリアルを変えることもでき、これには色々と可能性を感じます。

下図は試しにUE4.12でパーティクルにLODを設定してレベルに配置した状態です。

f:id:moko_03_25:20160731015032p:plain

・LOD Level 0 ‥色は黄 / 発生数は秒間20個 / 初期サイズは10 / 距離は0
・LOD Level 1 ‥色は青 / 発生数は秒間5個 / 初期サイズは20 / 距離は300
 ※カメラと3m離れるとLOD Level が1になります

設定する手順


新しくパーティクルシステム(エフェクトデータ)を作成すると、現在のLODレベルは0の状態です。
必要に応じてCascade上部に並んでいる「Add LOD」ボタンを押してLODレベルを増やして、LODレベルごとに各種モジュールの設定を変えて、LODレベルごとにカメラからの距離を指定し、レベルに配置してプレイしてチェックする流れになります。

ちなみにLODを切り替える距離の設定はParticle Systemの詳細の中にあります。
(エミッターが無い空間をクリックすると表示される設定項目です)

f:id:moko_03_25:20160731015034p:plain

 

設定時の注意点


◆作業コストの増大
 LODの設定を細々と行う場合は、その設定自体の作業コストはもちろんのこと、エフェクトの修正時に各LODレベルも修正する必要が出てくるので注意が必要です。
 上記理由から、そのエフェクトデータの見た目がFIXしてから処理負荷対策としてLODレベルを追加して手を入れるというのが良いかと思います。

◆設定しているか一目で分からない
 エフェクトデータを開いてLODレベルをクリックしてみないと分からないので、設定漏れや逆に設定していても気付かずにLOD 0だけ修正してしまうなどのミスが起こり易いと思います。
 一応コンテンツブラウザ上でポップアップ表示される情報に書かれてはいます。
 (デフォルトは0の表示でLODを1つ増やすと2になるので紛らわしいですが。。)

f:id:moko_03_25:20160803100226p:plain

◆基本的には発生時にのみ影響する項目だけ触る
 例えばLODレベルによってSize Scaleの値を変えた場合、エフェクトに近付いたり離れたりすると現在発生している全てのパーティクルのスケールが突然変わってしまうことになります。
 初期サイズの設定であるInitial Sizeの値を変えた場合は、新たに生まれるパーティクルに対してスケールが変わることになります。

◆メッシュパーティクルのメッシュに対しては効果が無い
 LODを設定したメッシュをパーティクルとして飛ばしてもLODの効果はありません。
 また、エミッターで指定しているメッシュをLODレベルごとに変えても切り替わりません。

◆LODでエミッターの表示ON/OFF切り替え時には設定が必要
 デフォルト設定では、一度エミッターがOFFになると近付いたり離れたりしてももうパーティクルは発生しません。しかしCascadeでエミッターのプロパティ「Disabled LODsKeep Emitter Alive」にチェックを入れると再度近付いた時にまた表示されるようになります。特に背景に設置するエフェクトで注意が必要です。

◆ゲームをプレイしてチェックする必要がある
 レベルに配置しただけでなくゲームをプレイしないとLODのチェックができません。
 この辺は不便かも。でも「どのカメラ?」問題があるので仕方ないですね。
 設定したLOD距離を視覚的に表示する機能も欲しいところ。

◆深度ではなくカメラからの距離で変わる
 下図をみると一目瞭然と思います。深度だと思って設定してはダメです。

f:id:moko_03_25:20160731015033p:plain

以上、参考になれば幸いです!


p.s.
新エフェクトエディタ「Niagara」でLODの設定をどう行うのか興味深いです。
ノードベースということで、条件に応じてパーティクルの設定内容を変えたりといったことはかなり自由度が高くなりそうですが、なるべく設定が楽で、かつ設定していることが一目瞭然な見た目になると良いなあと。