代码:

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('动画渲染完成!')

请注意以下几点:

  1. frame_start 和 frame_end 分别代表动画的起始帧和结束帧。
  2. bpy.context.scene.frame_set(frame) 用于将时间轴设置到当前遍历的帧。
  3. 渲染路径中的 {:04d} 表示使用4位数的零填充格式来格式化帧编号。
  4. 这个脚本将对每个顶点的位置都渲染一帧,如果顶点数量很多,这可能会生成非常多的图像。通常在动画渲染中,你不会对每个顶点都进行单独的渲染,而是可能只对关键帧或者特定帧进行渲染。
  5. 如果你的动画非常长,渲染所有帧可能需要相当长的时间和大量的磁盘空间。

确保在运行此脚本之前,Blender项目中的 'renders' 文件夹已经存在,或者更改脚本中的路径以指向一个存在的文件夹。此外,根据你的具体需求,你可能需要对脚本进行进一步的调整。

 图:

 

posted on 2024-04-17 23:54  大话人生  阅读(304)  评论(0编辑  收藏  举报