ブレンダーでPythonスクリプトを使用して複数の画像をレンダリングして保存しようとしています。Blender GUI を使用して画像をレンダリングおよび保存する方法は知っていますが、一連のネストされたループを使用しており、複数の画像を保存する必要があるため、スクリプトを使用してすべて実行したいと考えています。私は画像をレンダリングすることができ、出力が成功した状態で画像を保存すると思います。しかし、保存先がわからず、ファイルパスを編集しようとすると、コンテキストが正しくないというエラーが表示されます。
49608 次
3 に答える
48
以下のコードは、「VR パノラマ」(オブジェクトの周囲のさまざまな視点からの一連の写真) を作成します。
私はこのアルゴリズムで終わった:
- 写真を撮ろうとしているオブジェクトを作成またはロードします (件名)
- それをスケーリングし、いくつかの素敵な照明を追加します(オブジェクトが必要な方向から見えるようにするため) ; シーンをレンダリングすることで照明を確認できます(F12キーを使用)
オブジェクトを作成し、Empty
その位置を被写体の中心に設定し、回転をアイデンティティに設定します (0, 0, 0
)- カメラ ビューを開始位置に設定します(レンダリングで確認してください)。
- インタラクティブな Python シェルを開く ( Shift+F4)
- スクリプトを貼り付けて実行する
ディレクトリの下のオブジェクトの周りに多数の画像( で定義rotation_steps
)が表示されます。/Users/myusername/Pictures/VR
def rotate_and_render(output_dir, output_file_pattern_string = 'render%d.jpg', rotation_steps = 32, rotation_angle = 360.0, subject = bpy.context.object):
import os
original_rotation = subject.rotation_euler
for step in range(0, rotation_steps):
subject.rotation_euler[2] = radians(step * (rotation_angle / rotation_steps))
bpy.context.scene.render.filepath = os.path.join(output_dir, (output_file_pattern_string % step))
bpy.ops.render.render(write_still = True)
subject.rotation_euler = original_rotation
rotate_and_render('/Users/myusername/Pictures/VR', 'render%d.jpg')
レンダリングするオブジェクトを選択する必要があります。または、Blender の Python APIを使用してシーン内のオブジェクトを見つけ、それをパラメーターとしてsubject
関数に渡すことができます。
rotate_and_render('/Users/myusername/Pictures/VR', 'render%d.jpg', subject = bpy.data.objects["Cube"])
于 2013-07-11T21:52:09.570 に答える
1
次のことを行う必要があります。ループのi
後の 2 行目のfor
は、ファイル ループのループ インデックスです。
コンソールおよびコマンド ラインでの実行中にこれが機能することを確認しました。1 つのファイルをレンダリングしたら、忘れずにオブジェクトを削除してください。(remove コマンドは一般的なものではないため、ここでは説明しません。そのオブジェクトにリンクがある場合、そのコマンドには特定の引数が必要になります)
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)
于 2018-11-05T08:28:39.983 に答える