Ink

Contents related to tech, hobby, etc

fix-typoのデバッグメモ

|

fix-typoのデバッグメモ

該当PRsaturday06/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:449bpy.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"] が読まれた際に存在せずにクラッシュしてしまう。

解決方法

ここでできるのは

  1. 今までと同じように"Normalmap"が存在しなかったら"Nomalmap"を読ませる

  2. そもそも古い bpy.data.node_groups["MToon_unversioned"] を更新させる(どのタイミングで?)