11

私は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)での引数の解析のためにもっと洗練されたものを試しましたが、まったく機能しませんでした。ですから、このレベルで何か奇妙なことが起こっているのではないかと思います。

ありがとう!

4

2 に答える 2

9

私は最初に探していたものの解決策を見つけました。

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

于 2012-06-02T16:17:23.837 に答える
4

この状況では、コマンドライン引数をPythonに直接渡すことはできません。これは、コマンドライン引数がblenderの引数として解釈されるためです。これを回避する方法は、環境変数を設定してから、次のようにblender / pythonを呼び出すことです(Windowsを使用している場合、他のOSでも同じことが可能ですが、構文が異なります)

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'
于 2012-05-19T23:35:22.747 に答える