MRが楽しい

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

Blenderで利用可能なpythonスクリプトを作る その24(テクスチャ利用のマテリアルを設定する)

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

テクスチャ利用のマテリアルを設定する

指定のオブジェクトにカラーテクスチャを利用したマテリアルを設定する
material_textureset.py

# bpyインポート
import bpy

# 指定オブジェクトにテクスチャを参照するマテリアルを適用する
# 引数   arg_objectname:指定オブジェクト名
#        arg_applyfiledir:反映画像保存ファイルディレクトリ
#        arg_applyfilename:反映画像保存ファイル名
# 戻り値
def new_material_textureset(
  arg_objectname='Default',
  arg_applyfilepath='C:\\UnityChan\\Models\\UnityChanShader\\Texture',
  arg_applyfilename='NewTexture'):
  # 指定オブジェクトを取得する
  selectob = bpy.context.scene.objects[arg_objectname]
  # 変更オブジェクトをアクティブに変更する
  bpy.context.scene.objects.active=selectob

  # 新規マテリアルを作成する
  new_material=bpy.data.materials.new(arg_applyfilename)
  # マテリアルスロットを追加する
  bpy.ops.object.material_slot_add()
  # 作成したマテリアルスロットに新規マテリアルを設定する
  bpy.context.object.active_material=new_material

  # 新規テクスチャを作成する
  new_texture=bpy.data.textures.new(arg_applyfilename,type='IMAGE')
  # マテリアルにテクスチャスロットを追加する
  new_texture_slot=new_material.texture_slots.add()
  # 作成したテクスチャスロットに新規テクスチャを設定する
  new_texture_slot.texture=new_texture
  
  # 反映画像のファイルパスを取得する
  allpy_filepath=arg_applyfilepath + '\\' + arg_applyfilename + '.png'
  # 反映画像を読み込み
  apply_image=bpy.data.images.load(filepath=allpy_filepath)
  # 作成した新規テクスチャに画像を設定する
  new_texture.image=apply_image

  return


# 関数の実行例
new_material_textureset(
  arg_objectname='BakeTo',
  arg_applyfilepath='D:\\WORK\\Texture',
  arg_applyfilename='BakeTexture')

f:id:bluebirdofoz:20190717085434j:plain

マテリアルスロットの削除

指定のオブジェクトのマテリアルスロットを全て削除する。マテリアルのデータは削除しない。
全ての参照が切れた場合、データ保存でマテリアルが消去されるので注意が必要。
remove_materialslot.py

# bpyインポート
import bpy

# 指定オブジェクトのマテリアルスロットを全て削除する
# ※ スロットの削除のため、マテリアルのデータは削除しない
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def remove_materialslot_object(arg_objectname='Default'):
  # 対象オブジェクトを取得する
  selectob=bpy.context.scene.objects[arg_objectname]
  # マテリアルスロットが全て削除されるまでループ
  for loop_index in range(len(selectob.material_slots)):
    # 先頭のマテリアルスロットを選択状態にする
    selectob.active_material_index=0
    # マテリアルスロットを削除する
    bpy.ops.object.material_slot_remove()
  return


# 関数の実行例
remove_materialslot_object(arg_objectname='BakeTo')

f:id:bluebirdofoz:20190717085445j:plain