今回はTwitterネタをやっていきます。
TwitterでおもしろいUnityTipsを見かけました。
新入社員のタケです!🤩
— Glasses(シェルパG) (@glasses09454853) 2021年1月24日
Unityでfogっぽいエフェクトを一部分だけにかけたい…というときはメッシュにSoftParticleのマテリアルを割り当てるだけで簡単に作れます。
これを応用するとダンジョンの入り口のような影がかった表現もできたりします…!#Unity #パーティクル #シーン制作 pic.twitter.com/KY8Zg1313n
なかなか使いどころがありそうなTipsです。今回はこれを実際に試して掘り下げていきます。
シェーダーを書くことなくすぐにフォグをかけたい場合にオススメの方法です。
部分的にフォグをかけたり、建物の入り口を隠したい時に活用できます。
開発環境
Unity 2020.1.17f1
URP ver8.3.1
Built-inプロジェクトの場合
基本的な流れとしてはMaterialを作成し適当なオブジェクトにアタッチするだけです
Materialの作成
フォグを表現するMaterialを作成します
作成したMaterialのシェーダーをParticle/Standard Unlitに変更
Rendering ModeをFadeに変更
Soft Particleをオン
Soft Particleはデプスバッファに書き込まれたオブジェクトの表面に近づくとフェードアウトする機能です。
フェードアウトの設定はパラメータで行います。
Near fade : フェードアウトするまでの最短距離
Far fade : フェードアウトするまでの最長距離
Near fadeは0のまま、Far fadeは1~1.5くらいがよさそうです。
Far fadeをあまりにも大きくするとほとんどスケスケの状態になります。
暗い場所を表現するため色は真っ黒にしますがお好みで
これでマテリアルは完成です。
オブジェクトにMaterialをアタッチする
適当なBoxやSphereなどのオブジェクトにアタッチすれば完成です。
ついでにCast ShadowsをOffにして影を無効化しておきます。
他オブジェクトが近づくとフォグに飲み込まれるようにフェードアウトします。
Soft Particlesを描画する
Soft Particleがうまく機能しない場合があります。その場合はProject Settingsを見直しましょう。
ProjectSettings/QualityからSoft Particlesを有効にします。
警告が出ています。
Rendering ModeをDeferredにするか、CameraのDepthTextureを有効にする必要があります。
(どちらか片方だけでいい)
Rendering Modeを変える場合
CameraのRendering PathをDeferredに変更する
CameraではなくProjectSettings/Graphicsから現在使っているLevelのRendering PathをDeferredに変更してもよい
DepthTextureを有効にする場合
CameraのDepthTextureModeを有効にします。これはInspectorから変更できません。
テラシュールブログで紹介されているスクリプトをCameraにアタッチする方法がオススメ。
デプスオン!デプスオン!デプスオン!
このスクリプトをCameraにアタッチすると、InspectorビューからDepthTextureが有効になっていることが確認できます。
URPプロジェクトの場合
Built-inと同様にMaterialを作成し、適当なオブジェクトにアタッチするだけです
Materialの作成
URPの場合は使うシェーダーが違います。
MaterialのシェーダーをUniversal Render Pipeline/Particles/Unlitシェーダーに変更
Surface TypeをTransparentに
Advancedを展開し、Soft Particlesにチェックを入れます
最終的にこうなります、色はお好みで
Soft Particlesを描画する
URPでもDepth Textureを有効にする必要があります
Cameraの設定をする場合
InspectorからDepth Textureを有効にします。Built-inとは違いスクリプトは必要ありません。
URPアセットを設定する場合
Project Setting/GraphicsからURPアセットをダブルクリックすると、Inspectorから編集ができるようになるので、
GeneralのDepthTextureを有効にする
これで設定は終わりです。
作ったMaterialを適当なCubeやSphereにアタッチすれば完成。
オブジェクトがFogに飲み込まれるようにフェードアウトします。
以上です。
まとめ
・Soft particleを使ったMaterialをオブジェクトにアタッチすることで、フォグのような演出を作ることができる
・MaterialはUnity標準のParticles/Standard Unlitシェーダーを使う
・URPの場合はUniversal Render Pipeline/Particles/Unlitシェーダーを使う
・MaterialのSoft Particlesを有効にする
・CameraのDepthTextureを有効にする
手っ取り早くフォグっぽいものを実装したい時に便利!
元ネタツイート
新入社員のタケです!🤩
— Glasses(シェルパG) (@glasses09454853) 2021年1月24日
Unityでfogっぽいエフェクトを一部分だけにかけたい…というときはメッシュにSoftParticleのマテリアルを割り当てるだけで簡単に作れます。
これを応用するとダンジョンの入り口のような影がかった表現もできたりします…!#Unity #パーティクル #シーン制作 pic.twitter.com/KY8Zg1313n
参考資料
ブログ内のデモではユニティちゃん(URP)モデルを使用しています。