本日は Blender の技術調査枠です。
Blender2.9で利用可能なpythonスクリプトを作ります。
UVマップレイヤーのリネーム
指定オブジェクトのレンダリング時に有効なUVマップレイヤーの名前を変更します。
・Script_rename_uvlayer_renderactive.py
# bpyインポート import bpy # 指定オブジェクトのレンダリング時に有効なUVマップレイヤーの名前を変更する def rename_uvlayer_renderactive(arg_object:bpy.types.Object, arg_rename:str) -> bpy.types.MeshUVLoopLayer: """指定オブジェクトのレンダリング時に有効なUVマップレイヤーの名前を変更する Args: arg_object (bpy.types.Object): 指定オブジェクト arg_rename (str): 変更名 Returns: bpy.types.MeshUVLoopLayer: 有効なUVマップレイヤーの参照 """ # 指定オブジェクトがメッシュオブジェクトか確認する if arg_object.type != 'MESH': # メッシュオブジェクトでない場合は処理しない return False # 対象オブジェクトのメッシュデータを取得する # メッシュデータ操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.Mesh.html) meshdata = arg_object.data # UVマップレイヤーのリストを取得する # UVマップレイヤーのリスト操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.UVLoopLayers.html) uv_layers = meshdata.uv_layers # レンダー設定がアクティブなUVマップを取得する active_uvlayer = None # UVマップレイヤーを全て走査する # 削除処理を行うので逆順に要素を追う for num in range(len(uv_layers))[::-1]: # UVマップレイヤーを取得する # UVマップレイヤー操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.MeshUVLoopLayer.html) uv_layer = uv_layers[num] # レンダー設定の有効無効を判定する if uv_layer.active_render: # レンダー設定がアクティブなUVマップの名前を変更する uv_layer.name = arg_rename # レンダー設定がアクティブなUVマップを取得する active_uvlayer = uv_layer return active_uvlayer # 関数の実行例 target_obj = bpy.data.objects.get("Cube") renderactive_uvlayer = rename_uvlayer_renderactive(arg_object=target_obj, arg_rename="ActiveUVMap") print("render active = " + renderactive_uvlayer.name)
・実行前
・実行後
UVマップレイヤーの削除
指定オブジェクトのレンダリング時に有効なUVマップレイヤー以外を削除します。
・Script_clean_uvlayer_renderactive.py
# bpyインポート import bpy # 指定オブジェクトのレンダリング時に有効なUVマップレイヤー以外を削除する def clean_uvlayer_renderactive(arg_object:bpy.types.Object) -> bpy.types.MeshUVLoopLayer: """指定オブジェクトのレンダリング時に有効なUVマップレイヤー以外を削除する Args: arg_object (bpy.types.Object): 指定オブジェクト Returns: bpy.types.MeshUVLoopLayer: 有効なUVマップレイヤーの参照 """ # 指定オブジェクトがメッシュオブジェクトか確認する if arg_object.type != 'MESH': # メッシュオブジェクトでない場合は処理しない return False # 対象オブジェクトのメッシュデータを取得する # メッシュデータ操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.Mesh.html) meshdata = arg_object.data # UVマップレイヤーのリストを取得する # UVマップレイヤーのリスト操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.UVLoopLayers.html) uv_layers = meshdata.uv_layers # レンダー設定がアクティブなUVマップを取得する active_uvlayer = None # UVマップレイヤーを全て走査する # 削除処理を行うので逆順に要素を追う for num in range(len(uv_layers))[::-1]: # UVマップレイヤーを取得する # UVマップレイヤー操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.MeshUVLoopLayer.html) uv_layer = uv_layers[num] # レンダー設定の有効無効を判定する if uv_layer.active_render: # レンダー設定がアクティブなUVマップを取得する active_uvlayer = uv_layer else: # アクティブでないUVマップは削除する uv_layers.remove(uv_layer) return active_uvlayer # 関数の実行例 target_obj = bpy.data.objects.get("Cube") renderactive_uvlayer = clean_uvlayer_renderactive(arg_object=target_obj) print("render active = " + renderactive_uvlayer.name)
・実行前
・実行後