2016年5月9日月曜日

UEカメラ露光量

久しぶりにUE4を調査。
UEライト関連調査の続き。 ライト関連を調査 UEライト関連調査

今回はカメラ露出について。
カメラの露出調整ができるのかと、できた場合のカメラEV値をどのように調整すればよいかを調べた

目的

pbrは本来、ライトの入力やカメラの光量の設定までを一貫して正しい値にするべき、
そのほうが作りやすいし、破綻も起きづらい。(特に室内と日中の屋外が共存するようなシーン等)

ゲーム業界ではそこまで考慮しているケースは少ないと思う。
メンタルレイやVray等のレンダラーではこの辺は問題ないがunityやUE4ではあまり考慮されていない感じなので調べたい

結果

下記の4点を守ればライトの単位を正しく設定できそうなことがわかった
  • ポイントライトのIntensityはルーメンそのもの。600ルーメンのライトならIntensityに600と入れる
  • 平行光源はルクス換算で1/50の値を入れる。Intensityは1/50の値を入れる。10万ルクスならIntensityに2000と入れる
  • 自己発光のエミッシブカラーは輝度換算で1/50の値を入れる。200[cd/㎡]ならエミッシブカラーは4.0と入れる
  • 実際のカメラと6EVのずれがあり、値もプラスマイナスが逆。14EVで撮影しようとするとUE4では-8EVと入れる。ue4EV = -(EV-6)

調査方法

単位は光束(lumen)で定義することになっているのでこれをベースにして調査する

ポイントライトについては前回調べたときに距離減衰が正しく行われていたことがわかったため、
例えば12.56ルーメンの場合1m先の板に1ルクス当たっているとみなすことができる

前回調べたときは約2000ルーメンのポイントライトにして、1m先の真っ白な板を真上から見たときの中心が1.0となった。
正確には1950ルーメン位だったが2000ルーメンとして取り扱うことにする。

このような設定で調べた
  • このときポストフィルタは全部無効にしたつもり。
  • マテリアルのカラーは単純なランバートがわからなかったのでなるべくランバートに近い状態にした
  • カメラ露出は0で固定
       


この状況で2000ルーメンを照度に置きかえると約160ルクス。2000ルーメン/(4π) より。

本来はカメラのEV0は「シャッター速度1.0秒」「絞りF1.0」の露光量に相当する。
またこの露光量は2.5ルクスを撮影する条件としている。

一方UE4のデフォルトのカメラ露出とでは64倍のずれがあることになる。160/2.5 より
ということはEV換算で6EVずれているということ。log(64,2)より

露出表
 ここがわかりやすい → 写真の明るさの概念 (1) : 因画応報

平行光源
 ちなみに真上からの平行光源の強度は3.14で1.0になったためそのままルクスとしてよい。(輝度[cd/㎡] = 照度[lux]/π= 3.14/π = 1.0)
ただしこの1.0は160ルクス相当なので実際のずれは約50倍となる。160/3.14

なので日中の平行光源を10万ルクスとするとらいとのIntensityは2000の値を入れることになる
emissive
 自己発光のエミッシブカラーは1.0を入れると1.0となる。これは正面から160ルクスのライトが当たった真っ白な板と同じ輝度であることから、
約50[cd/㎡]となる 160/πより

例えば200[cd/㎡]のTVの画面の輝度を設定する場合はエミッシブカラーに4.0と入れればよいことになる
カメラ露出
 カメラの露出調整はマニュアルで設定する方法が良くわからないがとりあえずできそうな方法があった。
ただしトーンマップを有効にするためフィルミック調なカーブがかかってしまう(ほかに良い方法があるのかもしれないが...)
下の画像は太陽光10万ルクスにして、14EVで撮影したものと同等

100000Lux = Intensity: 2000          14EV = ExposureBias:-8