【Unity】Auto Exposure(自動露出)の使い方と効果【Post Processing】
- 2020.07.06
- PostProcessing
- Auto Exposure, Unity, ポストプロセシング
明るい場所から暗いトンネルに入った時、人間の目は瞳孔の大きさを調整して、自動的に目に入ってくる光の量を調整しています。ゲームでこのような働きを表現するのはAuto Exposure(オートエクスポージャー: 自動露出)の機能です。
シーン内の明るさを調整し、画面に描画されるオブジェクトを見やすくしてプレイングを妨げないなどの調整があると、ユーザーからしても遊んでいて快適なので、Auto Exposureをうまく使っていけるといい感じになります。
例えば、とても明るいシーンでAuto Exposureを適用すると画面内の明るさの分布に応じて自動的に調整してくれます。以下の例は画面左半分がPost Processingなし、右半分がAuto Exposureを適用した動画です。
意図的にLightのIntensityを高くしているので真っ白になってしまう場面ですが、Auto Exposureを使うことによって光が抑えられています。閾値を設定することができるので、明るくなりすぎたり、逆に暗くなりすぎるのを防ぐことができます。
環境
macOS 10.15 Catalina
Unity2019.2.9f1
Unity Hub 2.2.2
Post Processing 2.1.7
参考文献
公式のパッケージ解説
公式のバッケージ解説の方は英語で書かれていますが、自動翻訳すれば概要を掴みやすくなります。
Post-Processing(ポストプロセシング)とは
Post-Processing(ポストプロセシング)とは、画面に描画する前の画像に対して処理を行うことで、最終的に描画される画像の見栄えを良くする機能です。インスタのフィルターのようなイメージです。
ポストプロセシングの概要や導入方法については以下の記事で解説しているので、こちらもご参照ください。
この記事の中ではポストプロセシングが導入されている状態で進めていきます。
Auto Exposure(自動露出)とは
Auto Exposure(オートエクスポージャー: 自動露出)は画面内の明るさを自動的に調整してくれる機能です。シーン内のライトの光量から画面全体の適切な明るさを計算してくれるので、白飛び、黒つぶれを防いでくれます。
人間の目は、明るいところから暗いところに行くと、しばらくは暗くて何も見えませんが、次第に目が慣れてきます(これを暗順応といいます)。逆に暗いところから明るいところに行った時も目が慣れるまで少し時間がかかります(こちらは明順応と呼ばれています)。目に入ってくる光の量を調整することでこのような機能を実現しているんです。
同じようにカメラのレンズでも画像を記録するセンサーに入る光の量を調整する自動露出の機能があり、Auto Exposureはこれと似たような働きをしています。画面内の明るさを計算し、その輝度を使って平均値を導いて描画する明るさを決めていて、動的に計算することで明るさの変化などにも対応してくれます。
どんな効果が得られるか
画面内の明るさを調整してくれます。暗いシーンを明るく補正したり、逆に明るいシーンの光を抑えるように補正したりと、プレイヤーの目に優しい画面を描画できます。
オブジェクトの視認のしやすさは遊びやすさに直結するので、明るさの調整は意識しておくと良いでしょう。
Auto Exposureを追加する
「Auto Exposure」のエフェクトを追加する場合は、「Post Process Volume」のコンポーネントで [Add effect…] ボタンをクリックし、[Unity] -> [Auto Exposure] を選択します。
ポストプロセシングを使うための設定は以下の記事をご覧くださいな。
Auto Exposureの設定項目
Auto Exposureの設定項目は以下のようになっています。Auto Exposureの左にあるチェックボックスを外すとエフェクトが適用されなくなります。チェックを外すと全体がグレーアウトされて設定値を変更できなくなるため、うっかり値を変更するのを防ぎたい時はこちらで。
また、右側にあるOn/Offのボタンで切り替えてもOKです。On/Offで切り替える時は値を変更できるので、エフェクトは表示しないけど値は変えておきたい、なんて時にはボタンで切り替えると良いでしょう。
設定値を変える場合は、各項目の左側にあるチェックを入れます。チェックを外した状態だとデフォルトの値が使用されます。
Filtering
安定した平均輝度を見つけるために計算で考慮するヒストグラムの範囲を決めます。左のハンドルと右のハンドルをそれぞれ動かすことで範囲の大きさを変更でき、バーをドラッグすることで範囲自体を動かすことができます。
ヒストグラムとは、横軸にピクセルの明るさ(輝度)、縦軸にその輝度のピクセル数をとったもの。
例えば以下のような画像があったとします。冒頭の動画で登場した明るいシーンのサンプルです。
上の画像をPhotoshopで開いて、ヒストグラムを表示させると以下のようになります。
明るさの階調は0から255となっており、画像の左側が暗いピクセル、画像の右側が明るいピクセルとなっています。このヒストグラムから平均輝度を出そうとすると、両脇のピークが大きく影響してしまいます。そこで、輝度を計算する範囲をフィルタリングすることで、欲しい明るさに近づけることができます。
Minimum(EV)
Minimum(EV)は自動露出で考慮する最小の平均輝度です。平均輝度がこの値を下回る場合は、この値に設定されます。最小の平均輝度が低ければ画面は明るくなり、逆に最小の平均輝度が高ければ画面は暗くなります。
EVはExposure Valueのこと。露出の明るさを表す数値です。
Auto Exposureでは画面の平均輝度を計算し、それが低ければ補正して画面を明るくし、逆に高ければ補正して画面を暗くします。
最小の平均輝度が低いと明るく補正されやすくなり、高いと暗く補正されやすくなります。この部分は実際にインスペクターウィンドウから操作してみると分かりやすいと思います。
Maximum(EV)
Maximum(EV)は自動露出で考慮する最大の平均輝度です。最小の平均輝度と同じように、この値が低ければ画面が明るく補正されやすくなり、高ければ暗く補正されやすくなります。
最小値、最大値で範囲を指定するイメージですね。
Exposure Compensation
Exposure Compensation(露出補正)はシーン全体の露出を補正する中間の灰色の値です。「中間の灰色」とは白と黒の間の灰色という意味で、シーンが明るすぎたり暗すぎたりしないように、この中間の灰色(明るさも中間)に向かって露出を補正するようになっています。
シーンによっては全体的に明るすぎたり、暗すぎたりすることもあるため、この中間の灰色の値を変えることで、全体的に明るさを調整することができます。Exposure Compensationの値は0以上のfloatになっていて、全体に掛け算するイメージです。0に近づけば暗くなり、1を超えれば明るくなります。
掛け算なので影響が大きいため、1の周辺で値を調整すると良いでしょう。
Type
AdaptationのTypeは2つあり、「Progessive」は自動露出による明るさの変化をアニメーションさせるモード、「Fixed」はアニメーションさせず固定で表示させるモードになっています。
「Fixed」を選択した場合は、以下のように「Speed Up」「Speed Down」の項目が表示されなくなります。リアルタイムに変化させるというよりは設定値のように使いたい時にこちらを選びます。
Speed Up
Speed Upは速さを上げるという意味ではなく、Up方向(暗い状態から明るい状態)になるときのアニメーションの速さを設定します。人間の目をシミュレートする場合、明順応は比較的早いため大きな値を使うと良いでしょう。
以下の動画は、左側の「Speed Up」を0.5、右側の「Speed Up」を5にして、1秒後に瞬時に点灯するライトによるAuto Exposureの比較を行ったものです。画面中央奥にある暗い部分の明るさの調整は右の方が早くなっています。
Speed Down
Speed Downも同様に速さを下げるという意味ではなく、Down方向(明るい状態から暗い状態)になるときのアニメーションの速さを設定します。人間の目をシミュレートする場合、暗順応は比較的時間がかかるため、小さな値を使うと良いでしょう。
以下の動画は、左側の「Speed Down」を0.5、右側の「Speed Down」を5にして、1秒後に瞬時に消灯するライトによるAuto Exposureの比較を行ったものです。右側の方が調整が早く行われているのが分かります。
Auto Exposureのデモ
Auto Exposureの使用例をいくつか紹介します。
明るいところから暗いところへ
分かりやすいAuto Exposureの使用例としては冒頭でも紹介した明るいところから暗いところへ進んでいく時の調整でしょうか。シーン内の明るいライトの影響を受けすぎないように調整する意味でも重要です。
HDRを扱っている場合はColor Gradingでもシーン全体の露光調整やトーンマッピングが可能なので、組み合わせて使用することも検討してください。
シンプルに画面の明るさを調整
夕暮れのシーンで少し明るさを落としたい時に。光っているオブジェクトとそれ以外でメリハリをつける意味でもAuto Exposureは便利です。単純にDirectional Lightの角度を変更するのに加えてこちらも調整しておくと良いと思います。
サンプルで使ったアセット
サンプルで使ったアセットも紹介します。もし同じ雰囲気で画面を作ってみたい場合は試してみてください。
大聖堂は『Village Interiors Kit』を使っています。使ってみた感想やレビューについてはこちらの記事もご参照ください。
アセットストアはこちら。
まとめ
Post-Processing(ポストプロセシング)のエフェクトのひとつであるAuto Exposure(オートエクスポージャー)について使い方とデモを紹介しました。
効果をまとめると、
- シーン内の明るさを調整することができる
- 人間の目で起こる明順応や暗順応の表現ができる
- 明るすぎる白飛び、暗すぎる黒つぶれを防ぐことができる
です。シーン内のライトの明るさ変更、あるいは明るい場所から暗い場所への移動などで効果を発揮します。
ユーザーが画面の明るさを調整できるよう、オプションで設定項目を用意して、「Minimum (EV)」、「Maximum (EV)」、「Exposure Compensation」を変更できるようにしておくとより親切な作りになると思います。
以下のページでポストプロセシングのエフェクト一覧をまとめてあるので、もしよかったらこちらもご参照ください。
ゲーム開発の攻略チャートを作りました!
-
前の記事
その上語りたい真女神転生1の世界〜品川大聖堂と復活のロウヒーロー【Part7】 2020.07.06
-
次の記事
【Unity】Ambient Occlusion(環境遮蔽)の使い方と効果【Post Processing】 2020.07.07
コメントを書く