Unity HDRPの新サンプルシーン徹底解剖! ~HDRPシーン構築方法解説~
Hey!Domo!さやちゃんぐbotです。
Unity 2020.2.0b6でHDRPのサンプルシーンが変わりました!
建設中だった工事現場に、遂に建物が姿をあらわしたということですね。
今までのHDRPと比べて、新しい機能や、従来からあったマテリアルやエフェクトなどが効果的に使われています。ひとつのシーンの中に屋外、太陽光が差し込む部屋、外から閉じている照明のみの部屋が含まれ、それぞれの部分でライティングが設定されています。
このサンプルシーンを理解することが、HDRPでシーンをどう作るかというヒントとして大いに役立つはずです。
さっそく、内容を見ていくことにしましょう。
バージョン
Unity 2020.2.0b6
HDRP 10.0.0-preview.27
モデル
シャオン(くつした屋)
前提知識など
まず、HDRPは物理ベースで一貫したライティングを実現します。つまり、現実世界の太陽や照明の明るさの数値、カメラの露出の数値といったもので設定を行います。こういった数値は調べると出てきますが、ある程度は用語の意味を知っておかないと目指すルックを作るのが難しくなります。
もし、例えばルクスとルーメンがどう違うのかといったことを知らないのであれば、CEDEC2020で大下さんが行った講演のビデオを通してすべて観ておきましょう。
インストールとプロジェクトの起動
Unity HubでUnity 2020.2.0b6の新規プロジェクトを選び、テンプレートでHDRPを選んで作成します。
再生ボタンを押してみましょう。キーボードのWASDとマウスで動かすことができます。
空の明るさ
太陽にはディレクショナルライトが割り当てられています。
インテンシティは10万ルクスで、これは後で説明するHDRI Skyのインテンシティと合計すれば日中の明るい晴れた空の数値になります。
この太陽を受けたオブジェクトが影を作り出すように、シャドウマップのEnableにチェックが入っています。
一点わからないのは、Angular Diameterの数値が小さいことです。太陽であればおそらく31から32くらいのはずですが、サンプルシーンに設定されているこの数値はセレスやベスタといった準惑星の値です。
Angular Diameterは大きくするとスペキュラーの範囲が広がり、値を小さくするとそのぶんスペキュラーの形状も小さくシャープになります。もしこのシーンで大きくすると、床の汚れを表現したデカールも見えなくなってしまいます。
この設定値については以下のいずれかなのではないでしょうか。
・Angular Diameterの値は単位が弧度法の数値ではない
・審美的な観点からチーティングを行った数値を設定している
ちなみに、HDRP向けのユニティちゃんでは、ディレクショナルライトのAngular Diameterを調整すると、瞳のハイライトの大きさを変えることができます。
© UTJ/UCL
次にHDRI Skyを確認します。
ヒエラルキーのライトやボリュームの親子構造がきれいに整理されていて、とてもメンテしやすいですね。
露出に13.5という値が割り当てられています。このExposureをLuxに変更すると、2万5千という値になります。
太陽とあわせると、空の明るさは12万5千ルクスという明るさに調整されたシーンということなんですね。
露出
露出はVolumeのExposureで設定します。固定値のFixed、自動露出のAutomaticは今まで使えましたが、どうやら新しく追加されたらしいAutomatic Histogramがサンプルシーンに設定されています。
この機能の詳細は今のところあまりわかっていませんが、自動露出にさらに追加でその場所の明るさなどに応じた柔軟な設定ができるものになっているのではないかと推察できます。
ヒエラルキーで部屋ごとにVolumeがわけられています。
Limit Min、Limit Maxという数値が部屋ごとに異なり、太陽光が届かなくなるにつれてこの数値の範囲はだんだん小さなものにうつり変わっていっています。
で、じゃあどの設定が部屋とこのボリュームを紐付けているのか?という点ですが、ゲームオブジェクトにわざわざコライダーが組み込まれているのがおそらく関係している?
このあたりは後ほど調べてみたいなあと思っています。
Density Volume
2番目の部屋を見てみましょう。
部屋には天窓があり、そこから差し込む太陽光にいいかんじのチンダル現象が表現されています。
Density Volumeを見てみましょう。たとえばBlend Distanceは0から4の範囲で変更できますが、ここをいじるとゴッドレイのルックが大きく変わります。
これ以外のパラメータも試しに変えてみて、どのようになるのかをいろいろと見てみると良いでしょう。
また、このゴッドレイではノイズテクスチャが使われているようです。詳細は追えていないですが、密度などをこのテクスチャで調整できるのではないでしょうか。
前回のブログ記事でゴッドレイを試しましたが、このやり方では遠景がかすんでしまうので、幻想的なルックを目指すのでなければサンプルシーンのDensity Volumeを参考にした方が良さそうです。
あと、この2番目の部屋で見つけてしまったのですが、ガラスにHDRI Skyがうつりこんでいる……気がする……。
これについては、後述するライトレイヤーで調整できそうな気がしています。デフォルトレイヤーにSkyが影響している模様。
マテリアル
このシーンのシェーダーのほとんどはHDRP/Litシェーダーです。例えば屋外のユニティボールを見てみましょう。
Litシェーダーに、表面の傷をペイントしたアルベドテクスチャを割り当てています。
床の汚れはデカールが使われており、次の部屋の笹竹には専用に作られたShaderGraphのシェーダーが当てられています。
また、このガラスはTransparentになっていて、メタリックはゼロ、スムースネスが0.9です。いいかんじ、いいかんじです。
ちょっとだけ意外だったのは、MeasuredMaterialがこのシーンで使われていなかったことです。
https://github.com/Unity-Technologies/MeasuredMaterialLibraryHDRP
公式のPBRマテリアル集がGitHubにあるので、何か使いたい材質を探している時にはここを見てみるのが良いでしょう。
ライトレイヤー
最後に、どのオブジェクトにどのライトが影響しているのかを見てみます。
ライトレイヤーを設定する方法は、Unityマニュアルを参照してみてください。
太陽や屋内の各照明ごとに、どのレイヤーにライトが影響するかを割り当てています。
オブジェクトはその所属するライトレイヤーが指定され、それに対応するライトでライトレイヤーを選択する設定方法となります。
ガラスのライトレイヤー設定。
いかがでしたでしょうか。HDRPでのライティング設定や新しい露出機能などについて、少し理解が進んだのであれば幸いです。
新しくなったサンプルシーンには他にも空中をただようパーティクル、飛び舞う蝶のアニメーションなど、まだまだ見どころがあります。
見ているだけでも楽しいシーンですので、みなさまもぜひ新しいUnityをインストールして試してみてください。
ではでは。