本記事は Unity #2 Advent Calendar 2020 18 日目の記事です。
【17 日】『【Unityネタ】Unityでスコープや監視カメラを作る』(@Raspberly さん)
【18 日】本記事
【19 日】『【Unity(C#),Bolt】Boltでタイマーの実装』(@OKsaiyowa さん)
はじめに
Unity の 3D 空間において Fog(霧表現)は遠近感を出したり世界の端を隠したりするために重要です。
はい知っています Lighting ウインドウから付けられるんですよねぽちっとな。
あれ、なんか思ってたのと違う…。
ということで今回は Unity の Fog について、無料で使える範囲で調べたので共有します。
あまりキレイにまとまっていなくて申し訳ないですが何かの参考になれば幸いです。
なお、添付の画像は効果を分かりやすくするため、Unity ユーザーの皆様が大好きなマゼンタカラーにてお送りいたします。(色を付けられる Fog に限ります。)
環境
Unity 2019.4.15f1
Fog
まずは Unity にもともと用意されている Fog です。別途何かを用意する必要はなく、簡単に使うことができます。
かつては Post Processing Stack にあったらしいですが、いつからか Lighting ウインドウで設定するようになりました。
Skybox には適用されないので注意です。うまく Skybox に馴染むよう、色の調整が必須かと思います。
使用方法
- メニューから「Window」→「Rendering」→「Lighting Settings」を選択して Lighting ウインドウを開きます。
- Scene タブ Other Settings の項目の中に「Fog」があるのでチェックを入れます。各パラメータについてはマニュアルを参照ください。
Deferred Fog
Post Processing(Post Processing Stack v2)のエフェクトの1つとして扱われている Fog。
その名の通りレンダリングパスが Deferred でないと使えませんが、Skybox 含めてかけることができます。
使用方法
※前提として、Post Processing が必要です。
-
Post Processing を導入、セットアップします。(こちらの記事などが参考になります。)
-
(まだ付けていなければ)Camera に Post-process Layer コンポーネントを付けます。
-
Post-process Layer に Deferred Fog の項目が現れるので Enabled にチェックを入れます。
また、Exclude Skybox のチェックを外せば Skybox にも適用されるようになります。
基本パラメータはデフォルトの Fog に準拠しており、Lighting ウインドウの設定が反映されます。詳しくはマニュアルを参照ください。
なお、Exclude Skybox のチェックを外す場合、かなり弱めに調整しないと Skybox が見えなくなるレベルで効きます。逆に言えば、空が見えないくらいの深い霧や暗闇などの表現に向くのかも。
Ultra Skybox Fog
オブジェクトに対してではなく、Skybox に Fog をかける無料のシェーダーアセットです。上で紹介したデフォルトの Fog など、別途オブジェクトにかかる Fog と合わせて使うことを想定しているようです。
また、疑似的なミー散乱効果も使えます。(なおよく分かっていない模様)
使用方法
-
Asset Store の該当ページからダウンロード・インポートします。
パラメータについては Cubemap (HDR) までは通常の Skybox 向けシェーダーと同じで、それより下は次のような意味みたいです。
パラメータ | 意味 |
---|---|
Fog Colour | Fog の色 |
Fog Begin | 薄くなり始める位置(高さ方向) |
Fog End | 消える位置(高さ方向) |
Fog Density | 濃さ |
Mie Intensity | ミー散乱の強さ |
Mie Tint | ミー散乱の色合い |
Mie Size | ミー散乱の大きさ |
Sun Direction | ミー散乱に使う太陽の方向 |
Apply Fog To The Bottom Of The Sky? | Skybox の下全体まで適用するか(次の画像参照) |
Global Fog
かつて StandardAssets に含まれていた Fog で、高さに応じた Fog(Height Fog)があるのが特徴です。…が、ImageEffects の消滅とともになくなってしまったようです。
Asset Store からも撤退しており、残念ながら現在では普通に入手することはできません。
一応 Unity のアーカイブを漁れば見つかりますが少し古めなので、参考用とか自身で改造するとかでなければ、積極的には使わない方がいいのかもしれません。
使用方法
-
Unity ダウンロード アーカイブからダウンロードして入手します。
おそらく Unity 5.5.6 辺りのものが現在入手可能な最終版ではないかと思います。
-
ダウンロードした exe ファイルを実行してインストールします。
-
インストール時に指定したフォルダに Standard Assets というフォルダができ、その中に「Effects.unitypackage」があるのでそれをエディタにインポートします。Global Fog として必要なものは下記だけです。
- Effects\ImageEffects\Scripts\GlobalFog.cs
- Effects\ImageEffects\Scripts\PostEffectsBase.cs
- Effects\ImageEffects\Shaders\GlobalFog.shader
-
Camera に「Image Effects > Rendering > Global Fog」コンポーネントを付与します。
基本パラメータはデフォルトの Fog に準拠で Lighting ウインドウの設定が反映されます。
インスペクタに表示されるパラメータはマニュアル参照…としたかったのですが、なんかパラメータが違うんですよね。
触ってみた感じとツールチップ表示から、下記の意味だと思います。
パラメータ | 意味 |
---|---|
Distance Fog | 距離による Fog を適用 |
Exclude Far Pixels | 遠方(Skybox or クリアカラー)への適用を除くか |
Use Radial Distance | カメラからの放射距離を使うか |
Height Fog | 高さによる Fog を適用 |
Height | 高さ Fog の高さ(Y 値) |
Height Density | 高さ Fog の濃さ |
Start Distance | Fog 効果を開始する距離 |
余談
ちょっと話は逸れますが、高さ Fog っぽいのをすごく簡単な方法で実現している人がいたので紹介しておきます。
こういう Material の Plane を作って置いたらそれっぽいよというお話。…なるほどぉ。
KinoFog
ユニティ・テクノロジーズ・ジャパンの Keijiro Takahashi 氏が公開されている Fog。
Skybox にフェードする機能をもっており、色を調整せずとも自然な遠景を得られるという特長があります。
プロジェクトのバージョンが 5.1.1p2 と古めなのが気になるかもしれませんが、当環境で問題なく動作しました。
たまにシェーダプロパティの関係でフェードできない Skybox があるのでその点は注意です。エラーが出ます。その場合は Skybox のシェーダーを変えてみるなどしてみましょう。
使用方法
- GitHub の該当ページにアクセスし、 「KinoFog.unitypackage」をダウンロードして入手します。
- ダウンロードした unitypackage をエディタにインポートします。
- Camera に「Kino Image Effects > Fog」コンポーネントを付与します。
触ってみた感じ、パラメータは下記の意味でいいかと思います。
パラメータ | 意味 |
---|---|
Start Distance | Fog 効果を開始する距離 |
Use Radial Distance | カメラからの放射距離を使うか |
Fade To Skybox | Fog 効果を Skybox にフェードさせるか |
URP(Universal Render Pipeline)の Fog
URP はデフォルトのレンダリングパイプライン(ビルトインレンダリングパイプライン)と異なり、Post Processing を内包しています。
ですが Fog の使い方がほぼ変わらないように作られているようで、同じ感覚で使えます。
…ので使用方法は割愛します。
HDRP(High Definition Render Pipeline)の Fog
最近 preview が外れた HDRP ですが、独自の Fog をもっています。
特に高品質のグラフィックスをターゲットにしているということもあって、最初からボリューメトリックな Fog を合わせて使うことができます。
ただ、HDRP はサポートされているプラットフォームが限られているので注意です。
では使用方法を…と思いましたが、筆者は完全なる HDRP エアプということに加え、HDRP において Fog だけにフォーカスしてもあまり意味ないんじゃないかと感じたので割愛します。
というのも、調べるほど HDRP における Fog はライティングの一要素に過ぎないように思え、
HDRP での絵作りフロー全体の中で語るべきことなのかな…と。(という名の力尽き)
おわりに
お疲れ様でした。読んでくださった方ありがとうございます。
その他、紹介はできませんが、有料のものも選択肢に入るという場合は、Asset Store で Fog で検索するとたくさん出てきますので、検討してみるのもいいと思います。
それではよい Fog ライフを!