Blender でエクスポートした 3D モデルを、Substance 3D Painter にインポートする。この時、モディファイアを全て適用してからエクスポートすると不具合が生じない。
しかし、UV 展開をやり直さざるを得なくなってインポートをやり直す度に、全てのオブジェクトに対してモディファイアを適用する作業を実施するのは面倒である。
次のスクリプトを利用して、全てのオブジェクトで ARMATURE を除く全てのモディファイアを一斉に適用する。
スクリプト
import bpy
def apply_modifiers(obj):
shape_keys = obj.data.shape_keys
if shape_keys is not None:
for shape_key in reversed(obj.data.shape_keys.key_blocks):
obj.shape_key_remove(shape_key)
for modifier in obj.modifiers:
if modifier.type != 'ARMATURE':
try:
bpy.ops.object.modifier_apply(modifier=modifier.name)
except RuntimeError:
obj.modifiers.remove(modifier)
for obj in bpy.context.view_layer.objects:
if('.tmp' in obj.name):
continue
if obj.type == 'MESH':
bpy.context.view_layer.objects.active = obj
apply_modifiers(obj)
手順
- ワークスペースを Scripting に変更する
- モディファイアを適用したいオブジェクト群の親オブジェクトを選択する
- 上記のスクリプトをコピペする
- スクリプトを実行する

以上