当前位置: 首页 > 面试题库 >

带有命令行Blender参数的Python脚本

黄无尘
2023-03-14
问题内容

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

谁能告诉我是什么原因造成的?我认为Blender也将其解析为模型,但不知道为什么。后来我尝试了一些更复杂的方法来解析python(argparse)中的参数,但是它根本没有用。因此,我认为在此级别上可能会发生一些奇怪的事情。

谢谢!


问题答案:

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

正如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



 类似资料:
  • 问题内容: 我需要接受命令行参数才能以以下格式运行Go程序: 我正在使用。但是它只接受到‘1-‘。’> A’被跳过。 非常感谢您对解决此问题的任何帮助。 谢谢 问题答案: 您的外壳将IO 重定向解释为IO 重定向。Shell打开该文件作为命令的标准输出,并将参数传递给命令。 引用参数以避免这种情况:

  • 我需要使用shell命令来运行python脚本 但是args是python脚本的列表: 当我使用shell python时 系统显示:"('有一个错误" 如何将列表转换为脚本? (“存储”、“IDCODE”、18116485、88779)是一个参数

  • 问题内容: 为了从Java执行python脚本(具有几个命​​令行参数),我尝试使用的是以下Java代码 例如,我打算执行以下命令: 请注意,参数arg3采用参数值列表。 我面临的问题是我没有找到将值列表传递给参数arg3的方法。 如果有人可以给我一些提示以解决我的问题,我将不胜感激。 我已经进行了搜索,但是找不到适合我需要的答案,如果有人找到正确的链接,请告诉我。 最好! 问题答案: 只需将它们

  • 我的的部分当前如下所示: ...这意味着我可以运行来启动服务器。到目前为止还不错。 但是,我希望能够运行类似的东西,并将参数传递给(例如,=>)。这可能吗?

  • 问题内容: 我正在向数据库中插入大约500 000个对象,其中许多对象是相同的(数据库中具有相同的主键表示),但是其他字段可能不同,因此我使用的方法是“更新-如果没有受影响的行-插入”。问题在于,有时对象的某些字段设置为null(无法从文件读取),并且已经在数据库中设置了某些值,因此我将其更新为null =删除它。)如何实现方案,即只更新字段不为空? 这是我现在如何做的一个简单示例: 问题答案:

  • 这是我得到的问题“编写一个程序来读取和显示2个命令行参数和命令行参数数组的长度”。 这是我用Java给出的答案。。这是正确的吗?

  • 为了方便起见,我们支持在运行 Blade 应用的时候修改一些配置,比如我在运行时指定端口: java -jar blade-app.jar --server.port=9088 当然还支持一些其他的命令行参数,看看下面的表格: 命令行参数 描述 示例 server.address 服务地址,默认是本机 0.0.0.0 回环地址 --server.address=192.168.1.100 serv

  • 1.2. 命令行参数 大多数的程序都是处理输入,产生输出;这也正是“计算”的定义。但是, 程序如何获取要处理的输入数据呢?一些程序生成自己的数据,但通常情况下,输入来自于程序外部:文件、网络连接、其它程序的输出、敲键盘的用户、命令行参数或其它类似输入源。下面几个例子会讨论其中几个输入源,首先是命令行参数。 os包以跨平台的方式,提供了一些与操作系统交互的函数和变量。程序的命令行参数可从os包的Ar