アニメ『ハンドシェイカー』
ハンドシェイクは握手のことですが、ハンドシェイカーになるとどんな意味になるだろうと思ってalcで調べました。
handshaker 【名】 やけに愛想の良い人、おべんちゃらを言う人
(英辞郎 on the WEBより http://www.alc.co.jp/)
いい意味じゃないんですねえ。
アニメの方ですが「握手」というよりは、手をつなぐ方のようです。3Dアニメですが、すごく細かいところまで動いています。クラスルームのモブたちの動きが、細かすぎて普通に面白いです。
歯車がたくさん出てきます。主人公たちが武器として使っています。
では歯車たくさん作ってみます。
今回は「Blenderで歯車を作る」で作成した歯車とは違うタイプのこんな形の歯車を作ります。
一つの歯車を作成する関数名を、create_gearと名づけました。
def create_gear(num, s1, s2, s3,name):
numは、ギア数/4を指定し、s1,s2,s3は円の要になる各円の縮小率、nameはギアの名前(文字列)です。
関数の中の処理は、「Blenderで歯車を作る」で作成したスクリプトを使います。
def create_gear(num, s1, s2, s3,name): bpy.ops.mesh.primitive_circle_add(vertices=num*4) bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_mode(type='EDGE') mesh=bmesh.from_edit_mesh(bpy.context.object.data) bpy.ops.mesh.select_all(action='DESELECT') for i in range(0,num): mesh.edges[i*4].select = True bpy.ops.transform.resize(value=(s1,s1,s1)) bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.mesh.primitive_circle_add() bpy.ops.transform.resize(value=(s2,s2,s2)) bpy.data.objects["Circle"].select = True bpy.ops.object.join() bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_mode(type='EDGE') bpy.ops.mesh.select_all(action='SELECT') bpy.ops.mesh.fill()
これをこのように呼び出しすれば、
create_gear(64, 0.95, 0.9, 0.1,"Gear")
以下のような絵ができます。要するに軸の穴を拡げただけです。
さらに関数内に処理を追加します。
num=16 bpy.ops.mesh.primitive_circle_add(vertices=num*4) bpy.ops.transform.resize(value=(s2,s2,s2)) bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_mode(type='EDGE') mesh=bmesh.from_edit_mesh(bpy.context.object.data) bpy.ops.mesh.select_all(action='DESELECT') for i in range(0,num): mesh.edges[i*4].select = True s3=0.1 bpy.ops.transform.resize(value=(s3,s3,s3)) bpy.ops.mesh.select_all(action='SELECT') bpy.ops.mesh.fill()
最初の歯車作成の処理と同じような処理ですが、縮尺が異なります。このような絵ができます。
後は外側の歯車と、内側の歯車を組み合わせて、こうなります。
ランダムにたくさん作るスクリプトです。
1 #!/bin/bash 2 cat <<EOL>/tmp/tmp.py 3 4 import bpy,bmesh,random 5 6 yellow=bpy.data.materials.new("yellow") 7 yellow.diffuse_color=(1, 0.82, 0.0) 8 yellow.emit=0.3 9 10 bpy.ops.object.delete() 11 12 def create_gear(num, s1, s2, s3,name): 13 bpy.ops.mesh.primitive_circle_add(vertices=num*4) 14 15 bpy.ops.object.mode_set(mode='EDIT') 16 bpy.ops.mesh.select_mode(type='EDGE') 17 18 mesh=bmesh.from_edit_mesh(bpy.context.object.data) 19 20 bpy.ops.mesh.select_all(action='DESELECT') 21 for i in range(0,num): 22 mesh.edges[i*4].select = True 23 bpy.ops.transform.resize(value=(s1,s1,s1)) 24 25 bpy.ops.object.mode_set(mode='OBJECT') 26 bpy.ops.mesh.primitive_circle_add() 27 bpy.ops.transform.resize(value=(s2,s2,s2)) 28 29 bpy.data.objects["Circle"].select = True 30 bpy.ops.object.join() 31 bpy.ops.object.mode_set(mode='EDIT') 32 bpy.ops.mesh.select_mode(type='EDGE') 33 bpy.ops.mesh.select_all(action='SELECT') 34 bpy.ops.mesh.fill() 35 36 bpy.ops.object.mode_set(mode='OBJECT') 37 num=16 38 bpy.ops.mesh.primitive_circle_add(vertices=num*4) 39 bpy.ops.transform.resize(value=(s2,s2,s2)) 40 bpy.ops.object.mode_set(mode='EDIT') 41 bpy.ops.mesh.select_mode(type='EDGE') 42 43 mesh=bmesh.from_edit_mesh(bpy.context.object.data) 44 45 bpy.ops.mesh.select_all(action='DESELECT') 46 for i in range(0,num): 47 mesh.edges[i*4].select = True 48 49 s3=0.1 50 bpy.ops.transform.resize(value=(s3,s3,s3)) 51 bpy.ops.mesh.select_all(action='SELECT') 52 bpy.ops.mesh.fill() 53 bpy.ops.object.mode_set(mode='OBJECT') 54 55 bpy.data.objects["Circle.001"].select = True 56 bpy.ops.object.join() 57 58 bpy.ops.object.mode_set(mode='EDIT') 59 bpy.ops.mesh.select_mode(type='EDGE') 60 61 bpy.ops.mesh.extrude_region_move( 62 TRANSFORM_OT_translate={"value":(0, 0, 0.1)} 63 ) 64 65 bpy.ops.object.mode_set(mode='OBJECT') 66 bpy.context.object.name=name 67 bpy.context.object.data.materials.append(yellow) 68 69 for i in range(300): 70 x=random.random()*12-6 71 y=random.random()*12-6 72 z=random.random()*4-2 73 r=random.randint(1,20)*4 74 s=random.random() 75 name = "Gear." + str(i) 76 create_gear(r, 0.95, 0.9, 0.1,name) 77 bpy.ops.transform.resize(value=(s,s,s)) 78 bpy.data.objects[name].location=(x,y,z) 79 80 bpy.data.lamps['Lamp'].distance=4000 81 bpy.data.lamps['Lamp'].type='SUN' 82 83 84 EOL 85 blender -P /tmp/tmp.py
コメント