Reputation: 2518
I want to visualize some scientific data, which is, at the moment, only an animation of some spheres with different colours and sizes.
I already created a script within Mathematica which creates the input for POV-Ray.
My problem is, that I'm not satisfied with the quality of POV-Ray's results and wanted to write a Python script, which could set up the corresponding blender scenes and render them. An important constraint is, that I want to render on a headless machine, so I can't use Blender's internal console.
My question: Is it possible to use Blender's api from an external console to get POV-Ray-like behaviour?
After reading George Profenza's answer I did further research and found Don’t Use Blender! in Blender's documentation.
In contrast to my thoughts, one has to create a python script which is executed by blender in background mode.
./blender --background --python myscript.py
Upvotes: 13
Views: 7428
Reputation: 49
While the question has been answered, there may be slightly more to a headless render than has been mentioned above.
Ensure you have Blender downloaded from the command line. For mac I use brew
$ brew install blender
Then you can run
$ blender --background --python <your_script>.py
However, it is important to note that because the script has run headlessly, if you are rendering you will need to save the output within the python script.
working_dir = getcwd()
bpy.context.scene.render.filepath = (working_dir + "/output/render")
bpy.context.scene.cycles.device = 'GPU'
bpy.ops.render.render('INVOKE_DEFAULT', write_still=True)
Hope this helps.
Upvotes: 0
Reputation: 81
Blender can be run "headless" inside a Docker container. Check the Dockerfile here
In case you are not familiar with Docker, download the Dockerfile and run:
docker build -t blender .
docker run -it -v your_folder/:/scripts bash
Now you can run your scripts inside a headless Blender
Upvotes: 2
Reputation: 336
There are two options,
In both cases this should be a simple operation to import the Mathematica scene - bpy.ops.import_scene.* Then render the scene bpy.ops.render.render
Upvotes: 6
Reputation: 51857
As far as I remember you can run Blender from the command line without opening the interface/windowing system, which I hope works for your setup. Not only you can tell Blender to render a document, but you can also run a script that generates that document/populates the scene with geometry, lights, etc.
Alternatively you could generate content straight for a renderer (and skip a 3D Editor/Blender completely). There are quite a few free renderers out there like:
yafaray
sunflow
luxRender
pixie
Upvotes: 8