Blenderスクリプトでチョコレートブロック(その1)


「Blenderでチョコレートブロック」で作ったチョコレートブロックを、コマンドの達人の本筋であるスクリプトでも作りたいと思います。

まず、レンダリングエンジンの切り替えから。

bpy.context.scene.render.engine

を使います。
Cyclesに切り替えるには、

bpy.context.scene.render.engine='CYCLES'

です。

起動時のCubeはもちろんチョコレートブロックになります。最初の大きさは、2 x 2 x 2の立方体ですが、
いろいろと指定しやすいように、0.5倍にします。

bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))

Cubeのアクセスを楽にするため変数にオブジェクトを設定しておきます。

cube=bpy.data.objects['Cube']

次は剛体設定。

bpy.ops.rigidbody.object_add(type='ACTIVE')

ACTIVE設定しておくと、アニメーションさせると、地面まで落ち始めます。

Cubeのコピーは、Duplicateを使います。全部でチョコレートブロックが125個になるようにコピーします。
※これは、x軸のコピー y z も同じようにコピーする

for i in range(0,4):
	bpy.ops.object.duplicate()
	bpy.ops.transform.translate(value=(1,0,0))

地面は、思いっきり広くして、剛体設定をPASSIVE指定するだけです。

bpy.context.scene.cursor_location = (0,0,0)
bpy.ops.mesh.primitive_plane_add()
bpy.ops.transform.resize(value=(99, 99, 1))
bpy.ops.rigidbody.object_add(type='PASSIVE')

このAPIを実行すると、アニメーション開始します。

bpy.ops.screen.animation_play()

全スクリプトです。

import bpy

bpy.context.scene.render.engine='CYCLES'

cube=bpy.data.objects['Cube']
bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
bpy.ops.rigidbody.object_add(type='ACTIVE')
cube.rigid_body.collision_shape='BOX'
bpy.ops.transform.translate(value=(-2.5,-2.5,20))

mat=bpy.data.materials['Material']
mat.diffuse_color=(0.08, 0.03, 0.02)

for i in range(0,4):
	bpy.ops.object.duplicate()
	bpy.ops.transform.translate(value=(1,0,0))

cube_objs=[o for o in bpy.data.objects if o.name.startswith('Cube')]
for o in cube_objs:
	o.select = True

for i in range(0,4):
	bpy.ops.object.duplicate()
	bpy.ops.transform.translate(value=(0,1,0))

cube_objs=[o for o in bpy.data.objects if o.name.startswith('Cube')]
for o in cube_objs:
	o.select = True

for i in range(0,4):
	bpy.ops.object.duplicate()
	bpy.ops.transform.translate(value=(0,0,1))

bpy.context.scene.cursor_location = (0,0,0)
bpy.ops.mesh.primitive_plane_add()
bpy.ops.transform.resize(value=(99, 99, 1))
bpy.ops.rigidbody.object_add(type='PASSIVE')

bpy.ops.screen.animation_play()

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA