SDF Based Transition Blending for Shadow Threshold Map

セルルックキャラクターの顔の陰制御に用いられるShadow Threshold Mapを生成する仕組みについて.
連番二値画像からMapを合成するメイン部分の説明を試みます.



概要


UE5上のツールとしては以下のSDF関連ツールに含まれています.
ブラックボックス無しでBPとマテリアルとして実装しているので詳細はそちらをご確認ください.
github.com


アルゴリズム

ここでは最もシンプルと思われるC0連続な合成を考えます.
連番二値画像間の遷移速度をよりなめらかにしたい場合はC1連続となるように合成するのが良いかもしれません.

連番の連続する2枚ずつを処理していきます.

処理対象の連続するペア

連番のi番目とi+1番目の例

SDF生成

二値画像のSDFを計算.
内部側の距離も必要なのでSigned Distance Fieldである必要があります.

SDF生成

SDFを元に遷移率を計算

SDFは境界からの距離を表すため,
SDF_1st / (SDF_1st + SDF_2nd)
を計算することで遷移元から遷移先の境界で 0-1 となるようなグラデーションが得られます.

SDFの値から遷移率を計算

ペアの遷移領域のみマスクして処理

処理対象は1st->2ndで黒->白に変化した領域だけなのでマスクします.
遷移領域における各ピクセルのペア間遷移率(0~1)が得られたので, この値で最終的な陰用閾値を決定することができます.
これを連番画像のすべてのペアで実行すればShadow Threshold Mapが完成します.

遷移領域のみマスク

(付録)変化の速度の連続性

この方法では2枚のペアずつ処理しているため, 最終的なグラデーションの変化速度が不連続になります(C0連続).
枚数を多く用意して細かい区間で分けている場合は気にならないかもしれませんが,
少ない枚数の場合には陰領域の移動速度が区間の境目でガタついて見えるかもしれません.
これを解決する場合は2枚のペアではなく更にその隣の画像も含めて速度が連続になるように遷移率を計算することになると思われます.
(本記事では未対応です)

変化の速度が不連続

関連情報

実際の運用等についてはCEDECのHi-Fi RUSH講演や, alweiさんの記事が参考になるかと考えます.

cgworld.jp

https://cgworld.jp/article/202306-hifirush01.html


unrealengine.hatenablog.com




名称として
Shadow Threshold Map
Face Threshold Map
Face Shadow Map
等ばらつきがあるのがつらいところ...