レンダリング結果をファイルに保存する。
scene = Scene.GetCurrent() context = scene.getRenderingContext() context.render() context.imageType = Scene.Render.PNG context.setRenderPath('D:\\blender\\') context.saveRenderedImage('test.png')
現在のシーン(scene)からレンダリングに関するインスタンス(context)を取得。context を通じてレンダリングをする。その後、ファイルタイプとパスを指定し、指定したファイル名でレンダリング結果を保存する。
シーン(Scene)の詳細はこちら→ Module Scene
レンダー(Render)の詳細はこちら→ Module Render
出力サイズを変える。
scene = Scene.GetCurrent() context = scene.getRenderingContext() context.imageSizeX(320) context.imageSizeY(256) context.render()
現在のシーン(Scene)からレンダリングに関するインスタンス(context)を取得し、context を通じてサイズを変える。
context.imageSizeX(320) context.imageSizeY(100)
シーン(Scene)の詳細はこちら→ Module Scene
レンダー(Render)の詳細はこちら→ Module Render
モノに属性(色や透明度)を付ける。
m を object だとすると、
mmat = Material.New('myMaterial') mmat.rgbCol = (1.0, 0.0, 0.0) m.setMaterials([mmat]) m.colbits = 1
属性(Material)インスタンス mmat を作成して「.rgbCol」で RGB 値を指定。それを「setMaterials」でオブジェクトに関連付け、属性ビットフラグ colbit を立てる(この場合は Material を一つだけ関連付けているので1ビット目だけを立てる)。
透明にするには
mmat.alpha = 0.4
mmat.mode |= Material.Modes.ZTRANSP
「.alpha」で透過性を指定。1で不透明で0が完全に透明。更に「.mode」の ZTRANSP フラグを立てる。
属性(Material)の詳細はこちら→ Module Material
新しいシーンを作って何か描いてみる。
スクリプトを用いて新しくシーンを作り、何かレンダリング出来るようにする。
やることは4つ。
- 新しくシーンを作る。
- 光源を置く。
- カメラを置く。
- 物を置く。
from Blender import * #### Scene #### scene = Scene.New('myScene') scene.makeCurrent() #### Lights #### ldat = Lamp.New('Sun') l = scene.objects.new(ldat, 'myLamp') l.loc = (1, 0, 2) #### Camera #### camdat = Camera.New('persp') cam = scene.objects.new(camdat, 'myCamera') cam.loc = (0, 0, 3) #### Stuff #### mdat = Mesh.Primitives.Cube(0.8) m = scene.objects.new(mdat,'myMesh') m.rot = (0.5, 0.5, 0.1) Redraw()
Lamp型、Camera型、Mesh型のオブジェクトを作り、それぞれを元にした新規 object を scene に追加する。各 object の位置や回転角には「.loc」「.rot」でアクセスできる。(「.RotX」「.LocZ」などで単一の座標だけにアクセスすることも可能)。
光源(Lamp)の詳細はこちら→ Module Lamp
カメラ(Camera)の詳細はこちら→ Module Camera
基本図形(MeshPrimitives)の詳細はこちら→ Module MeshPrimitives
(リンク先は全て The Blender Python API Reference 日本語版 内のページ)
「F12」あるいはメニューから「Render」−「Render Current Frame」でレンダリングが出来る。
ちょっとカクカクしているので Oversampling による anti-aliasing でスムーズにする。scene を取得した後の適当なところに下の2文を挿入。
context = scene.getRenderingContext()
context.enableOversampling(True)
シーン(Scene)の詳細はこちら→ Module Scene
レンダー(Render)の詳細はこちら→ Module Render
再度レンダリング(「F12」)。
もうちょっと遊んでみる。
ソースはこちら。
from Blender import * import math ###### Scene ###### scene = Scene.New('myScene') scene.makeCurrent() ###### Lights ###### ldat = Lamp.New('Area') ldat.energy = 0.1 l1 = scene.objects.new(ldat, 'myLamp') l1.loc = (0, 0, 8) ldat = Lamp.New('Spot') l2 = scene.objects.new(ldat, 'mySpot') l2.loc = (4, 3, 6) l2.rot = (0.2, 0.2, 0) ###### Camera ###### camdat = Camera.New('persp') cam = scene.objects.new(camdat, 'myCamera') cam.loc = (0, -12, 8) cam.RotX = 0.9 ###### Stuff ###### mdat = Mesh.Primitives.Cube(0.8) for a in range(16): m = scene.objects.new(mdat,'myMesh') m.LocX = math.sin(math.pi*2*a/16)*5 m.LocY = math.cos(math.pi*2*a/16)*5 m.LocZ = 1 pdat = Mesh.Primitives.Plane() p = scene.objects.new(pdat, 'myPlane') p.size = (8, 8, 1) Redraw() ###### Render ###### context = scene.getRenderingContext() context.enableOversampling(True) context.enableShadow(True) context.render()
とりあえず Hello World
Help の横にあるリストボックスの左側(上下三角のアイコン)をクリック。出てきたメニューから「5-scripting」をクリック。
そうすると
のようにウィンドウが分割される。分割部分の大きさは境界をドラッグして調整できる。ここでは右側がスクリプトを書くエディタ領域で、python スクリプトを直接書くことが出来る。
例えば
print 'Hello, world.'
と入力して「Alt+p」(あるいはエディタ領域で右クリックして「Execute Script」)を押してスクリプトを実行すると標準出力に「Hello, world.」と表示される。
更には
from Blender import * scene = Scene.GetCurrent() for ob in scene.objects: print ob.name, ob.loc
と書いてスクリプトを実行(「Alt+p」)すると下記のように現在 scene 上にある object の名前とその3次元座標上の位置が表示される。
Cube (0.0, 0.0, 0.0) Lamp (4.076, 1.005, 5.904) Camera (7.481, -6.508, 5.344)
ここで大雑把に Blender + python における主要なクラスと概念を図解するとだいたいこんな感じ。図中の英単語はそのまま Blender モジュール名かつクラス名にもなっている。
Scene の中に Object を配置する(関連付ける)。Object として登録できるものには Mesh や Metaball などで作られる「もの」と、 視点を設定する Camera、光源を設定する Lamp などがある。Object に Material を関連付けることで色や透明度などが指定できる。また World で背景を指定する。
-
-
- -
-
以下蛇足。
以上を踏まえた上で上記のスクリプトを見ると、
from Blender import * scene = Scene.GetCurrent() for ob in scene.objects: print ob.name, ob.loc
scene は Scene 型のインスタンス。
scene.objects は Scene型のインスタンス変数。その中身は(scene に関連付けられた) Object 型のインスタンスの系列。
ob は Object 型のインスタンス。
ob.name や ob.loc は Object 型のインスタンス変数。その中身はそれぞれ名前(文字列)と3次元座標を表すタプル(この場合は実数の組)。
Blender と python を速習する(外部サイトの紹介)
チュートリアル(本当に初めての方のために作成したBlenderチュートリアル)
WBS+(Web/Blender Studio+)
藤堂+さんによるチュートリアル。とても判りやすい。
当「備忘録」の趣旨上、基本的にはスクリプトでの操作を前提にするにしても、作業画面の使い方(上記ページの「9. ファイル操作」ぐらいまで)はひとまず覚えておくと良いかも。
オブジェクト指向言語をかじったことがある人にとっては、Python のソースはほぼ self-explaining 。とりあえず図をでっちあげたいというだけならあまり細かい部分を気にする必要はないかも。
Python 早めぐり - 紫藤のページ
紫藤さんによるチュートリアル。要点が1ページにまとめてある。簡単なサンプル+リファレンスへのリンクという構成でとても実用的。
Python チュートリアル
Guido van Rossum
Blender と python を手に入れる。
コンソールから
sudo apt-get install python sudo apt-get install blender
でインストール。その後、同じくコンソールから
blender
で起動。メイン画面(下図A)が表示されるはず。また blender を起動したコンソールは python の標準出力先として使用される。
Python を以下のサイトからダウンロードしてインストール。
http://www.python.org/
Blender を以下のサイトからダウンロードしてインストール。
http://www.blender.org/
「スタート」−「全てのプログラム」−「Blender Foundation」−「Blender」−「Blender」で起動。Blender のメイン画面 (A) と Python の標準出力画面 (B) が表示されるはず。
上記のように「python 見つけたよ!(got it!)」と表示されていれば正常にインストール完了。そうでなければ python が正しくインストールされていないか、他に何か問題があるかも。