【UE4】FilmicTonemapperを打ち消してみた
はじめに
以前 こういうものをつくりました
リポジトリはこちら
今回のも追加済みです
このイベント登壇後、いろいろ作り込んだり整理していたんですが、
Textureの色がそのままでない!!!!!
この話はこの辺でも触れられています
そこでこのスライドをみました
これだ~~~~ これをちゃんとやればテクスチャの色が出る~~~
ということでやりました。 エンジン改造をしてしまうとごく少数の人しか使えないので、 Customノードで全部コードを書きました。
UE4.22 です。
コード
上記スライドの
return FilmToneMapInverse(col);
を以下に差し替えてください。
もしくは上記リポジトリの下記Material Functionを AssetAction→Migrate 等で導入してください。(依存するのはMPC_tToonのみ)
tToon/MF_InverseTonemap.uasset at master · shop-0761/tToon · GitHub
解説
ながいので省略します 気が向いたらやります
精度的にはこのくらいいけます
UE4のToneMapper おそらく色空間の変換誤差と桁落ちやどこかで丸められている分 若干誤差があるけどほぼ打ち消せるようになった #UE4Study pic.twitter.com/RnaoogQtpT
— てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) October 14, 2019
これは
- Color_checker テクスチャ(Texture_Color)
- Viewportで打ち消し処理を入れてunlit表示したもの(Viewport_Color)
とを比較した結果です
適当なマテリアルを作ってスポイトで色を取っています
PostProcessVolumeのこれらの値を定数ではなく変数で式を組み立てたので
ここを編集しても変更に耐えうるとおもいます(未検証)
補足
色空間の変換や桁落ち、Tonemapper内で max(0,a) による負の値の欠損 などにより、一部誤差が発生しています
エンジン側のコードが変わらないと対応が難しいかも?
まあぼちぼち合っていますが…
2019/10/20 追記
現在 こちらの動画のように PostProcess のFilm Parameter を変更すると一部描画が乱れます
これは逆関数を作成した際に分母に0が来る場面があったり、少数での割り算が発生したりしやすくなっています
すぐ治らなさそう というとこまで分かったのでここに書いておきます
コピペで組んでみました。
— はるべえ (@ruyo_h) October 15, 2019
私の検証手順が悪いかもですが…
パラメータによって稀に色が飛ぶ箇所が 一部誤差 のあたりでしょうかね?
デフォルトパラメータでは良い感じでした! 凄い! pic.twitter.com/uYUXPJmWYV
まぁ本来のACESにないパラメータを追加したUE側の検証不足な気もしますが
まとめ
難しい話をするよりコピペで使えるほうが便利かなとおもって説明を省きました
ここまでくるのに2ヶ月くらいかかったのですがようやく次にすすめるのでうれしい~~ というかんじです