>
名前指定する場合
(WhiteMaterialから始まる名前のスロットを除去)
GPT-4o mini
Blender 4.1でアクティブコレクション内のすべてのオブジェクトをループし、マテリアルスロットから名前が 'WhiteMaterial' で始まるものを削除するためのスクリプトは以下のようになります。
python
コードをコピー
import bpy
# アクティブコレクションを取得
active_collection = bpy.context.view_layer.active_layer_collection
# アクティブコレクション内のすべてのオブジェクトをループ
for obj in active_collection.collection.objects:
# オブジェクトがメッシュであることを確認
if obj.type == 'MESH':
# マテリアルスロットを逆順でループ(削除するため)
for i in range(len(obj.material_slots) - 1, -1, -1):
# マテリアルスロットの名前を取得
material_slot = obj.material_slots[i]
if material_slot.material and material_slot.material.name.startswith('WhiteMaterial'):
# オブジェクトをアクティブにする
bpy.context.view_layer.objects.active = obj
# マテリアルスロットを削除
bpy.ops.object.material_slot_remove()
このスクリプトをBlenderのスクリプトエディタにコピーして実行すると、アクティブコレクション内のすべてのメッシュオブジェクトのマテリアルスロットから、名前が 'WhiteMaterial' で始まるものが削除されます。注意点として、マテリアルスロットを削除する際には、オブジェクトをアクティブにする必要があるため、その部分も含めています。
空のマテリアルスロット除去
GPT-4o mini
空のマテリアルスロットを削除するスクリプトは以下の通りです。このスクリプトでは、マテリアルスロットが空であるかどうかを確認し、空であれば削除します。
python
コードをコピー
import bpy
# アクティブコレクションを取得
active_collection = bpy.context.view_layer.active_layer_collection
# アクティブコレクション内のすべてのオブジェクトをループ
for obj in active_collection.collection.objects:
# オブジェクトがメッシュであることを確認
if obj.type == 'MESH':
# マテリアルスロットを逆順でループ(削除するため)
for i in range(len(obj.material_slots) - 1, -1, -1):
# マテリアルスロットの取得
material_slot = obj.material_slots[i]
# マテリアルスロットが空であるか確認
if material_slot.material is None:
# オブジェクトをアクティブにする
bpy.context.view_layer.objects.active = obj
# マテリアルスロットを削除
bpy.ops.object.material_slot_remove()
このスクリプトをBlenderのスクリプトエディタにコピーして実行すると、アクティブコレクション内のすべてのメッシュオブジェクトの空のマテリアルスロットが削除されます。空のマテリアルスロットは、material_slot.material が None である場合に該当します。<
GPT-4o miniへの命令文
blender4.1のアクティブコレクション内のすべてのオブジェクトをループしてオブジェクトのマテリアルスロットから 'WhiteMaterial' で始まるものを削除する。マテリアルスロットを削除する命令は次を使う事。bpy.ops.object.material_slot_remove() ただし、bpy.ops.object.material_slot_remove({'active_object': obj})のような引数を書くとエラーが出るので、引数を使わない方法で書いてほしい。ついでに、空のマテリアルスロットを削除するスクリプトに改造したスクリプトも書き出して。
>light<
>dark<
>night-bule<
>vibrant-ink<
>wed<