You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import bpy
# 清除场景中所有对象
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
# 循环创建10x10的ico球体并赋予颜色材质
for i in range(10):
for j in range(10):
# 添加ico球体,设置半径和位置
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.5, location=(i, j, 0))
# 获取当前激活的小球对象
icosphere = bpy.context.active_object
# 新建材质数据,命名为mat_i_j
mat_name = f"mat_{i}_{j}"
mat = bpy.data.materials.new(name=mat_name)
# 启用材质的节点树(Blender新建材质默认关闭节点树)
mat.use_nodes = True
# 获取材质的Principled BSDF节点
principled_bsdf = mat.node_tree.nodes["Principled BSDF"]
# 根据i和j计算颜色(红随i变化,绿随j变化,蓝为0)
red = i / 10.0 # 用10.0确保浮点运算,避免整数除法
green = j / 10.0
blue = 0.0
alpha = 1.0
color = (red, green, blue, alpha)
# 设置Principled BSDF的基础颜色
principled_bsdf.inputs['Base Color'].default_value = color
# 将材质赋予小球对象(先清空原有材质,再添加)
if icosphere.data.materials:
icosphere.data.materials[0] = mat
else:
icosphere.data.materials.append(mat)
渐变效果
随机的球
import bpy
import random # 导入随机数模块
# 清除场景中所有对象
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
# 循环创建10x10的ico球体并赋予随机颜色材质
for i in range(10):
for j in range(10):
# 添加ico球体,设置半径和位置
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.5, location=(i, j, 0))
# 获取当前激活的小球对象
icosphere = bpy.context.active_object
# 新建材质数据,命名为mat_i_j
mat_name = f"mat_{i}_{j}"
mat = bpy.data.materials.new(name=mat_name)
# 启用材质的节点树(Blender新建材质默认关闭节点树)
mat.use_nodes = True
# 获取材质的Principled BSDF节点
principled_bsdf = mat.node_tree.nodes["Principled BSDF"]
# 生成随机的RGB颜色(范围0.0到1.0),alpha固定为1.0
red = random.random() # 随机生成0.0~1.0的浮点数
green = random.random()
blue = random.random()
alpha = 1.0
color = (red, green, blue, alpha)
# 设置Principled BSDF的基础颜色
principled_bsdf.inputs['Base Color'].default_value = color
# 将材质赋予小球对象(先清空原有材质,再添加)
if icosphere.data.materials:
icosphere.data.materials[0] = mat
else:
icosphere.data.materials.append(mat)
效果
如何查看目前所有的颜色呢?
打开大纲视图
找到blender文件
所有的Materials都在这里了
能用python遍历吗?
遍历颜色
import bpy
for material in bpy.data.materials:
print(material)
出现了好多种颜色
为什么?
删除颜色
每次运行都添加100种材质
如何删除材质?
删除材质
import bpy
for material in bpy.data.materials:
bpy.data.materials.remove(material)
先删材质
再添加材质
import bpy
# 清除场景中所有对象
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
# 循环创建10x10的ico球体并赋予颜色材质
for i in range(10):
for j in range(10):
# 添加ico球体,设置半径和位置
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.5, location=(i, j, 0))
# 获取当前激活的小球对象
icosphere = bpy.context.active_object
# 新建材质数据,命名为mat_i_j
mat_name = f"mat_{i}_{j}"
mat = bpy.data.materials.new(name=mat_name)
# 启用材质的节点树(Blender新建材质默认关闭节点树)
mat.use_nodes = True
# 获取材质的Principled BSDF节点
principled_bsdf = mat.node_tree.nodes["Principled BSDF"]
# 根据i和j计算颜色(红随i变化,绿随j变化,蓝为0)
red = i / 10.0 # 用10.0确保浮点运算,避免整数除法
green = j / 10.0
blue = 0.0
alpha = 1.0
color = (red, green, blue, alpha)
# 设置Principled BSDF的基础颜色
principled_bsdf.inputs['Base Color'].default_value = color
# 将材质赋予小球对象(先清空原有材质,再添加)
if icosphere.data.materials:
icosphere.data.materials[0] = mat
else:
icosphere.data.materials.append(mat)
for material in bpy.data.materials:
print(material)
后添加
总共100种材质
可以看看材质的详细信息吗?
遍历材质细节
import bpy
for mat in bpy.data.materials:
for v in mat.node_tree.nodes["Principled BSDF"].inputs['Base Color'].default_value :
print(v, end=",")
print()
输出结果
除了材质之外
对象也可以这样控制吗?
总结 🤔
这次我们制作了
渐变颜色的球
随机颜色的球
import bpy
for material in bpy.data.materials:
bpy.data.materials.remove(material)