今回はUnityのHDRPでPhysically Based Sky(物理ベースの空)で設定できる
プロパティを見ていきます。
Unity2020でこの記事を書いていたところPhysically Based Skyが大幅アップデートするUnity2021.2がでたということで2021.2で書き直しました!
Unity2020との違いも含めてPhisically Based Skyのプロパティを見ていこうと思います。
- 環境
- Physically Based Skyとは
- 設定方法
- Physically Based Skyのプロパティ
- Air(custom only)
- Aerosols
- Artisic Overrides
- Miscellaneous
環境
Unity 2021.2.6f1
HDRP 12.1.2
※LTSではないので注意
Physically Based Skyとは
直訳すると物理ベースの空で、設定を行うと 太陽の角度によって昼/夕方/夜の再現が簡単にシミュレーションが可能になります
Physically Base Skyを設定した時の太陽です(Unity2020.x)
今まではPhisically Based Skyといえばこれでした。
Unity2021.2.xからはこうなります!
↓↓↓↓!!!
やばくないですか!?
これはPhisically Based Skyだけの進化ではありませんが、雲とフレアが追加されたことによってなんとも美しいデモシーンになっています。
さらにUnity2020ではHDRI Skyでは太陽は描画されてなかったのですが、Unity2021.2ではHDRI Skyでも太陽が出てくるようになりました!
これからはHDRIでもPhysically Based Skyでもどちらでも高クオリティなライティングや絵作りが可能です
※HDRI Skyの場合、太陽の角度によって昼/夕方/夜のシミュレーションはできません。
それでは簡単にPhysically Based Skyの準備方法と基本操作からおさらいしていきましょう
設定方法
まずはデフォルトではHDRI SkyになっているのでPhysically Based Skyに変更します。
1. GlobalのVolumeを作成
以下の方法で作成可能です(既に存在している場合は新たに追加する必要なし)
ヒエラルキービュー>右クリック>Volume>Global Volume
多分初めに開いた時には既にこの状態だと思います。
2. 作成したVolumeのVisual EnvaironmentをPhysically Based Skyに変更する
3. Global VolumeにPhysically Based SkyのOverrideを追加する
4.Visual EnvaoronmentがHDRI SkyのときはHDRI SkyのVolumeを、
Physically Based SkyのときはPhysically Based SkyのVolumeをにチェックを入れます。今回はHDRI Sky Volumeのチェックは外します。
これで準備完了です。
太陽はDirectional LightのRotationで移動可能
大きさはDirectional Light > Shape > Angular Diameter
から設定可能です。
Physically Based Skyのプロパティ
ここからはプロパティを紹介
パッと見プロパティについてはUnity2020とUnity2021.2で変化はありません
Model > Type
後続の設定のテンプレートを提供してくれています。
作成するシーンが地球である場合、Earthを選択します。それ以外の惑星を表現したい場合はCustom Planetを選択します。
EarthのSimpleとAdvanceの違いとしてAdvanceの方がより詳細にプロパティを調節可能です。
Planet
Spherical Mode(Earth-Advanced,custom only)
惑星が球面であるかを設定します。
球面モードにチェックが入っているとき、Planet Center Position
チェックが入ってないときは、Sea Level(後述)が設定できるようになります。
Sea Level(Not Spherical Mode only)
海面の高さを設定できます。値をマイナスしていくと地平線が下がり、増やしていくと上がっていきます。
また、海抜が高いほど大気の密度が低くなります。以下の画像はSea Level「0」と「-10000」の比較画像です。太陽の位置は変更していませんが、大気が薄くなっていることがわかります。
山の上を想定した場合はマイナス値を増やすことでよりそのシーンを再現することができます。
Planet Center Position(Spherical Mode only)
惑星のセンターポジションを設定。この設定は基本的にそのままで良いと思います。
Planetary Radius(Type = Custom Planet only)
惑星の海面からの半径です。
半径が大きくなるということは惑星の弧が真っ直ぐに近づくということなので、
地平線の位置が高くなっていきます。またデフォルトの「-6378100」は地球の半径である、6378kmのことです。
Planet Rotation
惑星の傾き具合。惑星の自転ということですが、変更しても別に太陽の位置が変わるわけではなかったです。
次に紹介するGround Color Textureと一緒に利用します。
Ground Color Texture
Ground Tint
Ground Emission Texture
Ground Emission Multplier
これらは地表の色を決めます。地表からの照り返しなどに影響します。
Ground Color Textureに地球儀のようなTextureを設定することで現在いる場所の正しいGround Colorが取得できます。海の位置にPlanet Rotationが設定されているならGround Colorは青色、地表なら茶色みたいな表現が可能です。
この設定をして、どんどん画面を引いていくとなんと宇宙空間に飛び出て地球を確認することができます。
※宇宙空間に飛び出るにはVolumetric Clouds Volumeを無効にする必要があります。
このような地球儀Cubemapを作成するには以下から画像を取得します。
December, Blue Marble Next Generation w/ Topography and Bathymetry
そして、取得したTextureを以下のように変更します。
・Texture Shape → Cube
・Mapping → Latitude-Longitude Layout
・Applyを押下
Space(Advance or Custom only)
Space Emission Texture
この項目は結構大事です。 この項目にcubemap Textureを設定することで、夜をシミュレーションで利用するEmissive効果を持ったTextureを設定することができます。
ここに星空を設定することで夜を星空に変更することができます。
星空のcubemapは以前作成したので参照して見てください。3分もあればできますよ!
Space Rotation
上記TextureのOffsetを調節可能です。
Space Emission Multiplier
上記テクスチャの発光の強さを設定します。
星空は少しこの値を上げないと見えにくいと思います。
Air(custom only)
Air Maximum Altitude
Sea Levelの項目で、「海抜が高くなるほど大気が薄くなっていく」という説明をしましたが、Air Maximum Altitudeはその割合を設定できます。
Air Density RGB
単一散乱アルベドの散乱設定項目です。値はRGBを0~1に正規化したもので値が小さいほど色は光を吸収し大きいほど散乱します。
どういうことかというとこのようにAir Tintに赤色を設定した状態でAir Density Rを1にすると赤色は吸収される(透過する)ということです。
この設定OrverrideしたVolumeをボックス配置しておくと、砂嵐に入ったような演出をすることが可能です。
Air Tint
単一性アルベドを設定できます。この色がベースカラーとなって上のAir Densityの影響を受けます。
Aerosols
気体中に浮遊する微小な液体または固体の粒子と周囲の気体の混合体をエアロゾル(aerosol)と言います。
https://www.jaast.jp/new/about_aerosol.html
エアロゾルが存在している範囲では、境界線付近の白いモヤのような現象を再現できます。これはミー散乱によるもので白っぽく見えます。
以下はそのエアロゾルに関する設定項目
Aerosol Maximum Altitude
Air Maximum Altitudeの説明と同じで、高度に応じた密度降下の割合をメートルで表しています。具体的にどうなるかというとミー散乱で白っぽく見えている部分の範囲が広くなります。
Aerosol Tint
Aerosol Density
エアロゾルの単一散乱アルベドです。以下のAerosol Densityの割合によって透明度が変化します。
Aerosol Anisotropy
3種類の散乱方法が設定できます。
・1:前方散乱強め
・0:異方性なし
・−1:後方散乱強め
結果から先に言うとこの値は見た目に大きな影響はありません。
ミー散乱は、エアロゾルなどの大気中の大きい粒子に光がぶつかって散乱することです。地平線付近が白く見えるのはミー散乱の効果になります。
Unityでのミー散乱について、私が腑に落ちていない部分があるのでまた調査したいと思います。→ちょっと待ってね
とにかくこの値は0のままでいいということです。
Artisic Overrides
空の色に関する微調節を行う設定項目です。
Color Saturation
彩度の変更
Alpha Saturation
Alpha Multiplier
透明度の変更。0に近づけるとDirectional Lightが白くなります。
Multi plierは適用する透明度の倍率です。
あんまり変化はわからないです。
Horizon Tint
境界線の色が変化します。空の色がHorizon TinitとAir Tint(後述するZenith Tint)とのグラデーションになります。
Zenith Tint
Horizon Zenith Shift
Zenith Tintは空の頂点カラーを設定できます。Air Tintとは乗算されているような色合いになります。Horizon Zenith ShiftでZenith Tintの影響度を変更可能です。
Horizon Tint、Horizon Zenith Shift , Zenith Tintを設定した時の画像
Miscellaneous
Physically Based Skyを設定したときのLighting設定です
Number Of Bounces
光が散乱する回数
値を上げるとより現実に近い表現ができるが、ベイク時間も長くなる
Intensity Mode
空の環境光の明るさを調節するモードです
Exposure:Exposure Volumeの値の2乗の計算をします。なので0だと変化なし
Multiplier:環境光の倍率
Update Mode
環境を更新する頻度です。
On Change:設定が更新されるたびに変化
On Demand:スクリプトから更新を手動で呼び出すまで待つ
Realtime:このモードを選択して表示されるUpdate Periodの間隔で更新する
Include Sun In Baking
Reflection Probに空と一緒に太陽が表示されるかどうかの設定だそうですが、
違いがうまく現れなかったです。
ということで長くなりましたが、Physically Based Skyのプロパティ紹介は以上です。
2021年内に記事を投稿できるのは最後になると思います。
2022年もどうぞ、よろしくお願いします。それでは。
参考
単一散乱アルベド single scattering albedo - aerosolpedia エアロゾルペディア
大気はどこにあるの? | 科学の普及活動 | 公益財団法人日本科学協会
成層圏エアロゾルと対流圏エアロゾル Stratospheric and Troposphric aerosols - aerosolpedia エアロゾルペディア
レイリー散乱とミー散乱 Rayleigh and Mie scattering - aerosolpedia エアロゾルペディア