27.9K Views
December 21, 17
スライド概要
2017年12月19日に行われた「第2回UE4何でも勉強会 in 東京」で登壇した際に使用した資料です。
https://ue4allstudy.connpass.com/event/72471/
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
UE4の色について Epic Games Japan Yutaro Sawada
自己紹介 Epic Games Japan Engine support Technician 澤田 祐太朗(@urota_uyu)
色をやる理由 ツール間で素材を受け渡す時のトラブルを防ぐ。 そろそろHDR対応.........
備考 スライド作成時の検証バージョンは4.18.2です。 スライドは公開します。
目次 • 色を扱うにあたって基礎知識 • UE4の色の扱いについて • Material • Texture • Tonemapping(Color grading)
人の目に絵が届くまで • 人の目に絵がくるまでには何度も色が補正される変換がかかっている。 • 主な原因としては • 各ツール • 表示ディスプレイ • 人の目
) 約0.5 • 暗い所ほど敏感 • 明るい所は鈍感 ( 人の目の認識(人間の視覚特性) 出 力 認 識 例えば、、、 • 各色を256段階にして0~1に割り当てた時、 約0.2 入力 • (0.5, 0.5, 0.5)が中間の灰色に見えてほしいが人間の目に補正があるため、そうはならず、 およそ(0.18, 0.18, 0.18) が中間グレーに見える(18%グレー) • 人間の目の明るさ認識は非線形(ノンリニア)。。。 参考 http://compojigoku.blog.fc2.com/blog-entry-23.html
計算上は線形の値が便利 • 線形的(リニア)な数値に合わせて、扱いたい。
ツールでは... • 表示は人間の目を基準に、 内部では線形値で計算している場合が多い。
色ごとの特性 • 実際には色ごとに少し違ったりするので少し複雑。 • その他諸々を取り決めた規格が策定されている
規格について
色々な規格 • Rec.709 • Rec.2020 • sRGB • ACES
Rec.709とRec.2020 ガマット(色域)が 広い Rec.709 Rec.2020 (ITU-R BT.709) (ITU-R BT.2020) 画像引用 https://en.wikipedia.org/wiki/Rec._709 https://en.wikipedia.org/wiki/Rec._2020
ガマット(色域)とガンマ • ガマット(色域) sRGB Gumma 1 0.9 0.8 0.7 0.6 • ガンマ(階調を制御) 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Rec.709 (ITU-R BT.709) 画像引用 https://en.wikipedia.org/wiki/Rec._709
sRGB(standard Red Green Blue) Rec.709に近く、よく使われてるカラースペース sRGBのガンマ 12.92𝐶𝑙𝑖𝑛𝑒𝑎𝑟 , 𝐶srgb = ቐ 1+𝑎 1 2.4 𝐶𝑙𝑖𝑛𝑒𝑎𝑟 𝐶𝑙𝑖𝑛𝑒𝑎𝑟 ≤ 0.0031308 − 𝑎, 𝐶𝑙𝑖𝑛𝑒𝑎𝑟 > 0.0031308 式、画像引用 https://en.wikipedia.org/wiki/SRGB
ACES(Academy Color Encoding System) 広範囲な色域を扱う規格。 カラーマネジメントを行うための様々な規格が決められている。 色域が広範囲で、素材等を扱うためのAP0 AP0よりも少し狭い色域でレンダリング用などに使うAP1があります。 UE4.15からこのカラースペースでトーンマッピングで行っています。 詳しい変換については、Githubにコードがあり、 UE4の実装も、これが取り込まれています。 https://github.com/ampas/aces-dev 参考資料と画像引用 https://en.wikipedia.org/wiki/Academy_of_Motion_Picture_Arts_and_Sciences https://en.wikipedia.org/wiki/Academy_Color_Encoding_System
UE4の色について
Material
MaterialのColor値とプレビューについて 線形(リニア)なColor値を保持しつつ、表示時(UI含めて)にsRGBに変換して表示している。 各色ごとに以下の式で変換 FloatR = FloatR <= 0.0031308f ? FloatR * 12.92f : FMath::Pow( FloatR, 1.0f / 2.4f ) * 1.055f - 0.055f; ¥Engine¥Source¥Runtime¥Core¥Private¥Math¥Color.cpp 120行目当たりから引用 sRGB Gumma 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
sRGB Preview設定 4.18.2時点だとデフォルトEnableになっていますが、 これを外すと、Color Previewのプレビューから sRGB変換がないプレビューになります。 sRGB Gumma 1 0.9 グラフ矢印のような変化で、 見た目が暗くなるようにみえる 0.8 0.7 sRGB 0.6 0.5 0.4 0.3 0.2 リニア 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
sRGB Preview例 sRGB Gumma 1 0.9 0.8 0.7 出 力 sRGB 0.6 0.5 0.4 リニア 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 入力 0.6 0.7 0.8 0.9 1
Texture
Textureインポートの設定 テクスチャのDetails内にオプションがある。 これをEnableにすると、 sRGBの補正がかかる(デフォルトEnable) リニアなテクスチャを用意している場合は、 Disableにする。
Tone mapping
Tone mapping 4.15からTonemapperが新しくなりました。(Filmic Tonemapper) 以前のTonemappingが使いたい場合は、r.TonemapperFilm=0を設定することで使用できます。 新しいFilmic Tonemapperでは、一度ACES空間に変換して 色を弄る処理をしています。 詳しくは... .¥Engine¥Shaders¥Private¥PostProcessCombineLUTs.usf 233行目当たりから処理を確認できます。
HDR出力 r.HDR.Display.OutputDevice 0: sRGB (LDR) 1: Rec709 (LDR) 2: Explicit gamma mapping (LDR) 3: ACES 1000 nit ST-2084 (Dolby PQ) (HDR) 4: ACES 2000 nit ST-2084 (Dolby PQ) (HDR) 5: ACES 1000 nit ScRGB (HDR) 6: ACES 2000 nit ScRGB (HDR) } Filmic Tone Mappingはかかりません。
Auto Exposuer UE4では自動的に露出を制御しているため、 色周りの実験をするときは、 切るまたは手動で行ったほうが良いかも?
色を扱う上で気を付けること • UE4は基本的にリニアの色空間で計算されている。 • 人間の認識はノンリニア • 色の値は使用する処理によって、 都合の良い空間に変換されているので意識する必要がある。