MRが楽しい

MRやVRについて学習したことを書き残す

Blenderで利用可能なpythonスクリプトを作る その18(UVマップの作成と削除)

本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com

UVマップの作成

指定オブジェクトにスマートUV展開を実行してUVマップを作成します。
smart_project関数の引数を変更することでスマートUV展開のルールを変更できます。
・uvmap_edit.py

# bpyインポート
import bpy

# スマートUV展開を実行する(デフォルト設定)
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def uv_smart_project(arg_objectname='Default'):
   # 他のオブジェクトに操作を適用しないよう全てのオブジェクトを走査する
   for ob in bpy.context.scene.objects:
     # 非選択状態に設定する
     ob.select=False
   # 指定オブジェクトを取得する
   selectob = bpy.data.objects[arg_objectname]
   # 変更オブジェクトをアクティブに変更する
   bpy.context.scene.objects.active = selectob
   # 編集モードに移行する
   bpy.ops.object.mode_set(mode='EDIT', toggle=False)
   # 頂点を全選択した状態とする
   bpy.ops.mesh.select_all(action='SELECT')
   # デフォルト設定のスマートUV展開を実行する
   # 角度制限:66,島の余白:0,エリアウェイト:0,アスペクト比の補正:True,UV境界に合わせる:True
   bpy.ops.uv.smart_project(angle_limit=66, island_margin=0, 
     user_area_weight=0, use_aspect=True, stretch_to_bounds=True)
   # オブジェクトモードに移行する
   bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
   return


# 関数の実行例
uv_smart_project('Sphere')

f:id:bluebirdofoz:20190625072755j:plain

UVマップの削除

指定オブジェクトが保持する全てのUVマップを削除します。
UVマップはオブジェクトではなくメッシュデータに紐づいています。
このため、同じメッシュデータを参照する全てのオブジェクトが影響を受けます。
・uvmap_edit.py

# bpyインポート
import bpy

# 指定オブジェクトのUVマップを全削除する
# ※ メッシュデータのUVマップを削除するため、
#    同じメッシュデータを参照するオブジェクトは影響を受ける
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def delete_UVmap_mesh(arg_objectname='Default'):
  # 対象オブジェクトを取得する
  selectob=bpy.context.scene.objects[arg_objectname]
  # オブジェクトがメッシュであるか確認する
  if selectob.type == 'MESH':
    # データ名を取得する
    dataname=selectob.data.name
    # オブジェクトが保持するメッシュを取得する
    targetmesh=bpy.data.meshes[dataname]    
    # UVマップが全て削除されるまでループ
    for loop_index in range(len(targetmesh.uv_textures)):
      # 先頭のUVマップを選択状態にする
      targetmesh.uv_textures.active_index=0
      # UVマップを削除する
      bpy.ops.mesh.uv_texture_remove()
  return


# 関数の実行例
delete_UVmap_mesh('Sphere')

f:id:bluebirdofoz:20190625072804j:plain