fix-typoのデバッグメモ
該当PR | saturday06/VRMIMPORTERforBlender: PR #23 |
作業メモ | https://Cj-bc.github.io/blog/posts/2021-01-11-blender-python-memo.html |
問題
issueでsaturday06さんが教えてくれた のですが、「一度古いプラグインでVRMを読み込んだblendファイルで、新しくVRMを読み込むとエラーを吐く」
トレースバック
Traceback (most recent call last):
File "/Users/me/Library/Application
Support/Blender/2.80/scripts/addons/VRM_IMPORTER_for_Blender/__init__.py",
line 88, in execute
blend_model.BlendModel(context, vrm_load.read_vrm(self.filepath, self),
self)
File "/Users/me/Library/Application
Support/Blender/2.80/scripts/addons/VRM_IMPORTER_for_Blender/importer/blend_model.py",
line 53, in __init__
self.vrm_model_build()
File "/Users/me/Library/Application
Support/Blender/2.80/scripts/addons/VRM_IMPORTER_for_Blender/importer/blend_model.py",
line 71, in vrm_model_build
self.make_material()
File "/Users/me/Library/Application
Support/Blender/2.80/scripts/addons/VRM_IMPORTER_for_Blender/importer/blend_model.py",
line 333, in make_material
self.build_material_from_mtoon(b_mat, mat)
File "/Users/me/Library/Application
Support/Blender/2.80/scripts/addons/VRM_IMPORTER_for_Blender/importer/blend_model.py",
line 646, in build_material_from_mtoon
color_socket_to_connect=sg.inputs[tex_dic[tex_name]],
KeyError: 'bpy_prop_collection[key]: key
"NormalmapTexture" not found'
location: <unknown location>:-1
バグが起きた場所
__init__.ImportVRM.execute()
└blend_model.BlendModel.__init__()
└BlendModel.vrm_model_build()
└BlendModel.make_material()
└BlendModel.build_material_from_mtoon()
バグの原因
importer/blend_model.py:449
で
bpy.data.node_groups[shader_node_group_name]
を取ってきているところが原因。
bpy.data.node_groups
はblendfile内にある node_groups
を保持しており、 既に「古いバージョンで読み込まれたVRM」がある場合
bpy.data.node_groups["MToon_unversioned"]
は 「古いバージョンの
MToon_unversioned
」=typoが含まれたものを返してしまう。
そうすると、 node_group_create
から返されたのちに
.inputs["Normalmap"]
が読まれた際に存在せずにクラッシュしてしまう。
解決方法
ここでできるのは
今までと同じように"Normalmap"が存在しなかったら"Nomalmap"を読ませる
そもそも古い
bpy.data.node_groups["MToon_unversioned"]
を更新させる(どのタイミングで?)