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

新しいUniVRMでモデルを出力すると変な線が出る #2082

Closed
Narazaka opened this issue Jun 8, 2023 · 21 comments
Closed

新しいUniVRMでモデルを出力すると変な線が出る #2082

Narazaka opened this issue Jun 8, 2023 · 21 comments
Labels
bug Something isn't working help wanted stale

Comments

@Narazaka
Copy link

Narazaka commented Jun 8, 2023

環境情報

  • UniVRM version: 少なくとも0.90.10.111.0
  • Unity version: Unity-2018.4.20f1 2019-4.31f1 2020.3.48f1
  • OS: Windows 10

バグについて

  • バグの内容

UniVRM-0.63.2で出力して正常に出力されていたモデルがUniVRM-0.90.1以降だと変な線が出る出力になってしまっています。

口周りの法線が問題だとは思うのですが、各環境でunitypackageで同一のデータを使い回したにもかかわらず出力が異なります。

  • ConsoleLog
  • スクリーンショット

image

  • 再現方法

手元で行った方法で手軽に出来る物では無いですが……

  • UniVRM-0.63.2@Unity-2018.4.20f1でシンシア(現非公開)のモデルをExport humanoidする
  • UniVRM-0.111.0@Unity-2020.3.48f1または2019-4.31f1で同モデルをExport to VRM0.xする
  • Virtual Castへのアップロード、VRM Live Viewerでのローカルファイル読み込み、VRoid Hubへのアップロードして最適化される以前の表示、VRM Live ViewerでVRoid Hub連携してダウンロードして表示、等で確認する
  • (VRoid Hubにおいて「最適化」後のWeb表示では問題ないが、連携アプリではその後も問題が発生する)
  • エラーの発生するファイル(ここに貼り付けても差し支えの無いもの)
@Narazaka Narazaka added the bug Something isn't working label Jun 8, 2023
@Narazaka
Copy link
Author

Narazaka commented Jun 8, 2023

なお2019-4.31f1においてUniVRM-0.63.2/UniGLTF-2.0.0/VRMShaders-0.69.1で試行してもUnity2018と同様に正常に出力された(VRM Live ViewerやVirtual Castのプレビューで確認。ただしVRoid HubにおいてはSKIN_SKELETON_INVALIDやDUPLICATE_ELEMENTS等のエラーが出る)ファイルになったので、UnityではなくUniVRMの問題だと思います。

@Narazaka
Copy link
Author

Narazaka commented Jun 8, 2023

univrm-0.70.0/vrmshaders-0.70.0/unigltf-2.6.0 OK
univrm-0.72.0/vrmshaders-0.72.0/unigltf-2.8.0 OK
univrm-0.73.0/vrmshaders-0.73.0/unigltf-2.9.0 OK
univrm-0.74.0/vrmshaders-0.74.0/unigltf-2.10.0 OK
univrm-0.75.0/vrmshaders-0.75.0/unigltf-2.11.0 NG
univrm-0.80.0/vrmshaders-0.80.0/unigltf-2.16.0 NG

と言う感じだったので、univrm-0.75.0/vrmshaders-0.75.0/unigltf-2.11.0 の変更が影響している模様です。

@Narazaka
Copy link
Author

Narazaka commented Jun 8, 2023

  • カスタム法線が無視されている?
  • 口のそのあたりにシームも存在するのでそれがなにかバグっている?

@ousttrue ousttrue added this to the v0.113 milestone Jun 12, 2023
@ousttrue
Copy link
Contributor

ousttrue commented Jun 12, 2023

https://vrm.dev/univrm/blendshape/check_blendshape_normal.html?highlight=%E6%B3%95%E7%B7%9A

MToon の Options - Debugging Options - Visualize を Normal に変更します。

により、どの段階の法線が変わっているかを詳細に追わないとわからないかもしれないです。
例えば、もっと前に変化しているが影色が目立たないので気付かないことがありえます。

法線が変わってしまうタイミングは import/export の複数の段階でありえますが、

  • unity の fbx importer(Unity version により挙動が違う可能性)
  • UniVRM の exporter(UniVRM version により挙動が違う可能性)
  • UniVRM の importer(UniVRM version により挙動が違う可能性)

全部、疑惑があり得ます。

@Narazaka
Copy link
Author

Narazaka commented Jun 12, 2023

#2082 (comment)
これは同一のUnity version(すべて2019-4.31f1)でのテストなので、後者2択だとおもいます。

MToon の Options - Debugging Options - Visualize を Normal に変更します。

Unity上でこれにおかしな変化はなかったと思います。

@Narazaka
Copy link
Author

  • univrm-0.74.0/vrmshaders-0.74.0/unigltf(com.vrmc.unigltf)-2.10.0/Unity2019-4.31f1
  • univrm-0.75.0/vrmshaders-0.75.0/unigltf(com.vrmc.unigltf)-2.11.0/Unity2019-4.31f1
  • univrm-0.111.0/vrmshaders-0.111.0/unigltf(com.vrmc.gltf)-0.111.0/Unity2019-4.31f1

で出力したモデルを以下の同一のソフトウェアで読み込んだところ、以下のようになりました。

変な線が出る表示になっていることを「問題あり」と表記しています。なおその場合でも十分モデルに寄って正面からの表示であれば線は出ません。

データによって変わるのでexporterの挙動に寄ること、またソフトによっても変わるのでimporterの挙動にも寄ることがありえそうです。

  • VRM Live Viewer 3.7.1 (UniVRM 0.89 MToon 3.8 UniGLTF 2.25)
    • univrm-0.75.0/univrm-0.111.0のみ問題あり
  • VRM Live Viewer 3.0 (UniVRM 0.89)
    • univrm-0.75.0/univrm-0.111.0のみ問題あり
  • VRM Live Viewer 1.15 (UniVRM 0.55 MToon 3.2)
    • いずれも問題なし
  • VRMをHDRPで見るやつ 20210624
    • いずれも問題なし
  • 3tene 2.0.17
    • いずれも問題なし
  • VDRAW 1.9.9
    • univrm-0.75.0/univrm-0.111.0のみ問題あり
  • VRoid Hub(2023-06-12現在)
    • univrm-0.74.0は問題なし
    • univrm-0.75.0/univrm-0.111.0は「最適化」が終わるまでの表示は問題あり、「最適化」以降は問題なし(ただしVRM Live Viewer等の連携アプリで利用すると問題あり)
  • VirtualCast(2023-06-12現在)
    • univrm-0.75.0/univrm-0.111.0のみWeb上での表示のみ問題あり。アプリ内では問題なし(最適化がかかっている?)
  • cluster(2023-06-12現在)
    • univrm-0.75.0/univrm-0.111.0のみWeb上でのサムネイル撮影時のみ問題あり。アプリ内では問題なし(最適化がかかっている?)

@Kurakivrc
Copy link

image
同じような症状が出ました。
作成したVRMをクラスターにアップロードしたら発生しました。

@ousttrue
Copy link
Contributor

ousttrue commented Jul 3, 2023

74~75 間で 法線関連は #967 でしょうか。
これが関係しているかと言われればよく分からない。
法線マップが変わる手順などなおす場所が明示されれば対応できますが、
調べるのがそもそも難しいです。

@Santarh
Copy link
Contributor

Santarh commented Jul 3, 2023

@Narazaka

スクリーンショットを拝見した限り、鼻頭のドットの解像度も落ちているように見えます。

口のそのあたりにシームも存在するのでそれがなにかバグっている?

とのことなので、おそらくテクスチャ解像度が落ちていることに所以しているように見えます。

関連する変更としては
UniVRM v0.75.0 から、glTF および VRM の Export 時に、使用テクスチャの MaxSize 設定を考慮するようになっています。
MaxSize が元の画像ファイルよりも小さいサイズの場合、この設定のとおりのサイズで Export します。

これは、VRM モデル出力時に最適化をしやすくすること、そして Unity シーン上での見た目をそのまま出力することを目的とした仕様となっています。

該当の顔のテクスチャの MaxSize 設定を見直していただけないでしょうか?

https://docs.unity3d.com/ja/current/Manual/class-TextureImporter.html

@Narazaka
Copy link
Author

Narazaka commented Jul 3, 2023

image
image

MaxSizeが2048になっていたのをテクスチャ解像度同等の4096にしましたが変化はありませんでした。
またCompressionをHigh QualityからNoneにしてみましたが変化はありませんでした。
一方テクスチャ関連であればと思い立ってGenerate Mip MapsをOFFにすると改善しました(当然ジャギが目立ちますが上記で問題にしていた不可解な線は出なくなっています)。

  • VRM Live Viewer 3.7.1 (UniVRM 0.89 MToon 3.8 UniGLTF 2.25)
  • univrm-0.75.0/univrm-0.111.0

で確認しました

どちらかと言えばこちらのissue関連でしょうか。
#947

@Santarh
Copy link
Contributor

Santarh commented Jul 4, 2023

検証のほうありがとうございます 👍

なるほど Mip Map Off で改善となると、やはり問題は UV シームを超えたテクセルフェッチということになりそうですね……

そしてそうですね、挙げられている issue #947 の修正 PullRequest #969 によって UniVRM v0.75.0 から、glTF モデルに記録されている Filter Mode が適切に読み込まれるようになっています。
また VRM Liver Viewer も調べた様子では少なくとも UniVRM v0.75.0 以降のバージョンを使っているようです。
したがって残念ですが、そのモデルの Import 結果としてその挙動は仕様として正しいと言わざるをえません。

解決策としては既にされているように Mip Map を切った状態で Export していただければ、多くのアプリケーションで問題ないと思われます。
現行の UniVRM の Exporter は Texture の Mip Mapを考慮しています。

ただしこれはすべての VRM 対応アプリケーションでの動作を保証するような解決法ではありません。
また現代の描画アーキテクチャ上問題になりやすい状態ではあります。
したがって根本的には UV 展開やマテリアル分割などのモデルレベルでの修正が安全策ではありそうです。

@Narazaka
Copy link
Author

Narazaka commented Jul 4, 2023

ありがとうございます。

モデルレベルでの修正

モデルが自作ではないためその辺りは如何ともしがたいところです。(そして少なからずの利用者はそうだとも思います)

Filter Mode が適切に読み込まれる

これ以前(<=0.74.x)はつまりmipmapの指定が無視されていたということでしょうか?
であれば、>=0.75.0で<=0.74.xと"同等"の結果にするワークアラウンドは「mipmapを切る」で正しいでしょうか。

@Narazaka
Copy link
Author

Narazaka commented Jul 4, 2023

またUnityで直接利用している時点では問題ないmipmapがVRMを経由するとおかしい描画になるのはユーザーとしてはなかなかしんどいものがあります。(それこそなぜ当該モデルが現状でリリースされているかというとUnityで問題なく描画出来るからなので)
ここの互換性を向上させることは出来ないものでしょうか?(VRMそれ自体としてはUnity非依存な仕様であるとは思うが、UniVRMはUnityからそれを作る・利用するためのものなので互換性は要望したい)

@Santarh
Copy link
Contributor

Santarh commented Jul 6, 2023

こればかりはこちらとしてもどうしようもありません。

モデルが自作ではないためその辺りは如何ともしがたいところです。


はい。無視されていました。
無視されたうえで、不正確な対応関係に Export/Import されていました。
https://github.com/vrm-c/UniVRM/pull/969/files#diff-99b5a2f8ad23ded0d9b83b9482acba8664af8858db755851f420b15c29f4a1caL28

これ以前(<=0.74.x)はつまりmipmapの指定が無視されていたということでしょうか?


理解します。現に当該の 0.75.0 の変更は「Unity 上での見た目を再現する」ことを目的とした Improvements です。
具体的に言えば mipmap の設定や Max Size の設定を出力時に反映させることでそれを実現しています。
なので、そのモデルで問題があるなら改善対象だと考えます。
引き続き調査はしますが、こちらでは再現できていないので、めどはついていません。

またUnityで直接利用している時点では問題ないmipmapがVRMを経由するとおかしい描画になるのはユーザーとしてはなかなかしんどいものがあります。

ここの互換性を向上させることは出来ないものでしょうか?(VRMそれ自体としてはUnity非依存な仕様であるとは思うが、UniVRMはUnityからそれを作る・利用するためのものなので互換性は要望したい)

@Santarh
Copy link
Contributor

Santarh commented Jul 6, 2023

<=0.74.x の挙動は不正確な実装であったため、完全な再現をするにはそれ専用の設定をする必要がありそうです。

であれば、>=0.75.0で<=0.74.xと"同等"の結果にするワークアラウンドは「mipmapを切る」で正しいでしょうか。

具体的には過去の実装を参照すると以下の対応関係にありそうです。
https://github.com/vrm-c/UniVRM/pull/969/files#diff-99b5a2f8ad23ded0d9b83b9482acba8664af8858db755851f420b15c29f4a1caL28

<= 0.74.x での設定 >= 0.75.0 で再現させる設定
FilterMode: Point FilterMode: Point, MipMap: Off
FilterMode: Bilinear FilterMode: Bilinear, MipMap: Off
FilterMode: Trilinear FilterMode: Trilinear, MipMap: On

@Santarh
Copy link
Contributor

Santarh commented Jul 6, 2023

ちなみに推測ですが、口の UV シーム付近のテクスチャ色が、急に肌色から黒色に変わっていたりしないでしょうか?
そういった UV アイランド外の箇所を肌色で塗りつぶすと問題が解決できるかもしれません。

@Narazaka
Copy link
Author

Narazaka commented Jul 7, 2023

image
このような感じ(4Kテクスチャを4分割した所が顔で、そのうち下側の口のところ)なのでたしかに多少マージンはありますがmipmapにするとはみ出ているのかも知れません。
試してみます。

なお本モデルはBoothで販売されていた「シンシアちゃん」 https://booth.pm/ja/items/1627213 なのですが生憎今ショップ非公開なのです……

@Narazaka
Copy link
Author

Narazaka commented Jul 7, 2023

口の上側の線は塗りつぶしで改善しましたが、口周りのノイズのようなものは改善しませんでした。
これもおそらくUVの具合だとは思いつつ、やはりmipmapを切らないことには0.75以降だと問題が出る感じの結果になりました。
image

左から上記テクスチャ0.75・元テクスチャ0.75・元テクスチャ0.74

image

Unity上で同様の事象は起きていない(mipmapあり)
image

@Santarh
Copy link
Contributor

Santarh commented Jul 11, 2023

検証の方ありがとうございます。
やはりこちらでは再現できていないので、解決の続きは問題が再現できるまでは一旦 Pending かなあという感じです。

報告の方ありがとうございました!

@ousttrue ousttrue modified the milestones: v0.113, v0.114 Jul 24, 2023
@github-actions github-actions bot added the stale label Jul 29, 2023
@github-actions
Copy link

This issue has been labeled as "stale" due to no response by the reporter within 1 month (and 7 days after last commented by someone). And it will be closed automatically 14 days later if not responded.

@github-actions
Copy link

This issue has been closed due to no response within 14 days after labeled as "stale", 7 days after last reopened, and 7 days after last commented.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted stale
Projects
None yet
Development

No branches or pull requests

4 participants