Unral Engineにおける任意部位の輝度・照度・RGBを確認する方法と,確認できた値のレンダリングフロー上のタイミング

 本投稿は,Unreal Engine(UE)において,任意の部位の輝度・照度・RGBの値を確認する方法を記述します.また,その確認できた値はレンダリングフロー上のどの段階における値なのかに関し,筆者が理解できている範疇で備忘録としてまとめたものです.

目次

  1. 任意の部位の輝度・照度・RGBの確認方法
  2. UEのレンダリンググロー
  3. HDRとLDRそしてトーンマッピング
  4. レイトレーシング法とラスタライズ法
  5. ディファードシェーディング
  6. HDR(明暗順応)で輝度等を確認しやすくする方法(追記2023.2/12)

1. 任意の部位の輝度・照度・RGBの確認方法

 本章では,UEのバーション4.25のUIをベースに説明します.任意の部位の輝度・照度・RGBの確認方法として,2つのツールがあります.

  1. ピクセルインスペクタ(Pixel Inspector)
    • ツールの位置
      • UEエディタ上の「ウィンドウ」>デベロッパーツール>ピクセルインスペクタ(図1)
    • 使い方
      • ピクセルインスペクタのウィンドウ左上にある「虫眼鏡」のアイコンを押すと,マウスカーソルの部位に対する色や輝度を確認できる
      • キーボードのESCキーを押すと,輝度や色情報の計測が終了し,その時点でマウスカーソルがあった部位の値を表示したままになる
    • 各種説明
      • 項目「HDR」の「Luminance」は,輝度を表している(図2)
        • 「HDR」における「Luminance」や「HdrColor」は,第2章で後述するポストプロセスによる効果やLUTによるカラーグレーディング(色調整)の影響を受けない
        • つまり,例えば「物理的な光情報としては暗い視界が広がるはずなのに,ポストプロセスで明るく補正されており最終的な画は日中のように明るい」という結果も起こりうる
      • 項目「最終カラー」の「Final Color」は,上記とは異なり,ポストプロセスも反映させた後の最終的な色情報である(図2)
図1 ツール「ピクセルインスペクタ」の位置
図2 ツール「ピクセルインスペクタ」の様子
  1. HDR(明暗順応)(HDR(Eye Adaptation))
    • ツールの位置
      • UEエディタ上の「表示」>視覚化>HDR(明暗順応)(図3)
    • 使い方
      • 表示される「白い四角の枠」に,輝度・照度を確認したい部位を収める(図4)
    • 各種説明
      • NIT(ニト)は,輝度を表す.輝度の単位には「cd/m^2」や「nt(ニト)」がある.「cd/m^2」は国際単位系(SI)における輝度の単位である.「nt」は別名であり,値自体は「cd/m^2」と同じ値を取る
      • LUX(ルクス)は,照度を表しています.照度の単位には「lx(ルクス)」があります
      • 「白い四角の枠」は,視角にして約1.0199度である(図5).
        この角度の値は,筆者がUEのビューポート上にオブジェクトとカメラを設置し,その距離と輝度値の変化から求めた実測値である
      • これらの値は,ピクセルインスペクタの「Luminance」(輝度)同様に,ポストプロセスによる効果やLUTによるカラーグレーディング(色調整)の影響を受けない
図3 ツール「HDR(明暗順応)」の位置
図4 ツール「HDR(明暗順応)」の様子
図5 白い計測する枠の角度

2. UEのレンダリンググロー

 この第2章で紹介するUEのレンダリングフローに関しては,Epic Games Japan所属の岡田和成さん[1]や,篠山範明さん[2]の講演資料を基にしています.講演自体が,岡田和成さんの講演は2018年,篠山範明さんの講演は2016年(こちらは,想定UE環境は4.13と明記あり)に行われたものであるため,当時から現在にかけてのUEのバージョンアップによって,レンダリングフローに変化が生じているかもしれません.

 UEにおけるレンダリングフローは,図6の通りです.

図6 UEのレンダリングフロー
  • Z PrePass
    • 基本かつ根幹となるBase Passに対し,事前にデプス情報を取得しておき,Base PassでG-bufferに書き出すピクセル情報を効率化・負荷の軽減を目的とするフロー
    • デプスを求める処理行われるため,Z PrePassのフローを事前に設けることで,総合的な処理負荷がかえって増す場合もある
  • Base Pass
    • Opaque/Maskedマテリアルのオブジェクトをレンダリングし,G-bufferに書き出すフロー
    • Vertex Shader,Rasterizer,Pixcel Shaderも,このBase Passnのフローで行われる
  • PreLighting
    • 次のLightingのフローの前に,AO[3]やDecal[4]に関することを前もって計算しておくフロー
    • AO(Ambient Occlusion):アンビエントオクルージョン,陰影遮蔽や環境遮蔽と呼ばれる
      遮蔽物による光の減衰に関わる要素であり,主にオブジェクト同士が密集している部分の影(ぼんやりした影)の表現で扱われる要素だと筆者は捉えている
  • Lighting
    • 光源による光や,それによって生じる影を扱うフロー
  • Reflection
    • 反射(映り込み)を扱うフロー
  • Transparency
    • 半透明な物体を扱うフロー
  • PosrProcess
    • 最終的な画づくりを行うフロー
    • カメラやレンズに関わる要素(露光,ISO,絞り,被写界深度など),カラーグレーディング[5]やトーンマッピングの要素,レンダリングに関わる要素(アンチエイリアシング,ブラー,ブルームなど)が扱われる

3. HDRとLDRそしてトーンマッピング

 HDR(High Dynamic Range)とLDR(Low Dynamic Range)(SDL:Standard Dynamic Rangeと呼ばれることもある)は,ディスプレイの表示における信号規格と筆者は捉えています.

    • LDR:8bit
    • HDR:10bitまたは12bit[6]
  • 色域[6]
    • LDR:BT.709(Rec.709と呼ばれることもある)
    • HDR:BT.2020(Rec.2020と呼ばれることもある)
    • 前述の「色」におけるbit数は,分解能の観点(同じ範囲の色をより細かく分けて表現できる,白潰れしたりサチらない等)で捉えられるが,そもそも扱える色域(色の幅広さ)の観点でBT.709よりも,BT.2020はより幅広い色域を定義している
  • 輝度[7]
    • 前述の「色」や「色域」は,ディスプレイ(=出力デバイス,ハードウェア)に留まらず,UEのような出力内容・ソフトウェアにも関わる話である.しかしディスプレイにおいてはディスプレイ自体の物理的な発光の強さのパラメータもある
    • ここでいう「輝度」とは,色情報としての輝度(HSVのV)ではなく,ディスプレイにおける物理的な発光の強さだと筆者は捉えている(色情報としての明るさならば,前述の「色」や「色域」と重複し,概念を分けている理由に説明がつかないと筆者は考えるため)

 ここで,UEにおいては,内部的にHDRのレンジで保持していた各種パラメータを,従来ディスプレイに向けて表示するために,HDRからLDRのレンジへとマッピング(広いレンジから狭いレンジへ圧縮,近似値化)が行われます.
 このトーンマッピングが行われる段階では近似化された値であるため,前第2章で述べた通り,トーンマッピングは最終的な画づくりの工程を行うポストプロセスのフローに該当しているようです.
 そしてトーンマッピング(LDR化)を含むポストプロセスの段階では,近似値化だけでなく,扱っている概念としては既に光情報でなく最終的な「このピクセルは何色か?」という色情報であり,それゆえに第1章で述べた通り「ピクセルインスペクタ」や「HDR(明暗順応)」で取得できる輝度や照度の値は,ポストプロセスによる効果やLUTによるカラーグレーディング(色調整)[5]の影響を受けないのだろうと,筆者は捉えています.

4. レイトレーシング法とラスタライズ法

 レイトレーシング法と,それと対をなすラスタライズ法の比較に関しては,西川善司さんによって執筆され「ITmedia PC USER」にて公開されている記事[8]の説明が,筆者にとって分かりやすかったです.
 それを踏まえた,レイトレーシング法による光線追跡とラスタライズに対する筆者の解釈・イメージを図7に示します.

図7 レイトレーシング法における光線追跡とラスタライズのイメージ

 ラスタライズされた時点で,扱っている数値は「このオブジェクトは何色か?」「光の情報」ではなく「このピクセルは何色か?」になっています.
 ラスタライズの文脈と合わせて取り上げてしまうのは語弊があるかもしれませんが,前第3章で述べたトーンマッピングや,第1章で述べた「ピクセルインスペクタ」や「HDR(明暗順応)」で取得できる値があくまでポストプロセス(画作りのための,画の色情報の加工)より前の段階であることと繋がる話だと筆者は捉えています.

 ここで,UEにおけるレイトレーシングにも触れておきます.UEの「リアルタイム」レイトレーシングにおいては,レイトレーシング要素はシャドウ,AO,反射,透過処理,グローバル イルミネーションに対し使用されています[9].
 しかしこれは,西川善司さんによって執筆され「4Gamer.net」によって公開されているGDC 2018に関する記事[10]も踏まえて解釈すると,「UEのリアルタイムレイトレーシングはシャドウ,AO,反射,透過処理,グローバル イルミネーションに対し使用されている」というより「基本はこれらにしか使用していない」と解釈した方が良いと,筆者は捉えています.

5. ディファードシェーディング

 ディファードシェーディング(ディファードレンダリングと呼ばれることもある)に関しては,ドリコム所属のイシカワシンヤさん[11]の説明が,筆者にとって分かりやすかったです.それを参照・抜粋し,備忘録として以下にまとめます.

  • ディファードレンダリングとは,シェーディングに必要な情報が全て揃うまでライティング計算を遅らせる手法
  • シーンのレンダリングを,ジオメトリパスとライティングパスに分けている
    • ジオメトリパス:
      全てのジオメトリとマテリアル情報をG-bufferとしてテクスチャに出力する
    • ライティングパス:
      テクスチャからG-bufferを取得し,ライティングの計算結果と合成する

 UEにおいても,レンダリング概要[12]にて「マテリアルはその属性をGBuffersに書き出し,ライティングパスはピクセル単位のマテリアル プロパティで読み込み,そのライティングを行います」と述べられています.
 そして本投稿の第2章における図6で示したレンダリングフローが,まさにディファードシェーディングの概念なのだと筆者は捉えています(図6の「Z PrePass」「Base Pass」がここでいうジオメトリパス,「PreLighting」「Lighting」「Reflection」あたりまでがライティングパスと筆者は捉えてます).

6. HDR(明暗順応)で輝度等を確認しやすくする方法

 HDR(明暗順応)で輝度や照度を計測する場合、計測部位を示す「四角の枠」と「計測結果」が白色であるため,明るい部位の計測がしづらい問題があります(図8).その解決方法を本章で説明します.

図8 見えづらい四角の枠と計測結果
  • 「ポストプロセス ボリューム」または「カメラアクタ>ポストプロセス」によって最終的な画を暗くすることで,白色で表示される「四角の枠」と「計測結果」を見やすくする
    • 第2章で説明した通り,ポストプロセスで操作した画の見え方は,HDRで計測される輝度や照度の結果に影響しない
  • ポストプロセスの変更パラメータ
    • ポストプロセス ボリュームの場合:
      • 「カラーグレーディング>Global>ゲイン>HSVのV」を,初期値1からより小さな値にする
    • カメラアクタ>ポストプロセスの場合:
      • 「ポストプロセス>Color Grading>Global>ゲイン>HSVのV」を,初期値1からより小さな値にする(図9)
      • ビューポートに適応するカメラを,該当するカメラに切り替える(図10)
図9 カメラアクタ>ポストプロセスの変更
図10 ビューポートに適応するカメラの変更方法

 これらの操作を図8に行った結果を,図11に示します.

図11 ポストプロセスのGloablのゲインを調整した結果(V=0.02)

参考

  1. 岡田和成, 猫でも分かるUE4のポストプロセスを使った演出・絵作り, https://www.slideshare.net/EpicGamesJapan/ue4-108770894, (参照 2022-11-20).
  2. 篠山範明, CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい, https://www.docswell.com/s/EpicGamesJapan/KVP8JK-cedec2016-unreal-engine-4, (参照 2022-11-20).
  3. Epic Games, Inc., Unreal Engine 4 ドキュメント アンビエント オクルージョン, https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/PostProcessEffects/AmbientOcclusion/, (参照 2022-11-20).
  4. Epic Games, Inc., Unreal Engine 4 ドキュメント デカール, https://docs.unrealengine.com/4.27/ja/Resources/ContentExamples/Decals/, (参照 2022-11-20).
  5. Epic Games, Inc., Unreal Engine 4 ドキュメント カラー グレーディングとフィルム トーンマッパ, https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/PostProcessEffects/ColorGrading/, (参照 202211-20).
  6. Epic Games, Inc., Unreal Engine 4 ドキュメント High Dynamic Range 対応ディスプレイへの出力, https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/HDRDisplayOutput/, (参照 2022-11-20).
  7. EIZO Corporation., よくわかる、HDR徹底解説! HDRとは, https://www.eizo.co.jp/eizolibrary/color_management/hdr/, (参照 2022-11-20).
  8. ITmedia Inc., 最近よく聞く「レイトレーシング」 一体ナニモノ?, https://www.itmedia.co.jp/pcuser/articles/2202/11/news032.html, (参照2022-11-20).
  9. Epic Games, Inc., Unreal Engine 4 ドキュメント リアルタイム レイトレーシング, https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/RayTracing/, (参照 2022-11-20).
  10. Aetas, Inc., [GDC 2018]西川善司の3DGE:DirectX Raytracingにおける最適解は「レイトレーシングを行わないこと」!? Futuremarkが語るその真意, https://www.4gamer.net/games/033/G003329/20180323164/, (参照 2022-11-20).
  11. イシカワシンヤ, 古くて新しいモバイルグラフィックスの世界 – ディファードレンダリングとそのモバイル向けの最適化について –, https://tech.drecom.co.jp/the_world_of_mobile_graphics/, (参照 2022-11-20).
  12. Epic Games, Inc., Unreal Engine 4 ドキュメント レンダリングの概要, https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/Overview/, (参照 202211-20).