【UEFN】FortniteCreativeで思い通りにライティングするために知っておきたい3つのこと

FortniteCreativeで思い通りにライティングするために知っておきたい3つのこと

UEFNでは完全に独自のライティングを構成することが可能!
ライティングによる見た目の調整(ルックデベロップメント)はゲーム性を決める大きな要素です。

UEFNの標準では、Day Night Cycleという仕組みで基本のライティングが行われていますが、 LumenExposureManagerを使用することで、ライティングをゼロから完全に構築することができます。

今回は、実際にLumenExposureManagerを使用してライティングを行った際に、自分がハマった3つのワナを、本職である映像系エンジニアの視点で紹介します。

はじめに ~LumenExposureManagerについて~

LumenExposureManagerの基本的な使用方法は以下のUEFNの公式ドキュメントに記載されています。

dev.epicgames.com

LumenExposureManagerは、/Fortnite/Lighting/Toolsにあり、これをレベルにドラッグアンドドロップすることで使用可能となります。

LumenExposureMangerをレベルに追加してから、ワールドセッティングで「Disable All Tme Of Day Managers」 にチェックを入れると完全にカスタムなライティングをゼロから行うことができます。

LumenExposureManagerは、Lumen用のポストプロセスコンポーネントと、Lumen未使用時のポストプロセスコンポーネントから構成されています。このそれぞれが、ライティングに対する制御を行うためのコンポーネントであり、画面全体の最終的なルックを決める重要な要素となります。

PostProcessComponent

ポストプロセスを使用したことがない場合は、ポストプロセスコンポーネントがどんな働きをするのか、UnrealEngineの公式ドキュメントを一読されることをお勧めします。

docs.unrealengine.com

LumenはUnrealEngine5から導入された比較的新しい技術のため、対応できるプラットフォームが限られており、Lumenの使用、未使用、それぞれの設定でコンポーネントが分けられているようです。プレイヤーの実行環境に応じて、自動的に使用されるコンポーネントが切り替わります。

UEFNでゲームとして公開するためには、さまざまなプレイ環境を想定し、どちらのポストプロセスも同様に調整しておく必要があります。

では、ここからいよいよ、ライティングを完全にカスタムにした際に自分が陥ったワナを解説していきます。

1. 自動露出のワナ

LumenExposureManagerを追加して行うことは、「画面がどれくらいの明るさで表現されるか」の調整、専門的に言うと露出の調整となります。

説明のために一つのスポットライトが配置されているだけの簡単なレベルを準備しました。

このレベルで最終的にプレイヤーに表示される画面の明るさは以下の3要素で決まることになります。

  1. シーンを照らす光の強さ
  2. 物体の反射率
  3. 撮影するカメラの設定(絞り、シャッター速度、感度)

これらが掛け算で組み合わさることでゲーム画面に映る映像の明るさが決まります。

放射された光がカメラに届くまでの流れ

今、このシーンのスポットライトの明るさは、300となっています。 テストとして明るさを300から1200に増やして、画面がどのように変化するのか検証します。

Intensityを300から1200に変えた時の様子

一瞬明るくなりますが、すぐにもとと同程度の明るさにもどっていき、光の強さを4倍にしたのに画面としては4倍明るくなっていないことに気づくかと思います。

なぜ、このような現象が起こるのでしょうか?

これは、カメラの自動露出機能が働いているからです。

UEFNでは画面の明るさを見ながら、画面が明るくなりすぎたり、暗くなりすぎたりを防ぐ自動的に露出を制御する機能(Auto Exposure)が動作しています。そのため、照明が明るくなっても、自動的にカメラ側の制御が働き、画面が明るくなりすぎないように動作しているのです。

そのため、自動露出がオンのままライティングをしていくと、非常に弱いライトでライティングしても、自動露出により、適正な明るさに調整される、同様に、非常に強いライトでライティングしても、適正な明るさに調整される、ということになります。こうしたライティングをおこなっていくと、ライトの基準が分からなくなり、強さの適切でないライトでライティングしてしまうという問題が発生しやすくなります。

この自動露出機能は、ポストプロセスボリュームのExposure->MeteringMode(測光モード)をAuto Exposure Histogramから manual にすることによりオフにすることができます。

この設定をおこなって自動露出機能を無効化し、ライティングしたままの強さが画面に反映されるようにすることで、適切な強さのライティングを行うことができます。

なぜ、過度に弱すぎたり、強すぎたりするライトを避けた方がいいのかは、次の項目で説明していきます。

自動露出をオフにするのは、あくまでもライティング開発段階の話であり、最終的なゲームとして、自動露出のON/OFFは設計次第ですので、開発の最終段階も必ずオフである必要はありません)

2. マニュアル露出時のワナ

測光モードをマニュアルにした場合、標準状態では、Physical Camera Exposure(物理カメラの露出を適用)が有効になります。

UEFNの場合、各項目で左のチェックがオフの場合、その初期値が適用される動作となるため、この状態では、物理カメラの露出機能はONで、使用する状態になっています。

(他のものも同様に、左側のチェックボックスがオフの場合、その項目は初期値が使用されます。左側のチェックがオフならその機能もオフと勘違いしないように注意が必要)

この場合の物理カメラの設定は以下の項目、 シャッタースピード、感度、絞り(F値)です。

こうした設定項目は、現実のカメラの露出の設定と同一であるため、それぞれのパラメータがどういった意味になるのか不明な方は、以下のようなカメラに関するページを参考にしていただくのがいいかと思います。

ksk-h.com

この3つのパラメータの組み合わせで最終的な画面の明るさは決まりますが、この初期設定(シャッタースピード1/60、ISO100 絞り4.0)は、EV値10というカメラの露出設定になります。

明るめの部屋などで撮影する際に、ちょうどいいバランスの映像を撮影する時の露出設定です。

では、この「物理カメラの露出を適用」しない場合はどうなるのでしょうか?

その場合は、EV値0というカメラの露出と同じとして考えることができます。

これは、真っ暗闇の中で超高感度カメラを使用して、画面を明るく昼間に見えるように撮影しているというような設定になります。ゲームの中でしかありえない設定です。

そこで、UEFNが出た当初、「EV10のカメラを基準として、物理的に正確なライティングしてみよう!」(物理的に正確という言葉に惹かれる性質なので・・・)という方針でライティングを進めてみました。

しかし、ここに大きなワナがありました・・・

これの問題は何なのか。

それは、ライトの影響を受けず、自ら発光する物体に対する絵作りです。

それを説明していきます。

自発光しているものは、以下の組み合わせで画面上の明るさが決まります。

  1. 自発光している物体の光の強さ
  2. 撮影するカメラの設定(絞り、シャッター速度、感度)

この2つになります。

シーン上にUEFNの自発光オブジェクトの一例として、DanceMannequinを追加します。

最初にEV0(UEFNの初期値としての露出)で再現した映像はこちらになります。

自発光しているDanceMannequinも適切な明るさで表示されています。

EV0の状態

次に物理カメラの露出を適用しつつ、画面の明るさが変わらないように光の強さを調整します。

EV0からEV10に撮影設定を変えると、カメラは2の10乗分(1024倍)、暗く撮影することになります。カメラが暗く撮影する分、光の強さも2の10乗分、強くすれば、さきほどと同じ映像になるはずです。

その結果がこちらになります。

EV10の状態

結果として光に照らされた物体の見え方は、先ほどのものと一致しました。

しかし、右側のDancingMannequinが何か変です。

ライトの影響をうけずに自己発光しているDancingMannequinは、カメラが暗く撮影する分だけ、同じ発光量では暗くなってしまい、まったく表現されていないのです。

これを解消するためには、DancingManequinの自発光の強さも2の10乗分強くすればいいのですが、Fortnite標準アセットのマテリアルの調整はユーザー側からはできません。

Fortniteでは、基本的にEV0を基準として(現実的なカメラ露出は適用しない状態で)開発が行われていると思われ、EV10の現実的なカメラ設定を使用してしまうと、Fortnteが整備している自発光しているアセットがほぼ使えないことになります。(エフェクトなどVFXのものも多くが自発光。そのため使えなくなるものが多数発生することが予想される)

MarketPlaceで出ているアセットも、基本的に物理的なカメラ露出を適用せずに明るさ調整をしているものが、大半であると思われます。

結論として、基本的にmanual露出にした場合も、以下の図ように設定して物理的なカメラ露出を使用しない状態で開発をするほうがいいでしょう。

これをしないと、自発光のものが真っ黒になってしまうという地獄を味わうことになります。(味わった)

(※Fortniteのアセットを使用しない、自発光のものを使う予定がないのであれば、物理的なカメラ露出を使用しても問題ないですが、そんな開発はほぼないんじゃないでしょうか・・)

3. ToneMapperのワナ

次に、UEFNの内部の物体の発光がポストプロセスを通って最終的にどうなるのか、検証してみることにします。 ポストプロセスの設定は以下の設定で行っていきます。

このテストをするために、簡単なマテリアルを準備しました。 自発光のマテリアルで、左から右で直線的に0から1に発光量が変化するようにしてあります。

このマテリアルを適用したプレートを画面に配置し映像出力を検証します。 プレート左端の輝度が0(モニターで一番暗い黒)、右端のモニター輝度が1(モニターの一番明るい白)に表示されれば、そのままの色が画面に表示されていることになります。

結果を画面キャプチャし、波形モニタで確認したところ、このような結果でした。

画像の波形 横方向は画像の横方向に対応 縦方向は画像の輝度の強さ
※波形はUEFNが適用するsRGBの補正を逆補正した状態

0から1の変化に対して点線で示したような直線になっていれば、プレートの光った通りに映像が出力されていることになります。しかし、実際には1の光を発している物体がモニター上で映るときには、モニターの最大輝度の70%程度の値にしかなっていませんでした。

マテリアルの右側の設定値を1から10(10倍の輝度の白)に変更して同様の結果を行った結果がこちらになります。 分かりやすいように1ごとに縦線を入れています。

自発光プレート 一番左が0.0 一番右が10.0

大きく曲がっていく波形
※波形はUEFNが適用するsRGBの補正を逆補正した状態

大きな光を出すに従い、徐々に値は上がっていきますが、10の発光をしてもモニターの最大輝度に到達していないようです。

これはどういった現象なのでしょうか?

これはUEFNのポストプロセスでToneMapperという制御が行われていることの影響になります。

ToneMapperは、1以上の強い輝度の諧調を保持できるよう、CGカメラで撮影された映像の最終画像処理を行っています。

これは、悪いことではなく、広い諧調をもつ映像を、狭い諧調しか表現できないモニターで表現するために生み出された手法になります。

この辺りはUnrealEngineと同一のため、実はある程度予想できたことでした。

ただ、物体の光の量をそのまま映像として出力してやりたいケースもあります。 (2Dゲームなどで、画像の色味をそのまま表示したい場合など)

そういった場合はToneMapperをオフにしなければなりません。

そこで、テストとして、ToneMapperをオフにして・・・と思ったところで、あることに気づきました。

あれ?ToneMapperをオフにする機能がない・・・

昔のUnrealEngineもオフにする機能がなかったのですが、UnrealEngine4の後半からはToneMapperをなくす機能が追加されました。当然、現在の5.1.1では問題なくToneMapperを外すことができます。

しかし、なぜか現状のUEFNにはこの機能がないようです。

参考までに、現在のUnrealEngine5.1.1でToneMapperを外す方法を紹介しておきます。 UnrealEngine5.1.1でToneMapperを外すためにはPostProcessでToneCurveAmountをゼロにします。

UnrealEngine 5.1.1 のPostProcess設定

この設定でさきほどと同様のテストをすると、こちらでは、発光量に応じて直線的にただしく映像出力されることが確認できました。

UnrealEngieでは、ToneMapperの効果を外してシーンの色味をそのまま再現可能
※波形はUEFNが適用するsRGBの補正を逆補正した状態

ToneMapperをオフする機能は今後UEFNにも追加かと思いますが、現状では、テクスチャなどで作成した画像の色味を完全にそのままUEFN上で表示させることは難しいようです。

まとめ

今回はルックデベロップメントを行う際に重要な、露出に関する基本的な項目について紹介しました。

画面に表示される最終映像出力は、光、反射率、発光量、カメラの組み合わせによって生じるため、まず、最初にどれかを固定してから実施する必要があります。

1,2で述べた方法で、まずカメラの露出を固定し、ポストプロセスでの自動処理を切ってからライティングを行うことで、統一性をもったエラーの出にくいライティングが可能になるかと思います。

今回は、ルックデベロップメントを行うさいの露出に関して注意点を説明しました。 次回は、画面の色を決めるライトの色温度、カメラのホワイトバランスといった内容を解説する予定です。

今後もRingoGamesではUEFNに関するさまざまな情報を発信していきます。Twitterでお知らせしていきますので、よろしければ、Twitterのフォローをしていただけると幸いです。

Twitterはこちら

twitter.com

Fortnite 超楽しい :)