本日は Blender の技術調査枠です。
Blender2.8で利用可能なpythonスクリプトを作ります。
レンダー設定がアクティブなUVマップレイヤーの参照を取得する
レンダー設定がアクティブなUVマップレイヤーの参照を取得します。
オブジェクトのレンダリング実行時にはこのレンダー設定がアクティブなUVマップレイヤーが利用されます。
・get_uvlayer_renderactive.py
# bpyインポート import bpy # レンダリング時に有効なUVマップレイヤーを取得する def get_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 uv_layer in uv_layers: # レンダー設定の有効無効を判定する # UVマップレイヤー操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.MeshUVLoopLayer.html) if uv_layer.active_render: # レンダー設定がアクティブなUVマップを取得する active_uvlayer = uv_layer return active_uvlayer # 関数の実行例 target_obj = bpy.data.objects.get("Cube") renderactive_uvlayer = get_uvlayer_renderactive(arg_object=target_obj) print("render active = " + renderactive_uvlayer.name)
指定のUVマップレイヤーのレンダー設定をアクティブに変更します
指定のUVマップレイヤーのレンダー設定をアクティブに変更します
オブジェクトのレンダリング実行時にはこのレンダー設定がアクティブなUVマップレイヤーが利用されます。
・set_uvlayer_renderactive.py
# bpyインポート import bpy # 指定のオブジェクトの指定UVマップレイヤーのレンダー設定をアクティブにする def set_uvlayer_renderactive(arg_object:bpy.types.Object, arg_uvlayername:str) -> bpy.types.MeshUVLoopLayer: """指定のオブジェクトの指定UVマップレイヤーのレンダー設定をアクティブにする Args: arg_object (bpy.types.Object): 指定オブジェクト arg_uvlayername (str): 指定UVマップレイヤー名 Returns: bpy.types.MeshUVLoopLayer: UVマップレイヤーの参照 """ # 指定オブジェクトが存在するか確認する if arg_object == None: # 指定オブジェクトが存在しない場合は処理しない return None # オブジェクトがメッシュであるか確認する if arg_object.type != 'MESH': # 指定オブジェクトがメッシュでない場合は処理しない return None # 対象オブジェクトのメッシュデータを取得する # メッシュデータ操作のマニュアル # (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マップレイヤーを取得する # (get関数は対象が存在しない場合 None が返る) target_uvlayer = uv_layers.get(arg_uvlayername) # 指定UVマップレイヤーが存在するか確認する if target_uvlayer == None: # 指定UVマップレイヤーが存在しない場合は処理しない return None # レンダー設定がアクティブなUVマップを取得する active_uvlayer = None # UVマップレイヤーを走査する for uv_layer in uv_layers: # 指定のUVマップレイヤーか確認する # UVマップレイヤー操作のマニュアル # (https://docs.blender.org/api/current/bpy.types.MeshUVLoopLayer.html) if uv_layer == target_uvlayer: # 指定のUVマップレイヤーであればレンダー設定をアクティブにする uv_layer.active_render = True # レンダー設定がアクティブなUVマップを取得する active_uvlayer = uv_layer else: # 指定のUVマップレイヤーでなければレンダー設定を非アクティブにする uv_layer.active_render = False return active_uvlayer # 関数の実行例 target_obj = bpy.data.objects.get("Cube") renderactive_uvlayer = set_uvlayer_renderactive( arg_object=target_obj, arg_uvlayername="UVMap.002" ) print("render active = " + renderactive_uvlayer.name)