CEDEC2020でのセッション、「クオリティを引き上げる!Unity HDRPのライティング、カメラ、ポストプロセス設定」を見ました。
YouTubeの直リンクは下記です
HDRPを触ってみると、いままでのライティングやカメラ・PostProcess等の設定方法と全く違っていて驚きます。このセッションではHDRPの思想や設定方法について丁寧に解説されていたので、実際に自分でも真似してみてメモ代わりに過程を記録しておきます。
まず、HDRPの設定は「現実世界(物理ベース)」を元に行う、という思想があることが解説されています。たとえば現実の世界で明るさを示す単位に「カンデラ」「ルーメン」「ルミナンス」「ルクス」などがありますが、HDRPでは同じ単位を使って設定を行うので、単位の意味がわかっていないと適切な値が設定できません。
(余談ですが、先日買ったキャンプ用のLEDランタンは「370ルーメン」だったので、実際にその明るさを知っているとUnity内でも再現できるということですね)
HDRPのプロジェクトを作成して、Directional Lightを作るとインスペクタで設定できる項目は下記になっています(パラメータは変更済み)
Intensityの単位が「Lux」になっているので、現実世界でのLuxの値が分かればその値が使えます。
セッション中のスクショは下記になっています。
Lumenについてはこちらです(Directional LightはLumenではなくLuxで設定)
また、Color Temperatureについても、現実世界を参考にできます(太陽光は5500K付近)
HDRPでは、空の設定はVolumeオブジェクトで行います(Build-in Pipelineとまったく異なりますね)
HierarchyでGlobal Volumeを作成し、インスペクタでProfileを作成します(MRTKと同じような感じですね)。
Add Overrideで「Visual Environment」を作成し、Typeを「HDRI Sky」にします。
更にAdd Overrideで「HDRI Sky」を選択し、Hdri Skyに「DefaultHDRISky」を設定します。セッションでは昼や夜のシーンに合わせてそれぞれSky(キューブマップテクスチャ)を設定しているのですが、標準では入っていないので、どこからかインポートしているようです。
空による環境光は、全体の環境光のだいたい5分の1くらいになるそうなので、昼のシーンではHDRI SkyのDesired Lux Valueを20000、Directional LightのLuxを100000としています。
この時点で、カメラは真っ白で何も見えませんが、それは露出で対応します。
露出というと、デジカメで露出オーバー、アンダーを修正するために、-0.3EVや+0.7EVなどの設定をすることが思い浮かびますが、それは「露出補正」となります。
環境の「露出」(=光の量)と、カメラで光をどのくらい取り込むかの「露出補正」があるということですね。
露出はEV100という単位で表され、これも現実世界の値を参考にすることができます。
VolumeにExposureを追加して、ModeをFixにして、Fixed Exposureに13を入力します。
すると、さっきまで真っ白で何も見えなかったのが解消されました!
なお、ModeをAutomaticにするとスマホのカメラのように露出が自動で調整され、「露出補正」(Compensation)も使えるようになります。
建物の中に入った時・出た時の露出自動設定が自然にされていますね。
カメラも、現実のカメラと同じパラメータ、焦点距離(35mmなど)、絞り(F2.8など)、ISO感度(400など)、シャッタースピード(1/60など)が使えます。カメラの設定を有効にするには、先ほどのVolumeのExposureのModeを「Use Physical Camera」にします。一眼レフのマニュアルモードに慣れている方でしたら、現実のカメラとまったく同じ設定で絵作りができるのが強力ですね。
フォグは霧や靄、雲を表現する外にも、大気散乱の表現にも使用できます。コンポーネントはどれもVolumeのFogなのですが、与えるパラメータが異なります。大下さんが写真を元に簡易的に計測した値によると、Fog Attenuation Distanceに1206を設定するとのことです。
この値だと近くの物体の見え方に影響はありませんが、広い範囲や巨大な建築物を表現する時には効いてきそうですね。
下記は300m、600m、900m先にビルがある想定でCubeを置いたものです。自然に空の色に溶け込んでいくのがわかります。
今回はセッション内の昼のシーンについて試してみましたが、夜のシーンについてもやってみる予定です。