子供の自由研究や図工を見ていると、つい私もやりたくなってしまいます。押し花をしている子供の横で、ヒマワリの種をのりでくっつけてヒマワリの絵を描こうと思ったのですが、種がもったいないので、Blender内で図工します。
最初からあるCubeは、平にして地面に。なくてもよいです。
import bpy bpy.data.objects['Cube'].location=(0,0,-2) bpy.ops.transform.resize(value=(9,9,1))
ヒマワリの花びらは、一枚の円で作っておきます。
bpy.ops.mesh.primitive_cylinder_add() bpy.ops.transform.resize(value=(0.8, 0.8, 0.01)) bpy.ops.rigidbody.object_add(type='PASSIVE') bpy.data.objects["Cylinder"].rigid_body.collision_shape="CYLINDER"

ヒマワリの種を作ります。楕円形にします。
bpy.ops.mesh.primitive_uv_sphere_add() bpy.ops.transform.resize(value=(0.5, 0.1, 1))

ヒマワリの種の色をつけて、小さくします。
brown=bpy.data.materials.new("test")
brown.diffuse_color=(0.1, 0.1, 0)
bpy.ops.mesh.primitive_uv_sphere_add()
bpy.ops.transform.resize(value=(0.5, 0.1, 1))
bpy.ops.transform.resize(value=(0.1, 0.1, 0.1))
bpy.context.object.data.materials.append(brown)

ヒマワリのたねを空中に浮かせて、100個コピーします。
bpy.data.objects['Sphere'].location=(0,0,0.5)
for i in range(0,100):
bpy.ops.object.duplicate()

このままだと、アニメーション時に種が散ってしまいますので、飛び散らないようにドームを作ります。
py.ops.mesh.primitive_uv_sphere_add() bpy.ops.transform.resize(value=(0.5, 0.5, 1)) bpy.ops.rigidbody.object_add(type='PASSIVE')

ドームは、別レイヤーにしておいて、見えないようにしておきます。
bpy.data.objects['Sphere.101'].layers = layers(1)
def layers(l):
all = [False]*20
all[l]=True
return all

全部まとめるとこのようなスクリプトになりました。
1 #!/bin/bash
2 cat <<EOL>/tmp/tmp.py
3
4 import bpy
5
6 def layers(l):
7 all = [False]*20
8 all[l]=True
9 return all
10
11 yellow=bpy.data.materials.new("test")
12 yellow.diffuse_color=(1, 1, 0)
13 brown=bpy.data.materials.new("test")
14 brown.diffuse_color=(0.1, 0.1, 0)
15
16 bpy.data.objects['Cube'].location=(0,0,-2)
17 bpy.ops.transform.resize(value=(9,9,1))
18
19 bpy.ops.mesh.primitive_cylinder_add()
20 bpy.ops.transform.resize(value=(0.8, 0.8, 0.01))
21 bpy.ops.rigidbody.object_add(type='PASSIVE')
22 bpy.data.objects["Cylinder"].rigid_body.collision_shape="CYLINDER"
23 bpy.context.object.data.materials.append(yellow)
24
25 bpy.ops.mesh.primitive_uv_sphere_add()
26 bpy.ops.transform.resize(value=(0.5, 0.1, 1))
27 bpy.ops.transform.resize(value=(0.1, 0.1, 0.1))
28
29 bpy.context.object.data.materials.append(brown)
30
31 bpy.ops.rigidbody.object_add(type='ACTIVE')
32 bpy.context.scene.cursor_location=(0,0,0)
33 bpy.ops.object.origin_set(type="ORIGIN_CURSOR")
34
35 bpy.data.objects['Sphere'].location=(0,0,0.5)
36
37 for i in range(0,100):
38 bpy.ops.object.duplicate()
39
40 bpy.ops.mesh.primitive_uv_sphere_add()
41 bpy.ops.transform.resize(value=(0.5, 0.5, 1))
42 bpy.ops.rigidbody.object_add(type='PASSIVE')
43 bpy.data.objects['Sphere.101'].layers = layers(1)
44
45 EOL
46 blender -P /tmp/tmp.py
横から見ると、ぜんぜんヒマワリに見えませんでした。



コメント