2018年5月15日火曜日

UE4 ライトの物理単位

UE4 にライトの単位が対応されてたので検証したメモ。
今後時間があればスクショなど掲載するかも。

やっと単位が対応された。
テストしたバージョンは4.19.2。
過去にUE4の太陽は2000が10万ルクスと解釈していたが、今回の対応でこれはもう古いものになる。

テストの事前準備として全てのポストエフェクトを無効にした
白い板はランバート1.0、スペキュラは0.0とした

点光源とスポットライトのテスト

光束[ルーメン]

IntensityUnitをLumensにし、Intensityを39.46とした。
これは光束39.46[lm]ということ

この数値は4*PI*PIであり、1メートル先に照度3.14[lx]当てるための光束のこと
そしてこれが真っ白な板だったら輝度は1.0[cd/㎡]になる
一番明るい中心の値をスポイトで調べたら丁度255になった
  • 白熱灯型のLEDは100~800[lm]程度
  • 蛍光灯は3000[lm]程度
  • ろうそくは10[lm]程度

スポットライトとエネルギー保存

スポットライトがエネルギー保存されているかの確認。
単純に半球である立体角でテスト
InnerConeAnglleとOuterConeAngleをともに90にする。
これは点光源と比べて2倍の光が正面に出るので半分の明るさ19.74[lm]にすると
正面は同じ明るさで照らされていることが確認できる。

InnerConeAnglleとOuterConeAngleのコーンアングルθがともに同じ値の場合は立体角ωは
立体角ω = 2*PI(1-cos(θ°))

試しにコーンアングルθを10°にすると
立体角ω=0.095
全天球θ180の立体角は4*PIなので点光源と比べて正面が131.6倍明るくなるので
39.46/131.6=0.3にすれば正面が同じ明るさになるはず。
スポイト値は254となりほぼ一致した

光度[カンデラ]

IntensityUnitをCandelasにする。
光度とは単位立体角当たりの光束のことで単位は[cd]、または[lm/sr]。
これは正面にどれだけ光が来ているかを表すが、スポットライトのように配光は考えず、
言い換えればエネルギー保存をしないとも解釈できる
全天球の立体角は12.56、単位立体角は1.0。
当たり前だけど12.56[lm] = 1[cd]
なので3.14[cd]と入力すると上の39.46[lm]と同じ明るさになることが確認できる。

ちなみにろうそく一本の明るさが1[cd]=12.56[lm]と覚えておくとよい。

光度の場合はコーンアングルによって明るさが変わらないことを確認。
ライトの器具が反射板ではなく、真っ黒な物質でおおわれていて穴が開いている器具と考えればよい。
昔ながらのCGで扱うようなライトな気がする。

単位無し

IntensityUnitをUnitlessにする。
これは今までのもの。
Intensityを1960位にすると39.46[lm]とほぼ同じになる。
こちらもスポットライトでコーンアングルを狭めても光度の時と同様に正面に光は集まらない。

並行光源は照度

照度とは単位面積当たりの光束。[lx]または[lm/㎡]
垂直に光を当てた真っ白な板が1.0になる値は3.14だった。
これは照度そのものと考えてよい。
なので太陽は10万くらいの値を入れる
  • 太陽10万[lx]
  • 電気屋、コンビニ2000[lx]
  • オフィス500[lx]
  • 落ち着いた雰囲気の室内照明100[lx]

カメラ露光量

マニュアル露出での確認方法。
表示 > postProcessingでEyeAdaptationだけを有効にし、
ライティング > exposure のGameSettingsを無効にし、EV100を弄る。

マニュアル露出の値-10から20まで入れられるが、これはカメラEVと考えてよい。

EV100を0にしてみる。
これは0EVということであり、シャッター速度1秒、且つ絞りf1.0と同等になる明るさの組み合わせのこと。

EVを0にしたら1.0の値が0.83くらいになった(γ2.2によるデガンマ後の値)。
例えば0EVの定義は2.5luxの値を撮影するものだとすると、真っ白な板の輝度は、
2.5/PI = 0.796[cd/㎡]となる。

2.62[lx]を基準とすると
2.62/PI = 0.83[cd/㎡]となる
なのでUE4の0EVは2.62[lx]くらいが基準と解釈する

  • 晴れた日の屋外を撮影する時の露光量は14EV程度

エミッシブは輝度

輝度とは単位面積当たりの光度であり単位は[cd/㎡]。
エミッシブの値は輝度そのものであることがわかる
  • PCモニタの白は普通100[cd/㎡]くらいだが、実際には80~300[cd/㎡]の範囲に収まると思う。
  • 満月は2500[cd/㎡]。
  • 白熱電球系の発光している乳白色部分の輝度は数万[cd/㎡]

全体的に値が大きい

UEで物理単位のライトを使った場合のvalue1.0は1.0[cd/㎡]となる。
1.0[cd/㎡]はかなり暗い部類。

実際にライティングする照度は1~15万[lx]位。
グレー輝度に換算すると0.06~8600[cd/㎡]くらい
スペキュラになるとその100倍くらいは明るくなりそう。

そうなると全体的に大きな値になりバランスが悪く感じる。
float精度で扱う分に問題ないが16bitFloatではすぐに値が飽和する。

個人的にはvalue1は100[cd/㎡]が好ましいと思う

0 件のコメント:

コメントを投稿