輪郭線幅のテクスチャに#010101より暗い点が入ると輪郭色に塗りつぶされる
m2wasabi opened this issue · comments
ご報告ありがとうございます。
Z-Fighting による問題だと推測します。
まず WorldCoordinates
における線幅は m
単位です。
ここで添付していただいた画像の設定は 0.01m
に対して 1/256
を乗算して 0.04mm
幅の輪郭線、ということになります。
これくらい細い輪郭線ですと、MToon に関係なく Z Buffer による深度テストに失敗して Z-Fighting に至ってしまうことがあります。
解決したいところではあるのですが、自分ではあまり良い解決策に至っておりません。
できれば細すぎる輪郭線はなるべく避けていただけると幸いです。
また他に解決策のほうがあればご教示いただければ幸いです。
MToon/MToon/Resources/Shaders/MToonCore.cginc
Lines 78 to 79 in 3b9347a
ここですよね。
今の仕様だと微小値の積でオフセットに0に漸近する値を投入できてしまうので、
(極端な話テクスチャ値が0だと他のパラメータに何入れても無駄になる)
例えばオフセットに下限を設けるとかですかね。
訂正。
WorldCoordinates
における線幅は cm
単位です。
したがって 0.01
かつ画像が 0x01
の場合 0.0004mm
ですね…
PullReqにて、ユーザー設定値の最終段をclampしてみました。こんな風ではいかがでしょう?
この問題ですが、ZBuffer の精度に因るものです。
したがって、このシェーダがたとえば Unity 外に移植される場合には別の閾値になりえます。
そういった影響を考慮した結果、この問題は MToon の計算による頂点座標定義ではなく、
あくまで Unity に依存する解決法として Z Offset をかけることで解決したいと思います。