😎

Unreal Engine(UE5) で 正確なライティングを整える 手順メモ

2022/04/15に公開

今回はいつもなんとなーくふれていたライティングのパラメータ周りを調べましたので、学習メモ代わりに共有できたらと思います。

なお、アンリアル初心者ですのでもし間違った点がございましたら指摘していただけるとありがたいです!

※2021/08/22 早期アクセス UE5使用

【目的】

曖昧に使っているディレクショナルライトやスカイライトを今一度学習しなおし、晴れ、雨、曇りや夜といった環境ごとに正しいライティングを目指す。

今回は晴れ環境の正確なライティングをおこなってみました。
以下が実際に検証した手順になります。

【適正露出を考える】

具体的な解説に入る前に...用語の確認をしておきます。

  • 「露出」・・・カメラに取り込んだ光の量のこと。この光の量はカメラのF値、シャッタースピード、ISOの設定で調整をすることができる。またこれを数値化したものをEV(Exposure Value)といい、照度(lux)と相関関係がある。
  • 「標準露出」・・・反射率18%グレーがそのままの色で出力される状態。どのようなEV下でも一旦こちらを目指す。
  • 「適正露出」・・・撮影者のイメージに描いた映像を写真に表現するための露出。標準露出を作成したうえで、露出補正で適正露出に近づけていくとよい。
  • 「照度」・・・ある光源によって対象物が照らされる明るさの度合い。単位はlux
  • 「輝度」・・・単位面積当たりの明るさ。単位はcd/m2 もしくは nit
    以下のサイトがわかりやすいです。

https://photo.nyanta.jp/EV.html

https://av.jpn.support.panasonic.com/support/dsc/knowhow/knowhow02.html

今回はスタンダードに晴れ(EV15)の環境を目指すことにしました。
また、使用するHDRIについてはPoly Haven様のサイトからお借りしました。

https://polyhaven.com/

【ディレクショナルライトとスカイライトの割合について】

現実の世界ではディレクショナルライトとスカイライトといった風に光源が分かれているわけではないですが、ゲームエンジンでは環境光と直接光に分離されています。

では、その割合はどのようにして決めればよいかというと、晴れ、曇り等の環境で割合が決まっているらしいです。以下ののサイトがわかりやすいです。

https://www.polyplant.co/tech-art-portfolio.html

(一般的に日中 4:1、日の出/日の入り 3:1、曇り 2:1といった具合なのだそう。)
今回は晴れ(EV15)なので4:1を目指します。

スカイライトに先ほどののHDRIをセットしたデフォルトの状態が以下の通りです。

【ライトの計測環境を整える】

  1. 反射率18%のグレイ 反射率100%のホワイト 反射率5%のブラック エミッシブ1.0のホワイトを用意

  2. スペキュラーを「0」ラフネスを「1」にする(反射をアルベドのみにする)

  3. ディレクショなるライトの角度を、planeに対し真上からの照射になるよう調節(回転軸Yを-90度)

  4. ピクセルインスペクターを表示(もしくは表示/視覚化/HDRでも可)

  5. ブルームやヴィネット、トーンカーブをオフ(補正ナシのピクセル値を性格に取得するため)

  6. 露出補正をマニュアルに変更し、EV0にする。F値1.0 / シャッタスピード1.0 / ISO100.0

しっかりEV0になっていれば、「表示→露出→EV値のゲーム設定」 オンオフで明るさが一致しているはず!

ここまでの準備でシーンは以下の通りです。

【ディレクショナルライトの照度を調節】

  1. スカイライト・グローバルイルミネーションはいったんオフ

  2. ディレクショなるライトの強度を3.14luxにする

3.14の理由↓

https://www.unrealengine.com/ja/blog/updated-lighting-in-templates?sessionInvalidated=true

私自身完璧に理解したわけではありませんが...簡単に説明しますと、EV0のディレクショナルライトのみの光源の場合、3.14luxでちょうど標準露光の環境が作成できるということみたいです。(つまり反射率18%のグレイが輝度0.18でかえってくる)

  1. ピクセルインスペクタ(もしくはHDR)で輝度(Luminusu)を確認
    ピクセルインスペクタとHDRで確認した数値は以下の通りです。

白、グレー、黒の板がそれぞれの反射率ほぼそのままの輝度となっていることが確認できました。トーンマップを経由したFinalcolorもおよそ一致しています。

【スカイライトの輝度を調節】

  1. 環境に合わせたHDRIを用意
  2. スカイライト・GIをオン、ディレクショなるライトをオフ
  3. 1:4の割合だから、反射率1のプレーンで輝度0.25になるよう調節

以下が調節したスカイライトだけの状態です。

【環境光・直接光両方有りで調節】

今のままだと標準露出よりも少し明るい状態なので、ディレクショなるライト、スカイライト両府ありの状態で標準露光(グレイ18パーセントの反射)になるよう調節します。単純に1+0.25 = 1.25 の1.25が1になればよいので 0.8をかけてあげました。

この後の計測結果もほとんど一致しました。(誤差0.05以内)
以下が調節後の画像です(GIがちゃんととでています)

照度も白の板でおよそ3.14luxになっています。

アンリアルエンジンのデフォルトのディレクショなるライトが2.75luxとなっているのもこうした調節が関係していそうです。

【露出補正で適正露出の調節上げる】

  1. ポスプロの明暗順応をオンにする
  2. 現在のカメラ設定はEV0設定なので、EV15となるよう各パラメータを調節。なお今回は被写体が動きがないので絞り優先で調節しました。(出力静止画にはほとんど関係はないと思いますが...)
  3. 現環境ではEV0での標準露出となっているので、露出補正でEV15まで上げる

↓UEの露出計算式

https://docs.unrealengine.com/4.26/ja/RenderingAndGraphics/PostProcessEffects/AutomaticExposure/

カメラ設定は シャッタースピード/125 ISO/100 F値/16なので 計算結果は約14.9657 となります。これを露出補正に代入しましょう。

あとはオフにしていたポストプロセス各種を戻してパラメータ調節がされた標準露光が完成です。恐らく正しくライティングできているはず!

ここからさらに露出補正を調節して夏らしい適正露出になるように調節します。この際、照度や輝度を変更したりするとまたせっかく調節した割合がバラバラになってしまうので注意しましょう。

最終的に露出補正を16に変更しました。調節した後と、調節する前では影の濃淡やGIの雰囲気が曇りから晴れっぽくなったと思います。

【Before】

【After】

【(番外編)露出補正ではなく、現実世界の数値を入れて標準露出しなかった理由】

今回は、ディレクショなるライトを3.14という値にし、露出補正によって晴れの環境を再現しました。では、この3.14という値に実際の数値を入れるとどうなるのでしょうか。

現実の世界では快晴時の照度はおよそ100000luxといわれており、上記のフローで今度は実際の数値が入るよう調節しました。

以下がその図です。
ディレクショナルライト80000lux スカイライト強度2930 露出補正1 シャッタースピード125 ISO100 F値16

反射率はほとんど変わらないのですが、エミッシブが消えてスカイライトも暗くなっています。これは明るい部分に合わせて露出調整がされているため、ほんのり明るい部分が消えてしまうということです。例として真夏のビーチでスマホ画面を見ても真っ暗になってしまうことが挙げられるでしょう。

この環境でエミッシブサーフェスを光らそうとすると相当高い値が求められることになります。ゲームにおいてはエフェクトやスカイボックスとの調和のためエミッシブ値も重要になってきます。プロジェクトに合わせたやり方で適正露出を目指しましょう。

【露出補正を使わないケース】

エミッシブ値をそのままの輝度で使用するとき
HDRIの輝度を基準に組み立てるときとか

Discussion