通过Blender python渲染和保存图像
我正在尝试通过blender中的python脚本渲染和保存多个图像。我知道如何通过Blender GUI渲染和保存图像,但我想通过脚本来完成这一切,因为我使用的是一组嵌套循环,需要保存多个图像。我能够渲染图像,并且我猜在输出成功的情况下保存图像。但我不确定它保存到哪里,当我试图编辑文件路径时,它会给我上下文不正确的错误 类似这样:通过Blender python渲染和保存图像,python,render,save,blender,Python,Render,Save,Blender,我正在尝试通过blender中的python脚本渲染和保存多个图像。我知道如何通过Blender GUI渲染和保存图像,但我想通过脚本来完成这一切,因为我使用的是一组嵌套循环,需要保存多个图像。我能够渲染图像,并且我猜在输出成功的情况下保存图像。但我不确定它保存到哪里,当我试图编辑文件路径时,它会给我上下文不正确的错误 类似这样: import bpy bpy.context.scene.render.filepath = 'pathToOutputImage' bpy.context.sce
import bpy
bpy.context.scene.render.filepath = 'pathToOutputImage'
bpy.context.scene.render.resolution_x = w #perhaps set resolution in code
bpy.context.scene.render.resolution_y = h
bpy.ops.render.render()
下面的代码创建了一个“VR全景”(一系列对象的图片,从周围的不同角度)
我最终得到了这个算法:
空的
对象,并将其位置设置为主体的中心,旋转为标识(0,0,0
)/Users/myusername/pictures/VR
目录下的对象周围获得大量图片(由旋转步骤定义):
def rotate_和_render(输出_dir,输出_file_pattern_string='render%d.jpg',rotation_steps=32,rotation_angle=360.0,subject=bpy.context.object):
导入操作系统
原始旋转=主题旋转
对于步进范围(0,旋转步数):
主题。旋转度=弧度(步数*(旋转角度/旋转步数))
bpy.context.scene.render.filepath=os.path.join(输出\目录,(输出\文件\模式\字符串%step))
bpy.ops.render.render(write\u still=True)
subject.rotation\u euler=原始旋转
旋转和渲染('/Users/myusername/Pictures/VR','render%d.jpg')
必须选择要渲染的对象。或者,您可以使用在场景中查找对象,并将其作为主题
参数传递给函数:
rotate_和_render('/Users/myusername/Pictures/VR',render%d.jpg',subject=bpy.data.objects[“Cube”])
您必须执行以下操作。for
循环后第二行中的i
是文件循环的循环索引
我已经验证了它在控制台中运行时以及在命令行中运行时是有效的。渲染一个文件后,不要忘记删除对象。(此处未给出remove命令,因为它不是泛型命令。如果该对象具有链接,则该命令中将需要一些特定参数)
在我的例子中,如果没有“write_still=True”作为“render()”函数的参数,blender就不会创建图像。想知道为什么write_still=True
是如此重要,以至于在没有它的情况下无法保存图像。@我想这是因为blender还有一个渲染预览图像的选项(很像按F12键时)。因此,实际上,将渲染保存为静态图像是可选的。过了一段时间,我几乎可以完成这项工作。只有一个问题:所有生成的图像都是相同的:-)。看起来“origin.rotation\u euler[2]=弧度(step*(rotation\u angle/rotation\u steps))”这一行什么也没做,这在混合器堆栈交换中会更好。
for area in bpy.context.screen.areas:
if area.type == 'VIEW_3D':
area.spaces[0].viewport_shade = 'RENDERED'
bpy.context.scene.render.image_settings.file_format='JPEG'
bpy.context.scene.render.filepath = ".pic%0.2d.jpg"%i
bpy.ops.render.render(use_viewport = True, write_still=True)