建模环境
Blender 4.3
成品预览
代码解析
模块导入
import bpy
import bmesh
import math
清空当前场景
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
新建一个光滑的球体
number_of_segments = 8
number_of_rings = 4
bpy.ops.mesh.primitive_uv_sphere_add(
segments = number_of_segments,
ring_count = number_of_rings,
scale=(1.1, 1.1, 1)
)
bpy.ops.object.modifier_add(type='SUBSURF')
bpy.context.object.modifiers["Subdivision"].levels = 2
bpy.ops.object.shade_smooth()
定义蓝色和黄色两种材质
blue_material = bpy.data.materials.new(name="blue")
blue_material.diffuse_color = (0, 0, 1, 1)
blue_material.metallic = 0
blue_material.roughness = 0.5
yellow_material = bpy.data.materials.new(name="yellow")
yellow_material.diffuse_color = (1, 1, 0, 1)
yellow_material.metallic = 0
yellow_material.roughness = 0.8
切换到编辑模式并添加两种材质
bpy.ops.object.mode_set(mode='EDIT')
obj = bpy.context.edit_object
obj.data.materials.clear()
obj.data.materials.append(blue_material)
obj.data.materials.append(yellow_material)
计算每个面的中心点在x-y面上的角度位置以确定使用的材质
mesh = obj.data
bm = bmesh.from_edit_mesh(mesh)
seg_width = 2 * math.pi / number_of_segments
for face in bm.faces:
center = face.calc_center_median()
angle = math.atan2(center.y, center.x)
if angle < 0:
angle += math.pi
segment_index = math.floor(angle / seg_width)
face.material_index = segment_index % 2
更新模型,返回物体模式
bmesh.update_edit_mesh(mesh)
bpy.ops.object.mode_set(mode='OBJECT')