全てのオブジェクトで全てのモディファイアを一斉に適用する

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)

手順

  1. ワークスペースを Scripting に変更する
  2. モディファイアを適用したいオブジェクト群の親オブジェクトを選択する
  3. 上記のスクリプトをコピペする
  4. スクリプトを実行する

以上

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です