【问题标题】:Python script with arguments for command line Blender带有命令行 Blender 参数的 Python 脚本
【发布时间】:2012-05-26 21:28:29
【问题描述】:

我是 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])
...

然后运行它:

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.
...

谁能告诉我这是什么原因造成的?我认为搅拌机也将其解析为模型,但不明白为什么。后来我尝试了一些更复杂的方法来解析 python (argparse) 中的参数,但它根本不起作用。所以我认为在这个级别上可能会发生一些奇怪的事情。

谢谢!

【问题讨论】:

标签: python batch-file rendering blender-2.50


【解决方案1】:

我找到了我最初寻找的解决方案。

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

所以我想要的方法是直接在 python 脚本中渲染和保存

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

归功于我发现的这个链接: http://www.blender.org/forum/viewtopic.php?t=19102&highlight=batch+render

【讨论】:

  • 运行此代码时出现错误,因为类 RenderSettings 没有字段 file_format。似乎它已被弃用和删除。有什么解决办法吗?
  • 哦,我已经知道如何做到这一点了。 file_format 现在在 ImageFormatSettings 中,所以应该是 bpy.data.scenes["Scene"].render.image_settings.file_format = 'PNG'
  • 好的!对不起,我错过了你的问题。我省略了该行,默认情况下它将保存在 PNG 中。但是,如果您需要另一种格式,那应该是可行的方法。
  • float(sys.argv[6]) 最好写成float(sys.argv[-1]) 以可靠地获取最后一个参数。
【解决方案2】:

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

set arg1='foo' & set arg2='bar' & python envvar.py

注意:等号旁边不能有空格!

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

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

输出:

arg1 = 'foo'
arg2 = 'bar'

【讨论】:

  • 我实际上在 Linux 上,但我也可以在 Mac 上使用它。这是一个很酷的解决方法并且有效,但我不相信依赖操作系统的方法。我也在考虑使用辅助 txt 文件。我在这里找到了更多信息(它适用于搅拌机 2.49,但我认为它很有用)blender.org/documentation/249PythonDoc/API_related-module.html
  • 是的,从文本文件中读取也可以,但我认为它比这更复杂。
猜你喜欢
  • 2018-10-24
  • 2023-02-06
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2018-10-14
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多