如何在Blender中为指定名称的多对象按规则随机分配材质
实现方案
你可以通过定义「对象名称-材质前缀」的映射字典来实现需求,以下是可直接使用的代码:
import random import bpy # 在这里定义对象名称到材质前缀的映射,可自行增删修改 obj_prefix_map = { "cube": "x", "circle": "Y" } for obj_name, mat_prefix in obj_prefix_map.items(): # 检查场景中是否存在指定名称的对象,不存在则跳过 if obj_name not in bpy.data.objects: continue target_obj = bpy.data.objects[obj_name] # 收集对应前缀的材质作为候选池 candidate_mats = [] for mat in bpy.data.materials: if mat.name.startswith(mat_prefix): candidate_mats.append(mat) # 候选池不为空时随机分配材质 if candidate_mats: target_obj.active_material = random.choice(candidate_mats)
使用说明
- 首先修改代码中的
obj_prefix_map字典:字典的键为场景中需要修改材质的对象的准确名称,值为该对象对应候选材质池的名称前缀,可自由添加多条映射规则。 - 修改完成后,在Blender的「脚本」工作区运行该代码即可。
- 代码内置了异常兼容:如果指定名称的对象不存在、或者对应前缀没有匹配的材质,会自动跳过该条规则,不会抛出报错中断运行。
内容的提问来源于stack exchange,提问作者Ashy
相关产品推荐
相关产品推荐

