概要
blenderでカーテン画像を生成するプログラムを作ってみました。元ネタは二次元から三次元を作る方法 — サーバ内でBlenderを動かしてみたら意外にもイケていたという話 - pixiv insideから。
環境
バージョン:2.74、レンダリングエンジン:cycles
準備
カーテンのある風景を作ります。今回のはシンプルにカーテンがあるだけの部屋で、白いカーテンはレースカーテンで外からの光が透けているかんじになります。ちなみにカーテンの作り方についてはModeling with Cloth Simulation in Blender - YouTubeを参考にしました。とてもわかりやすく説明されています。
実装
左右のカーテンそれぞれにマテリアルが設定してあります。マテリアル名は curtain.left
、 curtain.right
としておきます。
- テクスチャを設定
- レンダリング
- pngで出力
この処理をプログラムで行います。pythonで書くと以下のようになります。
import sys
import os
import bpy
# How to pass command line arguments to a Blender Python script? - Blender Stack Exchange
# http://blender.stackexchange.com/questions/6817/how-to-pass-command-line-arguments-to-a-blender-python-script
argv = sys.argv
[left, right, out] = argv[argv.index("--") + 1:] # get all args after "--"
def update_filepath(material_name, filepath):
t = bpy.data.materials[material_name].node_tree.nodes.get('Image Texture')
t.image.filepath = filepath
update_filepath('curtain.left', os.path.abspath(left))
update_filepath('curtain.right', os.path.abspath(right))
bpy.ops.render.render()
bpy.data.images['Render Result'].save_render(filepath = os.path.abspath(out + '.png'))
これを実行すると
$ blender --background path/to/file.blend --python path/to/script.py -- left.png right.png rendered
こうなる!ちょっとノイズが乗ってしまいましたが時間がないのでここまで。