Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
带有命令行混合器参数的Python脚本_Python_Batch File_Rendering_Blender 2.50 - Fatal编程技术网

带有命令行混合器参数的Python脚本

带有命令行混合器参数的Python脚本,python,batch-file,rendering,blender-2.50,Python,Batch File,Rendering,Blender 2.50,我不熟悉blender和python。我有一个混合器模型(.blend),我想批量渲染为多个图像,为每个图像提供一些属性 我用这些参数编写了一个python脚本,比如: import bpy pi = 3.14159265 fov = 50 scene = bpy.data.scenes["Scene"] # Set render resolution scene.render.resolution_x = 480 scene.render.resolution_y = 359 # Se

我不熟悉blender和python。我有一个混合器模型(.blend),我想批量渲染为多个图像,为每个图像提供一些属性

我用这些参数编写了一个python脚本,比如:

import bpy

pi = 3.14159265
fov = 50

scene = bpy.data.scenes["Scene"]

# Set render resolution
scene.render.resolution_x = 480
scene.render.resolution_y = 359

# Set camera fov in degrees
scene.camera.data.angle = fov*(pi/180.0)

# Set camera rotation in euler angles
scene.camera.rotation_mode = 'XYZ'
scene.camera.rotation_euler[0] = 0.0*(pi/180.0)
scene.camera.rotation_euler[1] = 0.0*(pi/180.0)
scene.camera.rotation_euler[2] = -30.0*(pi/180.0)

# Set camera translation
scene.camera.location.x = 0.0
scene.camera.location.y = 0.0
scene.camera.location.z = 80.0
然后我就这样运行它

blender -b marker_a4.blend --python "marker_a4.py" -o //out -F JPEG -x 1 -f 1 
例如,如果我尝试对python脚本使用参数

...
import sys
...
fov = float(sys.argv[5])
...
import sys

fov = float(sys.argv[-1])   
...
# Set Scenes camera and output filename 
bpy.data.scenes["Scene"].render.file_format = 'PNG'
bpy.data.scenes["Scene"].render.filepath = '//out'

# Render Scene and store the scene 
bpy.ops.render.render( write_still=True ) 
然后运行它:

blender -b marker_a4.blend --python "marker_a4.py" 80.0 -o //out -F JPEG -x 1 -f 1 
渲染已完成,但我在开始时收到此消息

read blend: /home/roho/workspace/encuadro/renders/marker/model/marker_a4.blend
read blend: /home/roho/workspace/encuadro/renders/marker/model/80.0
Unable to open "/home/roho/workspace/encuadro/renders/marker/model/80.0": No such file or directory.
...
谁能告诉我是什么引起的?我认为blender也将其作为一个模型进行解析,但不明白为什么。后来,我尝试了一些更符合实际的python参数解析方法(argparse),但根本不起作用。所以我想在这个层面上可能会发生一些奇怪的事情


谢谢

在这种情况下,不能将命令行参数直接传递给python,因为它们被解释为blender的参数。解决这个问题的一种方法是设置环境变量,然后调用blender/python,就像这样(假设您在Windows上,在其他OS上也可以这样做,但语法不同)

注意:等号旁边没有空格

在我称为envvar.py的python脚本中,可以使用os.getenv()访问这些变量

import os
print 'arg1 = ', os.getenv('arg1')
print 'arg2 = ', os.getenv('arg2')
输出:

arg1 = 'foo'
arg2 = 'bar'

我找到了我最初想要的解决方案

正如Junuxx所说,“在这种情况下,您不能将命令行参数直接传递给python…”但实际上,您可以将参数传递给python,但在另一种情况下

因此,我想要的方法是直接在python脚本中渲染和保存

...
import sys
...
fov = float(sys.argv[5])
...
import sys

fov = float(sys.argv[-1])   
...
# Set Scenes camera and output filename 
bpy.data.scenes["Scene"].render.file_format = 'PNG'
bpy.data.scenes["Scene"].render.filepath = '//out'

# Render Scene and store the scene 
bpy.ops.render.render( write_still=True ) 
--python选项(或-p)必须位于末尾,您可以使用--指定参数,然后加载模型并运行脚本

> blender -b "demo.blend" -P script.py -- 50
归功于我发现的这个链接:

我实际上是在Linux上,但我也可以在Mac上使用它。这是一个很酷的解决方法,可以工作,但我不相信依赖操作系统的方法。我也在考虑使用一个辅助的txt文件。我在这里找到了更多的信息(适用于blender 2.49,但我认为它很有用)是的,从文本文件读取也可以,但我认为它比这更复杂。我在运行此代码时出错,因为类RenderSettings没有字段文件格式。它似乎已被弃用和删除。有什么解决办法吗?哦,我知道怎么做了。文件格式现在在ImageFormatSettings中,因此它应该是
bpy.data.scenes[“Scene”]。render.image\u settings.file\u format='PNG'
Ok!对不起,我没有回答你的问题。我告诉您,默认情况下,该行将以PNG格式保存。但是,如果您需要另一种格式,则应该采用。
float(sys.argv[6])
最好写成
float(sys.argv[-1])
以可靠地获取最后一个arg。请参阅Blender的stackexchange站点上的相同问题: