新しいシーンを作って何か描いてみる。


 スクリプトを用いて新しくシーンを作り、何かレンダリング出来るようにする。


 やることは4つ。

  1. 新しくシーンを作る。
  2. 光源を置く。
  3. カメラを置く。
  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()