DAZ StudioからエクスポートしたObjファイルをBlenderからインポートしようとした時にUnicodeDecodeErrorが出るのを回避する
ゴールデンウィーク中にblenderを使ってた時にエラーになったのを回避できたので記録 確認した環境
Blender 3.1.2
DAZ Studio 4.20
背景
blenderで人体モデリングするのが面倒だったのでDAZ Studioのモデルをエクスポートしてblenderに取り込もうとした DAZ StudioのモデルをBlenderに取り込む方法は以下の記事が非常に参考になる
この時、以下のエラーが表示された
https://gyazo.com/37020eaf46eb4560cb9c02921c73f2a8
これクリップボードにコピーできなくて検索するのがダルくて悩んでたけれど、「情報」ペインを表示したらそっちにもエラーが出ていた
https://gyazo.com/f3bdaef245b92490bbee5a8b8d2bd22a
Python: Traceback (most recent call last):
File "C:\Users\jiro4989\scoop\apps\blender\current\3.1\scripts\addons\io_scene_obj\__init__.py", line 151, in execute
return import_obj.load(context, **keywords)
File "C:\Users\jiro4989\scoop\apps\blender\current\3.1\scripts\addons\io_scene_obj\import_obj.py", line 1186, in load
material_libs |= {os.fsdecode(f) for f in filenames_group_by_ext(line.lstrip()7:.strip(), b'.mtl') File "C:\Users\jiro4989\scoop\apps\blender\current\3.1\scripts\addons\io_scene_obj\import_obj.py", line 1186, in <setcomp>
material_libs |= {os.fsdecode(f) for f in filenames_group_by_ext(line.lstrip()7:.strip(), b'.mtl') File "C:\Users\jiro4989\scoop\apps\blender\current\3.1\python\lib\os.py", line 824, in fsdecode
return filename.decode(encoding, errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte
location: <unknown location>:-1
別でエクスポートしたObjファイルではエラーが出てなかったので、エラーが出るファイルとエラーが出ないファイルがあった
原因
どうやらDAZ Studio側でモデルをエクスポートする時に、ファイル名に日本語などのマルチバイト文字が含まれているとBlender側でインポートする時にエラーになるようだった
エラーメッセージを見てるとpythonのutf-8周りがエラーになっていることが分かる Pythonでutf-8と見ると文字コード周りが原因では?となんとなく予想がついた
Pythonで文字コード周りでエラーになることはちょいちょいあるので
試しに、DAZ Studio側で全く同じモデルを1つ用意する
これをObjファイルとしてエクスポートするが、この時以下の2つのファイル名で保存する
nihongo.obj
半角英数字のみを使っているので、1バイト文字しか使っていない
日本語.obj
マルチバイト文字を使っている
モデルデータ自体は全く同じだが、ファイル名だけが異なる
これをBlenderからインポートすると、「nihongo.obj」のインポートは成功するが、「日本語.obj」は失敗する
この時更にハマったのが、ファイル名だけ後から半角英数字のみに変更しても、エラーが解消しないこと
つまり、DAZ Studioからエクスポートする時点で日本語などをファイル名に使うと、Blenderからインポートできない
対処方法
DAZ StudioでObjファイルをエクスポートする時に、ファイル名に日本語などの全角文字、マルチバイト文字を使わない
半角英数字のみを使う
男性.objなら man.obj にする
余談
ファイル名にマルチバイト文字使うとエラーになる事象に久しぶりに遭遇した
令和になっても起きるもんなんだなぁ
ワンチャンこれ自分で直せるかもしれない
Objファイルをエクスポートすると、同じフォルダにmtlファイルも生成される
BlenderからObjファイルをインポートするときのエラーメッセージを見ると、mtlファイルも参照しようとしてるようにみえる
予想だけれど、Objファイルのファイル名をバラしてBasenameを取り出し、mtlファイルを開こうとしてファイルが見つからずにエラーになっているのでは?と考えた