てんちょーの技術日誌

自分がつまづいたこととかメモ

【UE4】FilmicTonemapperを打ち消してみた

はじめに

以前 こういうものをつくりました

speakerdeck.com

リポジトリはこちら

github.com

今回のも追加済みです

このイベント登壇後、いろいろ作り込んだり整理していたんですが、
Textureの色がそのままでない!!!!!

この話はこの辺でも触れられています

togetter.com

そこでこのスライドをみました

speakerdeck.com

f:id:shop_0761:20191014182156p:plain

これだ~~~~ これをちゃんとやればテクスチャの色が出る~~~ 

ということでやりました。 エンジン改造をしてしまうとごく少数の人しか使えないので、 Customノードで全部コードを書きました。

UE4.22 です。

コード

上記スライドの

return FilmToneMapInverse(col);

を以下に差し替えてください。

gist.github.com

もしくは上記リポジトリの下記Material Functionを AssetAction→Migrate 等で導入してください。(依存するのはMPC_tToonのみ)

tToon/MF_InverseTonemap.uasset at master · shop-0761/tToon · GitHub

解説

ながいので省略します 気が向いたらやります

精度的にはこのくらいいけます

これは

  • Color_checker テクスチャ(Texture_Color)
  • Viewportで打ち消し処理を入れてunlit表示したもの(Viewport_Color)

とを比較した結果です
適当なマテリアルを作ってスポイトで色を取っています

f:id:shop_0761:20191014182737p:plain

f:id:shop_0761:20191014182733p:plain

PostProcessVolumeのこれらの値を定数ではなく変数で式を組み立てたので
ここを編集しても変更に耐えうるとおもいます(未検証)

f:id:shop_0761:20191014183245p:plain

補足

色空間の変換や桁落ち、Tonemapper内で max(0,a) による負の値の欠損 などにより、一部誤差が発生しています
エンジン側のコードが変わらないと対応が難しいかも?
まあぼちぼち合っていますが…

2019/10/20 追記
現在 こちらの動画のように PostProcess のFilm Parameter を変更すると一部描画が乱れます
これは逆関数を作成した際に分母に0が来る場面があったり、少数での割り算が発生したりしやすくなっています
すぐ治らなさそう というとこまで分かったのでここに書いておきます

まぁ本来のACESにないパラメータを追加したUE側の検証不足な気もしますが

まとめ

難しい話をするよりコピペで使えるほうが便利かなとおもって説明を省きました
ここまでくるのに2ヶ月くらいかかったのですがようやく次にすすめるのでうれしい~~ というかんじです

何かあれば てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) | Twitter まで~