ゴイサギ日記

東京でエンジニアとして頑張って何とか生きてます。。ゆる~く更新していきます

【Unity】パーティクルのボリューム表現

煙や雲を表現する場合、パーティクルのビルボードを使って実装するのが一般的です。(真面目に煙や雲のポリゴンモデルを用意して描画すると負荷が凄い事になってしまうので・・・)

ただ、この方法は処理が軽くなるけど四角形ポリゴンにテクスチャを貼り付けてるだけなのでボリューム感が出ない事があります。
f:id:aki517:20181027192548p:plain

ライトの影響を受ければ立体感が出るはずなので単純に光源からの距離に応じて頂点単位で明るさを調整するシェーダーを適用してみました。
f:id:aki517:20181026010111p:plain
だいぶマシになりましたがもう少しボリューム感が欲しいです ^^;

最終的にフラグメントシェーダーでテクスチャのα値を雲の厚みとして扱うようにして明るさの調整をしてみました。
f:id:aki517:20181026010150g:plain
だいぶ良い感じになりました。

テクスチャのα値とは別で設定したい場合は専用のテクスチャを用意してそちらの値を参照するのが良さそうです。

プロジェクト一式はこちらにアップしました。
github.com

今回はなるべく低コストでモバイルでも動かせるものにしたかったので擬似表現になりましたが、多光源対応やより精度の高いボリューム表現をしたい場合はボリュームレンダリングを使うとかになると思います。

参考

3Dゲームファンのための「ワンダと巨像」グラフィックス講座