出场演员 —— 自由高达

细分表面(Subdivision Surface)
效果图
- 细分前

- 细分后

Python 代码和注释
import bpy
def subSurf(level = 2):bpy.ops.object.modifier_add(type='SUBSURF') # 添加细分修改器bpy.context.object.modifiers["Subdivision"].levels = level # 设置修改器细分级别bpy.ops.mesh.primitive_monkey_add()subSurf()
以上代码的效果相当于手动添加了以下修改器,并设置了 Levels Viewport
为 2
阵列(Array)
效果图

Python 代码与注释
import bpy
def array(num = 5,o_x = 2,o_y = 0,o_z = 0):bpy.ops.object.modifier_add(type='ARRAY') # 添加阵列修改器array = bpy.context.object.modifiers["Array"] # 设置修改器的参数array.count = num # 阵列的个数# 分别在 x/y/z 方向上进行偏移array.relative_offset_displace[0] = o_xarray.relative_offset_displace[1] = o_yarray.relative_offset_displace[2] = o_z
bpy.ops.mesh.primitive_cube_add()
array(o_x = 0.,o_y = 0.25,o_z = 0.25)
以上代码的效果相当于设置了如下修改器,并设置了 Count
为 5 ,Factor X
、 Y
、 Z
分别为 0., 0.25, 0.25

倒角(Bevel)
效果图
- 倒角前
- 倒角后
Python 代码与注释
import bpy
def bevel(_amount = 0.3,_segments = 1):bpy.ops.object.modifier_add(type='BEVEL') # 添加倒角修改器bevel = bpy.context.object.modifiers["Bevel"] # 设置倒角参数bevel.width = _amountbevel.segments = _segments
bpy.ops.mesh.primitive_ico_sphere_add()
bevel()
以上代码的效果相当于设置了如下修改器,并设置了 Amount
为 0.3,Segments
为 1

创建过程(Build)
效果图

Python 代码与注释
import bpy
def build(f):bpy.ops.object.modifier_add(type='BUILD') # 添加 Build 修改器build = bpy.context.object.modifiers["Build"] # 设置修改器参数build.frame_start = f # 起始帧build.use_random_order = False # 不随机build.seed = 0
bpy.ops.mesh.primitive_monkey_add()
build(f = 0)
相当于手动设置了如下修改器(默认长度 100)

部分减面(Decimate)
效果图
- 减面前
import bpy
def decimate(limit_num):bpy.ops.object.modifier_add(type='DECIMATE') # 添加修改器decim = bpy.context.object.modifiers["Decimate"] # 设置该修改器相应参数decim.decimate_type = 'DISSOLVE'decim.delimit = {'NORMAL'}decim.angle_limit = limit_num
bpy.ops.mesh.primitive_monkey_add()
decimate(limit_num = 0.8)
相当于手动设置了如下修改器

结合下图可见,面数从原来得 8700 面减少到了 291 面

- 减面前网格线
- 减面后网格线
镜像(Mirror)
效果图
- 在立方体的 X 轴方向两侧进行镜像
Python 代码与注释
import bpy
def mirror(obj):bpy.ops.object.modifier_add(type='MIRROR') # 添加修改器mir = bpy.context.object.modifiers["Mirror"] # 设置修改器参数mir.use_axis[0] = True # 以 X 轴为方向mir.mirror_object = bpy.data.objects[obj]
bpy.ops.mesh.primitive_monkey_add()
bpy.ops.mesh.primitive_cube_add(location = (3,0,0))
bpy.context.view_layer.objects.active = bpy.data.objects["Suzanne"]
mirror("Cube")
以上代码相当于手动添加了如下修改器

螺旋(Screw)
效果图

Python 代码与注释
import bpy
# 细分修改器
def subSurf(level = 3):bpy.ops.object.modifier_add(type='SUBSURF')bpy.context.object.modifiers["Subdivision"].levels = level
# 螺旋修改器
def screw(angle = 6.28,screw = 3,itr = 1,ax = 'X'):bpy.ops.object.modifier_add(type='SCREW') # 添加修改器scr = bpy.context.object.modifiers["Screw"] # 设置修改器参数scr.angle = anglescr.screw_offset = screwscr.iterations = itrscr.axis = ax # 绕指定轴进行螺旋卷绕
bpy.ops.mesh.primitive_grid_add()
screw(itr = 2)
subSurf()
以上代码相当于手动添加了如下修改器

实体化(Solidify)
效果图
- 实体化前

- 实体化后

Python 代码与注释
import bpy
def solid(thick = -0.15,ofs = -1):bpy.ops.object.modifier_add(type='SOLIDIFY') # 添加修改器solid = bpy.context.object.modifiers["Solidify"] # 设置修改器参数solid.thickness = thicksolid.offset = ofs
bpy.ops.mesh.primitive_monkey_add()
solid()
以上代码相当于手动添加了如下修改器

收缩包装(ShrinkWrap)
效果图
其实这效果更像是 “包装充气膨胀”

Python 代码与注释
import bpy
# 表面细分
def subSurf(level = 1):bpy.ops.object.modifier_add(type='SUBSURF')bpy.context.object.modifiers["Subdivision"].levels = level
# 收缩包装
def shrinkWrapAnim(obj):bpy.ops.object.modifier_add(type='SHRINKWRAP') # 添加修改器bpy.context.object.modifiers["Shrinkwrap"].target = bpy.data.objects[obj] # 设置修改器的目标参数bpy.ops.object.modifier_apply_as_shapekey(keep_modifier=False, modifier="Shrinkwrap") # 应用修改器(的形态键)
# 插入形态键关键帧
def shapeKeyInsert(frame_num = 10,shape_value = 1):obj = bpy.context.objectobj.active_shape_key_index = 1for i in range(0,2):obj.active_shape_key.value = shape_value # 记录形态键值obj.active_shape_key.keyframe_insert(data_path = "value",frame = frame_num) # 插入关键帧frame_num += 50 # 更新帧数shape_value -= 1 # 更新形态键值
s = 0.1
bpy.context.scene.frame_set(0)
bpy.context.scene.frame_end = 50 # 总共 50 帧的动画
bpy.ops.mesh.primitive_cube_add(location=(0,0,0), scale = (s,s,s))
bpy.ops.mesh.primitive_monkey_add()
subSurf()
shrinkWrapAnim("Cube") # 指定目标为 Cube
shapeKeyInsert()
以上代码相当于应用了以下修改器(但由于代码中 “应用” 了它,所以你是看不到它的)

但是可以看到其对应生成的动画(Timeline)关键帧,如下所示



(完)
plv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image?" style=“margin: auto” />

最后
最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。
有需要的小伙伴,可以点击下方卡片领取,无偿分享