如何在Blender中生成3D转盘序列(球面多视角渲染图片)
在3D球面上布局62个点位并批量朝向球心渲染图片的方案
一、手动关键帧自动化渲染(无代码基础适用)
1. 创建球心参考与初始拍摄点位
- 添加UV球(
Shift+A→ 网格 → UV球),调整半径作为球心基准体 - 添加空物体(
Shift+A→ 空物体 → 轴),作为首个拍摄点位 - 选中空物体,按
Ctrl+Alt+0将相机对齐到该空物体视角(需提前开启侧边栏视图标签的「锁定相机到视图」)
2. 批量生成球面网格点位
- 选中UV球进入编辑模式,手动选择62个顶点(或用「选择→随机选择」调整数量,精准控制可配合顶点组)
- 按
Shift+S→ 光标到选中项,选中初始空物体后按Ctrl+Shift+Alt+C→ 复制到选中顶点,自动生成62个对应顶点位置的空物体
3. 设置关键帧批量渲染
- 选中相机,在属性面板的约束选项中添加「跟踪约束」,目标选择第一个空物体,跟踪轴设为
-Z(确保相机朝向球心) - 移动到第1帧,选中跟踪约束的「目标」选项,按
I插入关键帧 - 依次切换到第2至62帧,修改跟踪约束的目标为对应空物体,每帧插入关键帧
- 在渲染属性面板设置输出路径、图片格式(推荐PNG),执行「渲染动画」即可批量导出每帧对应点位的图片
二、Python脚本批量处理(灵活修改布局)
以下脚本可直接在Blender的脚本编辑器中运行,支持自定义点位数量、分布与渲染参数:
import bpy import mathutils # 清除默认场景物体(按需保留可注释此行) bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete() # 创建球心参考球,可修改radius调整球面大小 bpy.ops.mesh.primitive_uv_sphere_add(radius=5, location=(0, 0, 0)) sphere = bpy.context.active_object # 生成62个球面网格点位(经纬度分布,可替换为其他布局逻辑) points = [] # 调整经纬度步数以接近62个点,最后截断到62 lat_steps = 8 lon_steps = 8 for lat_idx in range(lat_steps): # 计算纬度(从-90°到90°) lat_rad = mathutils.math.radians(-90 + (180 / (lat_steps - 1)) * lat_idx) for lon_idx in range(lon_steps): if len(points) >= 62: break # 计算经度(从0°到360°) lon_rad = mathutils.math.radians((360 / lon_steps) * lon_idx) # 转换为笛卡尔坐标 x = sphere.radius * mathutils.math.cos(lat_rad) * mathutils.math.cos(lon_rad) y = sphere.radius * mathutils.math.cos(lat_rad) * mathutils.math.sin(lon_rad) z = sphere.radius * mathutils.math.sin(lat_rad) points.append((x, y, z)) if len(points) >= 62: break # 创建相机并设置为场景活跃相机 bpy.ops.object.camera_add(location=(0, 0, 10)) camera = bpy.context.active_object bpy.context.scene.camera = camera # 配置渲染参数 scene = bpy.context.scene scene.render.image_settings.file_format = 'PNG' # 输出路径://表示相对当前blend文件的目录,需提前创建render_output文件夹 scene.render.filepath = "//render_output/frame_" # 批量渲染每个点位 for idx, point in enumerate(points): # 移动相机到目标点位 camera.location = point # 计算朝向球心的旋转角度 target = mathutils.Vector((0, 0, 0)) direction = target - camera.location # 转换为欧拉角设置相机旋转 rot_quat = direction.to_track_quat('-Z', 'Y') camera.rotation_euler = rot_quat.to_euler() # 设置当前帧编号 scene.frame_set(idx + 1) # 渲染并保存图片 scene.render.filepath = f"//render_output/frame_{idx:03d}.png" bpy.ops.render.render(write_still=True) print(f"渲染完成,共生成{len(points)}张图片")
脚本自定义说明
- 调整点位布局:替换
points生成逻辑即可,比如改用正二十面体细分后的顶点(更均匀的球面分布),或直接传入自定义坐标列表 - 修改输出参数:调整
scene.render.image_settings可修改图片格式、压缩率;修改scene.render.filepath可更改输出路径 - 保留场景物体:注释掉清除默认物体的代码,即可在现有场景基础上执行渲染
注意事项
- 手动方法适合快速验证效果,脚本方案适合需要反复调整点位布局的场景
- 渲染前确保场景中已添加需要展示的3D物体(脚本默认清除场景,需自行添加或在脚本中加入加载逻辑)
- 若要生成「3D转球」动画,可将渲染后的图片导入视频编辑软件,设置合适帧速率后导出视频
内容的提问来源于stack exchange,提问作者fiqcerzvgm
相关产品推荐
相关产品推荐

