Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Blender python渲染和保存图像_Python_Render_Save_Blender - Fatal编程技术网

通过Blender python渲染和保存图像

通过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

我正在尝试通过blender中的python脚本渲染和保存多个图像。我知道如何通过Blender GUI渲染和保存图像,但我想通过脚本来完成这一切,因为我使用的是一组嵌套循环,需要保存多个图像。我能够渲染图像,并且我猜在输出成功的情况下保存图像。但我不确定它保存到哪里,当我试图编辑文件路径时,它会给我上下文不正确的错误

类似这样:

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全景”(一系列对象的图片,从周围的不同角度)

我最终得到了这个算法:

  • 创建或加载要拍摄的对象(对象)
  • 缩放它并添加一些漂亮的照明(以便从您想要的方向可以看到对象);可以通过渲染场景(使用F12键)来检查照明
  • 创建一个
    空的
    对象,并将其位置设置为主体的中心,旋转为标识(
    0,0,0
  • 将相机视图设置为起始位置(再次使用渲染检查)
  • 打开交互式Python shell(Shift+F4)
  • 粘贴并运行脚本
  • 您将在
    /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)