さやちゃんぐbotブログ

シェーダーで遊んだりするブログです。

Unity HDRPの新サンプルシーン徹底解剖! ~HDRPシーン構築方法解説~

Hey!Domo!さやちゃんぐbotです。

Unity 2020.2.0b6でHDRPのサンプルシーンが変わりました!

f:id:sayachang_bot:20201012185221p:plain

建設中だった工事現場に、遂に建物が姿をあらわしたということですね。

今までのHDRPと比べて、新しい機能や、従来からあったマテリアルやエフェクトなどが効果的に使われています。ひとつのシーンの中に屋外、太陽光が差し込む部屋、外から閉じている照明のみの部屋が含まれ、それぞれの部分でライティングが設定されています。

このサンプルシーンを理解することが、HDRPでシーンをどう作るかというヒントとして大いに役立つはずです。

さっそく、内容を見ていくことにしましょう。

 

バージョン

Unity 2020.2.0b6

HDRP 10.0.0-preview.27

モデル

シャオン(くつした屋)

booth.pm

前提知識など

まず、HDRPは物理ベースで一貫したライティングを実現します。つまり、現実世界の太陽や照明の明るさの数値、カメラの露出の数値といったもので設定を行います。こういった数値は調べると出てきますが、ある程度は用語の意味を知っておかないと目指すルックを作るのが難しくなります。

もし、例えばルクスとルーメンがどう違うのかといったことを知らないのであれば、CEDEC2020で大下さんが行った講演のビデオを通してすべて観ておきましょう。

www.youtube.com

 

インストールとプロジェクトの起動

Unity HubでUnity 2020.2.0b6の新規プロジェクトを選び、テンプレートでHDRPを選んで作成します。

f:id:sayachang_bot:20201011222548p:plain

再生ボタンを押してみましょう。キーボードのWASDとマウスで動かすことができます。

f:id:sayachang_bot:20201011222745p:plain

 

空の明るさ

太陽にはディレクショナルライトが割り当てられています。

f:id:sayachang_bot:20201011223811p:plain

インテンシティは10万ルクスで、これは後で説明するHDRI Skyのインテンシティと合計すれば日中の明るい晴れた空の数値になります。

この太陽を受けたオブジェクトが影を作り出すように、シャドウマップのEnableにチェックが入っています。

一点わからないのは、Angular Diameterの数値が小さいことです。太陽であればおそらく31から32くらいのはずですが、サンプルシーンに設定されているこの数値はセレスやベスタといった準惑星の値です。

Angular Diameterは大きくするとスペキュラーの範囲が広がり、値を小さくするとそのぶんスペキュラーの形状も小さくシャープになります。もしこのシーンで大きくすると、床の汚れを表現したデカールも見えなくなってしまいます。

f:id:sayachang_bot:20201012121423p:plain

f:id:sayachang_bot:20201012121345p:plain

この設定値については以下のいずれかなのではないでしょうか。

・Angular Diameterの値は単位が弧度法の数値ではない

・審美的な観点からチーティングを行った数値を設定している

 

ちなみに、HDRP向けのユニティちゃんでは、ディレクショナルライトのAngular Diameterを調整すると、瞳のハイライトの大きさを変えることができます。

f:id:sayachang_bot:20201012123233p:plain

unity-chan.com

© UTJ/UCL

 

次にHDRI Skyを確認します。

ヒエラルキーのライトやボリュームの親子構造がきれいに整理されていて、とてもメンテしやすいですね。

f:id:sayachang_bot:20201011224557p:plain

露出に13.5という値が割り当てられています。このExposureをLuxに変更すると、2万5千という値になります。

太陽とあわせると、空の明るさは12万5千ルクスという明るさに調整されたシーンということなんですね。

 

露出

露出はVolumeのExposureで設定します。固定値のFixed、自動露出のAutomaticは今まで使えましたが、どうやら新しく追加されたらしいAutomatic Histogramがサンプルシーンに設定されています。

f:id:sayachang_bot:20201011230837p:plain

この機能の詳細は今のところあまりわかっていませんが、自動露出にさらに追加でその場所の明るさなどに応じた柔軟な設定ができるものになっているのではないかと推察できます。

ヒエラルキーで部屋ごとにVolumeがわけられています。

f:id:sayachang_bot:20201011231010p:plain

Limit Min、Limit Maxという数値が部屋ごとに異なり、太陽光が届かなくなるにつれてこの数値の範囲はだんだん小さなものにうつり変わっていっています。

f:id:sayachang_bot:20201011231049p:plain

f:id:sayachang_bot:20201011231141p:plain

で、じゃあどの設定が部屋とこのボリュームを紐付けているのか?という点ですが、ゲームオブジェクトにわざわざコライダーが組み込まれているのがおそらく関係している?

このあたりは後ほど調べてみたいなあと思っています。

 

Density Volume

2番目の部屋を見てみましょう。

部屋には天窓があり、そこから差し込む太陽光にいいかんじのチンダル現象が表現されています。

Density Volumeを見てみましょう。たとえばBlend Distanceは0から4の範囲で変更できますが、ここをいじるとゴッドレイのルックが大きく変わります。

これ以外のパラメータも試しに変えてみて、どのようになるのかをいろいろと見てみると良いでしょう。

f:id:sayachang_bot:20201011230546p:plain

また、このゴッドレイではノイズテクスチャが使われているようです。詳細は追えていないですが、密度などをこのテクスチャで調整できるのではないでしょうか。

f:id:sayachang_bot:20201012122609p:plain

前回のブログ記事でゴッドレイを試しましたが、このやり方では遠景がかすんでしまうので、幻想的なルックを目指すのでなければサンプルシーンのDensity Volumeを参考にした方が良さそうです。

sayachang-bot.hateblo.jp

 

あと、この2番目の部屋で見つけてしまったのですが、ガラスにHDRI Skyがうつりこんでいる……気がする……。

これについては、後述するライトレイヤーで調整できそうな気がしています。デフォルトレイヤーにSkyが影響している模様。

f:id:sayachang_bot:20201011230614p:plain

 

マテリアル

このシーンのシェーダーのほとんどはHDRP/Litシェーダーです。例えば屋外のユニティボールを見てみましょう。

f:id:sayachang_bot:20201011225113p:plain

Litシェーダーに、表面の傷をペイントしたアルベドテクスチャを割り当てています。

f:id:sayachang_bot:20201011225824p:plain

床の汚れはデカールが使われており、次の部屋の笹竹には専用に作られたShaderGraphのシェーダーが当てられています。

f:id:sayachang_bot:20201011230012p:plain

また、このガラスはTransparentになっていて、メタリックはゼロ、スムースネスが0.9です。いいかんじ、いいかんじです。

 

ちょっとだけ意外だったのは、MeasuredMaterialがこのシーンで使われていなかったことです。

https://github.com/Unity-Technologies/MeasuredMaterialLibraryHDRP

公式のPBRマテリアル集がGitHubにあるので、何か使いたい材質を探している時にはここを見てみるのが良いでしょう。

 

ライトレイヤー

最後に、どのオブジェクトにどのライトが影響しているのかを見てみます。 

ライトレイヤーを設定する方法は、Unityマニュアルを参照してみてください。

docs.unity3d.com

太陽や屋内の各照明ごとに、どのレイヤーにライトが影響するかを割り当てています。

f:id:sayachang_bot:20201011232214p:plain

f:id:sayachang_bot:20201011232504p:plain

 

オブジェクトはその所属するライトレイヤーが指定され、それに対応するライトでライトレイヤーを選択する設定方法となります。

f:id:sayachang_bot:20201011232833p:plain

f:id:sayachang_bot:20201011232733p:plain

 

ガラスのライトレイヤー設定。

f:id:sayachang_bot:20201011231400p:plain


いかがでしたでしょうか。HDRPでのライティング設定や新しい露出機能などについて、少し理解が進んだのであれば幸いです。

新しくなったサンプルシーンには他にも空中をただようパーティクル、飛び舞う蝶のアニメーションなど、まだまだ見どころがあります。

見ているだけでも楽しいシーンですので、みなさまもぜひ新しいUnityをインストールして試してみてください。

 

ではでは。