Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【小技】Soft Particleでオブジェクトにフォグをかける【Unity】

今回はTwitterネタをやっていきます。
TwitterでおもしろいUnityTipsを見かけました。

なかなか使いどころがありそうなTipsです。今回はこれを実際に試して掘り下げていきます。
シェーダーを書くことなくすぐにフォグをかけたい場合にオススメの方法です。
部分的にフォグをかけたり、建物の入り口を隠したい時に活用できます。

f:id:Raspberly:20210202013214g:plain

f:id:Raspberly:20210202013330p:plain

 

開発環境

Unity 2020.1.17f1

URP ver8.3.1

 

 

Built-inプロジェクトの場合

基本的な流れとしてはMaterialを作成し適当なオブジェクトにアタッチするだけです

Materialの作成

フォグを表現するMaterialを作成します
作成したMaterialのシェーダーをParticle/Standard Unlitに変更

f:id:Raspberly:20210201173332p:plain

Rendering ModeをFadeに変更

f:id:Raspberly:20210201174025p:plain 

Soft Particleをオン

f:id:Raspberly:20210201174124p:plain

Soft Particleはデプスバッファに書き込まれたオブジェクトの表面に近づくとフェードアウトする機能です。
フェードアウトの設定はパラメータで行います。

Near fade : フェードアウトするまでの最短距離
Far fade : フェードアウトするまでの最長距離

Near fadeは0のまま、Far fadeは1~1.5くらいがよさそうです。
Far fadeをあまりにも大きくするとほとんどスケスケの状態になります。

 

暗い場所を表現するため色は真っ黒にしますがお好みで

f:id:Raspberly:20210201195639p:plain

これでマテリアルは完成です。

f:id:Raspberly:20210201200957p:plain

 

オブジェクトにMaterialをアタッチする

適当なBoxやSphereなどのオブジェクトにアタッチすれば完成です。
ついでにCast ShadowsをOffにして影を無効化しておきます。

f:id:Raspberly:20210201205034p:plain

 

他オブジェクトが近づくとフォグに飲み込まれるようにフェードアウトします。

f:id:Raspberly:20210201205404g:plain

 

Soft Particlesを描画する

Soft Particleがうまく機能しない場合があります。その場合はProject Settingsを見直しましょう。

ProjectSettings/QualityからSoft Particlesを有効にします。

f:id:Raspberly:20210201201834p:plain

警告が出ています。
Rendering ModeをDeferredにするか、CameraのDepthTextureを有効にする必要があります。
(どちらか片方だけでいい)

Rendering Modeを変える場合

CameraのRendering PathをDeferredに変更する

f:id:Raspberly:20210202005813p:plain

CameraではなくProjectSettings/Graphicsから現在使っているLevelのRendering PathをDeferredに変更してもよい

f:id:Raspberly:20210201203839p:plain

DepthTextureを有効にする場合

CameraのDepthTextureModeを有効にします。これはInspectorから変更できません。
テラシュールブログで紹介されているスクリプトをCameraにアタッチする方法がオススメ。
デプスオン!デプスオン!デプスオン!

 

このスクリプトをCameraにアタッチすると、InspectorビューからDepthTextureが有効になっていることが確認できます。

f:id:Raspberly:20210201204818p:plain

 

 

 

 

 

URPプロジェクトの場合

Built-inと同様にMaterialを作成し、適当なオブジェクトにアタッチするだけです

Materialの作成

URPの場合は使うシェーダーが違います。
MaterialのシェーダーをUniversal Render Pipeline/Particles/Unlitシェーダーに変更

f:id:Raspberly:20210130000142p:plain

Surface TypeをTransparent

f:id:Raspberly:20210130000431p:plain

Advancedを展開し、Soft Particlesにチェックを入れます

f:id:Raspberly:20210130001106p:plain

最終的にこうなります、色はお好みで

f:id:Raspberly:20210130001250p:plain

 

Soft Particlesを描画する

URPでもDepth Textureを有効にする必要があります

Cameraの設定をする場合

InspectorからDepth Textureを有効にします。Built-inとは違いスクリプトは必要ありません。

f:id:Raspberly:20210202004427p:plain

URPアセットを設定する場合

Project Setting/GraphicsからURPアセットをダブルクリックすると、Inspectorから編集ができるようになるので、
GeneralのDepthTextureを有効にする

f:id:Raspberly:20210202004921p:plain



これで設定は終わりです。
作ったMaterialを適当なCubeやSphereにアタッチすれば完成。
オブジェクトがFogに飲み込まれるようにフェードアウトします。

f:id:Raspberly:20210202013000g:plain

 

以上です。

 

まとめ

・Soft particleを使ったMaterialをオブジェクトにアタッチすることで、フォグのような演出を作ることができる
・MaterialはUnity標準のParticles/Standard Unlitシェーダーを使う
・URPの場合はUniversal Render Pipeline/Particles/Unlitシェーダーを使う
・MaterialのSoft Particlesを有効にする
・CameraのDepthTextureを有効にする

 

手っ取り早くフォグっぽいものを実装したい時に便利!

f:id:Raspberly:20210202013214g:plain





 

元ネタツイート

 

参考資料

tsubakit1.hateblo.jp

tips.hecomi.com

docs.unity3d.com

docs.unity3d.com

 

 

 

ブログ内のデモではユニティちゃん(URP)モデルを使用しています。

raspberly.hateblo.jp