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

BlendShapeの数が多いとファイルサイズが肥大化しがちである #295

Closed
skishida opened this issue Jul 27, 2019 · 9 comments
Assignees
Milestone

Comments

@skishida
Copy link

BlendShapeがたくさんある(かつ頂点数がそこそこある)モデルの最終的なファイルサイズのほとんどをBlendShapeが占めてしまい,ファイルサイズ制限が厳しい外部サービスにVRMモデルを登録する手間が増えてしまいます.

実際に手持ちのモデルをエクスポートし,ファイルサイズの専有割合を比べてみたところ,最終サイズ約47MBに対してBlendShapeが約35MBを占めていました.
なぜこの値になるかというと,次の計算式になります.

18179 (モデルの頂点数) * 2 (usePosition, useNormal) * 84 (BlendShape数) * 12 (float[3]のbyte数) ≒ 35MB

gLTFフォーマットの規定までは追いかけられていませんが,VRMの特性上必ずしも出力されたモデルにFBX等に含まれていたBlendShapeすべてを含める必要はないのかなと思います.
VRMとしてはBlendShapeProxy経由で操作されることが期待されていて,サービス利用側としてもそれ以外のBlendShapeに対応することはオプションであるという認識でいます.

@hiroj hiroj added this to the v1.0 milestone Jul 30, 2019
@esperecyan
Copy link

Unity 2018.3 は、FBXのBlendShapeにおける法線・接線データに対応しました。

Unityエディタ上の話ですが、これに伴い、同バージョン以降を利用してGLB/VRM/VCI化を行うと、メッシュアセットのファイルサイズが大きくなるとともに、頻繁に読み込みで止まるようになりました。
https://twitter.com/esperecyan/status/1135511660293107718

Unity 2018.2以前でFBXからエクスポートした場合と同様に、既定でBlendShapeの法線・接線データを無視するようにし、オプションでこれらのデータを利用できるようにしても良いのではないかと思います。

@hiroj hiroj modified the milestones: v1.0, v0.54 Aug 8, 2019
@hiroj
Copy link
Contributor

hiroj commented Aug 8, 2019

BlendShapeの法線・接線データのExportはオプションにするのは良いと思います。Unity 2018.3以降で問題が出ているとのことなので、出来れば次バージョンで対処したいところではあります。

@hiroj
Copy link
Contributor

hiroj commented Dec 13, 2019

UniVRM v0.53以下のバージョンでは、法線の無いブレンドシェイプを読み込むとエラーになる箇所があったため、v0.54ではいったんこのエラー修正を入れ、Export時に法線を取り除くオプションは次回以降のバージョンで再度検討致します。

@hiroj hiroj modified the milestones: v0.54, v0.55 Dec 18, 2019
@hiroj hiroj modified the milestones: v0.55, v0.56 Dec 26, 2019
@esperecyan
Copy link

別案ですが、出力時などにブレンドシェイプを含むメッシュと含まないメッシュに分離する機能を実装できないでしょうか。

@hiroj
Copy link
Contributor

hiroj commented Feb 3, 2020

image
出力時では無いですが、MeshIntegratorを使うとBlendShapeを使用していないメッシュを統合し、SubMesh(GltfのPrimitive)に変換する機能があります。(VRM/UniVRM/Editor/SkinnedMeshUtility/MeshIntegrator)
すでにMeshが統合されてしまったモデルに対して、BlendShapeが含まれているSubMeshを取り除いて不要な頂点情報の書き込みを減らしたいということでしょうか?

@esperecyan
Copy link

はい、メッシュの統合ではなく分離で、Cats Blender Plugin の Separate by shapes のように、ポリゴン単位で分離したいという意図でした。
https://github.com/michaeldegroot/cats-blender-plugin#model-options

変換前

  • アバター
    • スキンドメッシュ
      • サブメッシュ🟠【ブレンドシェイプあり】
      • サブメッシュ🟢

変換後

  • アバター
    • スキンドメッシュ
      • サブメッシュ🟠-1【ブレンドシェイプあり】
    • スキンドメッシュ_noshapes
      • サブメッシュ🟠-2
      • サブメッシュ🟢

@hiroj
Copy link
Contributor

hiroj commented Feb 4, 2020

なるほど、分離するUlitityの追加を検討してみます。

@ousttrue
Copy link
Contributor

ousttrue commented May 29, 2020

0.56の作業予定

FBX等に含まれていたBlendShapeすべてを含める必要はない

のオプションを追加して BlendShape の数を減らせるようにします

安全なオプション

sparse

  • GLTF仕様のsparseアクセッサーの有効化

https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors

メッシュの分割方法によりますが容量削減の効果があります。
これも、受け入れ側のアプリケーションのローダーが対応している必要がありますが、
UniVRMはだいぶ前のバージョンからロードできます(2018の夏実装)。

わりと安全(UniVRMと別の実装ではロードできない場合があります)

BlendShapeの法線・接線データを削除する

UniVRM v0.53以下のバージョンでは、法線の無いブレンドシェイプを読み込むとエラーになる箇所があった

  • BlendShapeの法線・接線データを削除するチェックボックスを追加します。ただし、受け入れ側のアプリケーションがUniVRM v0.53以下はエラーでロードに失敗します。利用先の、UniVRMのバージョンに注意してください

UniVRM v0.53以下はロードできない

メッシュ分割

Unityシーンの構成変更のUtilityとして存在した方がよさそうです。
VRM作らないけど、ツールだけ使うという便利さがあります。

@hiroj
Copy link
Contributor

hiroj commented Jun 8, 2020

ブレンドシェイプを削るオプションを追加しました、v0.56のバージョンから使用出来る予定です。
メッシュ分割に関しては別のissueを立てます。

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

4 participants