代码:
import bpy # 定义要使用的物体 placement_ob = bpy.context.scene.objects['Sphere'] # 'Sphere' 是要渲染的物体名称 camera_ob = bpy.context.scene.objects['Camera'] # 'Camera' 是摄像机的名称 render = bpy.context.scene.render # 获取渲染场景的引用 # 设置渲染路径 render_path = 'renders\\frame-{:04d}-{:03d}' # 使用反斜杠作为Windows路径分隔符,使用4位数表示帧编号 # 获取动画的起始和结束帧 start_frame = bpy.context.scene.frame_start end_frame = bpy.context.scene.frame_end # 遍历动画的所有帧 for frame in range(start_frame, end_frame + 1): bpy.context.scene.frame_set(frame) # 设置当前帧 for index, vert in enumerate(placement_ob.data.vertices): # 应用物体的世界矩阵到顶点的局部坐标以获取世界坐标 vcoord = placement_ob.matrix_world @ vert.co # 移动摄像机到顶点的世界位置 camera_ob.location = vcoord # 设置当前帧的渲染文件路径 render.filepath = render_path.format(frame,index) #将帧数与点的索引值作为渲染图片的名字 # 渲染当前帧 bpy.ops.render.render(write_still=True) # 确保渲染完一帧后,将摄像机移回原位,或者根据需要进行其他操作 print('动画渲染完成!')
请注意以下几点:
frame_start
和frame_end
分别代表动画的起始帧和结束帧。bpy.context.scene.frame_set(frame)
用于将时间轴设置到当前遍历的帧。- 渲染路径中的
{:04d}
表示使用4位数的零填充格式来格式化帧编号。 - 这个脚本将对每个顶点的位置都渲染一帧,如果顶点数量很多,这可能会生成非常多的图像。通常在动画渲染中,你不会对每个顶点都进行单独的渲染,而是可能只对关键帧或者特定帧进行渲染。
- 如果你的动画非常长,渲染所有帧可能需要相当长的时间和大量的磁盘空间。
确保在运行此脚本之前,Blender项目中的 'renders' 文件夹已经存在,或者更改脚本中的路径以指向一个存在的文件夹。此外,根据你的具体需求,你可能需要对脚本进行进一步的调整。
图: