Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

輪郭線幅のテクスチャに#010101より暗い点が入ると輪郭色に塗りつぶされる #38

Closed
m2wasabi opened this issue Apr 1, 2019 · 6 comments

Comments

@m2wasabi
Copy link

m2wasabi commented Apr 1, 2019

アウトラインテクスチャで黒の塗りつぶし(#010101よりも暗い点)があると、マテリアル自体がアウトライン色に塗られてしまいます。

アウトラインのWidth Mode は WorldCoordinates , ScreenCoordinates のどちらでも発生します。

症状が出ているのはメッシュの中で裏からも見える部分のようです

エディタ内で確認。ビルド後もそうであるかは未確認です。

image

Platform: Windows10 Pro build 17134.648
Unity Editor version: 2018.2.15f1
UniVRM Version: 0.51.0

@Santarh
Copy link
Owner

Santarh commented Apr 2, 2019

ご報告ありがとうございます。

@Santarh
Copy link
Owner

Santarh commented Apr 2, 2019

Z-Fighting による問題だと推測します。

まず WorldCoordinates における線幅は m 単位です。
ここで添付していただいた画像の設定は 0.01m に対して 1/256 を乗算して 0.04mm 幅の輪郭線、ということになります。
これくらい細い輪郭線ですと、MToon に関係なく Z Buffer による深度テストに失敗して Z-Fighting に至ってしまうことがあります。

解決したいところではあるのですが、自分ではあまり良い解決策に至っておりません。
できれば細すぎる輪郭線はなるべく避けていただけると幸いです。

また他に解決策のほうがあればご教示いただければ幸いです。

@m2wasabi
Copy link
Author

m2wasabi commented Apr 2, 2019

float3 outlineOffset = 0.01 * _OutlineWidth * outlineTex * worldNormalLength * v.normal;
float4 vertex = UnityObjectToClipPos(v.vertex + outlineOffset);

ここですよね。
今の仕様だと微小値の積でオフセットに0に漸近する値を投入できてしまうので、
(極端な話テクスチャ値が0だと他のパラメータに何入れても無駄になる)
例えばオフセットに下限を設けるとかですかね。

@ghost
Copy link

ghost commented Apr 2, 2019

訂正。
WorldCoordinates における線幅は cm 単位です。

したがって 0.01 かつ画像が 0x01 の場合 0.0004mm ですね…

@m2wasabi
Copy link
Author

m2wasabi commented Apr 2, 2019

PullReqにて、ユーザー設定値の最終段をclampしてみました。こんな風ではいかがでしょう?

@Santarh
Copy link
Owner

Santarh commented May 9, 2019

この問題ですが、ZBuffer の精度に因るものです。
したがって、このシェーダがたとえば Unity 外に移植される場合には別の閾値になりえます。
そういった影響を考慮した結果、この問題は MToon の計算による頂点座標定義ではなく、
あくまで Unity に依存する解決法として Z Offset をかけることで解決したいと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants