Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python script with arguments for command line Blender

I'm new to blender and python. I have a blender model (.blend) that I want to batch-render as several images providing some properties for each image.

I wrote a python script with those parameters, something like:

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

So then i run it like

blender -b marker_a4.blend --python "marker_a4.py" -o //out -F JPEG -x 1 -f 1 

Then for instance if I try to use arguments to the python script

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

And run it:

blender -b marker_a4.blend --python "marker_a4.py" 80.0 -o //out -F JPEG -x 1 -f 1 

The render gets done but i get this messages at start.

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

Can anybody tell me whats causing this? I think blender is also parsing that as a model but don't understand why. I later tried something more sofisticated for the argument parsing in python (argparse) but it did not work at all. So i'm thinking there might be something strange happening at this level.

Thanks!

like image 326
roho Avatar asked May 19 '12 17:05

roho


People also ask

Can Python take command line arguments?

Python exposes a mechanism to capture and extract your Python command line arguments. These values can be used to modify the behavior of a program. For example, if your program processes data read from a file, then you can pass the name of the file to your program, rather than hard-coding the value in your source code.

How do I use Python console in Blender?

Accessing Built-in Python ConsoleBy pressing Shift-F4 in any Blender Editor type (3D View, Timeline etc.,) you can change it to a Console Editor. From the screenshot above, you will notice that apart from the usual hot keys that are used to navigate, by pressing Ctrl-Spacebar you can enable Auto-complete feature.


1 Answers

I found the solution for what I was looking for intially.

As Junuxx said "You can't pass command line arguments directly to python in this situation..." but you actually CAN pass arguments to python but in another situation.

So the way to do what i want is to RENDER AND SAVE DIRECTLY INSIDE the python script

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 ) 

The --python option (or -P) has to be at the end and you can specify arguments with -- and just load the model and run the script.

> blender -b "demo.blend" -P script.py -- 50

Credit to this link I found: http://www.blender.org/forum/viewtopic.php?t=19102&highlight=batch+render

like image 182
roho Avatar answered Oct 08 '22 19:10

roho