VRM-Addon-for-Blender icon indicating copy to clipboard operation
VRM-Addon-for-Blender copied to clipboard

Bug report / バグ報告: custom split normal export is broken. カスタム法線の出力が壊れている

Open iCyP opened this issue 2 years ago • 4 comments

Describe the bug / バグについて A clear and concise description of what the bug is. カスタム法線の出力が壊れている。

To Reproduce / バグの再現方法 カスタム法線を持つモデルを出力すると法線がおかしくなっている。

Screenshots / スクリーンショット before_after

Desktop (please complete the following information) / PC環境情報

  • OS: Windows11
  • Blender:version: 2.93.8, 3.0
  • Addon Version :2.3.12

Additional context / なにか他に書いておきたいことはこちらへ bmesh.ops.triangulate はカスタム法線を維持しないようです。 カスタム法線(ex:球法線を転写したモデル)にて下記を実行するとカスタム法線が破損します。

import bmesh,bpy
bm = bmesh.from_edit_mesh(bpy.context.active_object.data)
bmesh.ops.triangulate(bm,faces=bm.faces[:])
bmesh.update_edit_mesh(bpy.context.active_object.data)

また、

bpy.ops.mesh.quads_convert_to_tris(quad_method='BEAUTY', ngon_method='BEAUTY')

はカスタム法線を維持したまま分割できますが、meshオペレーターなので、やり方を変えないといけなくなると思います。 また、手前味噌ですが、先のFB_ngon_encodingブランチ 9099d39 はこの問題を回避できるようです。

既出のissue,失礼しました。いつもお疲れ様です。よろしくお願いいたします。

iCyP avatar Apr 27 '22 13:04 iCyP

カスタム法線持ちのvrm export 出来るblendファイルを添付します。(blender3.0 custom normal suzanne.zip

iCyP avatar Apr 27 '22 13:04 iCyP

ありがとうございます!

FB_ngon_encodingのマージも含めてGW中目標に作業します!

saturday06 avatar Apr 27 '22 13:04 saturday06

すみません、こちらFB_ngon_encodingコミット https://github.com/saturday06/VRM_Addon_for_Blender/commit/9099d39887899833d46e5f869d598ad1533970d1 いったんマージさせていただいたのですが、コーナーケースへの対応もやっておきたいため、いったん tessface_fan() 内で素朴な三角分割のみ行い、頂点の並べ替えをせずにリターンするようにしました ↓ https://github.com/saturday06/VRM_Addon_for_Blender/blob/2_3_13/io_scene_vrm/exporter/legacy_vrm_exporter.py#L1646

三角分割は bmesh.calc_loop_triangles()を使うと法線が保たれるっぽいのでそれを用いています。シェイプ無しの法線は正しくなるようになりましたが、シェイプキーでの変形時の法線がまだちょっと怪しいので引き続き検証します。

saturday06 avatar May 01 '22 01:05 saturday06

未解決だったシェイプキー法線ですが、どうやらBlenderが自動計算したシェイプキー法線とだいたい同じ出力ができていることは確認できたのですが、どうもその自動計算がMToonと非常に相性が悪いということがわかりました。また、Unityでfbxインポート時に、シェイプキー法線の削除を選ぶのも一般的( https://qiita.com/ApricotLemon/items/221cbd85b8e149e832c0 )のようなので「MToonの場合はデフォルトではシェイプキー法線を出力しない」を実装しました。設定で個別に出力をONにできます

シェイプキー無し

シェイプさせる:Blender自動計算シェイプキー法線

シェイプさせる: シェイプキー法線データを全削除

saturday06 avatar Nov 25 '22 12:11 saturday06