Blenderで力場設定

bl-elevator-title
『トータル・リコール』(2012米) 
1990年版の『トータル・リコール』でアーノルド・シュワルツェネッガーが演じてた主人公の役は、コリン・ファレルが演じています。日々に不満を感じてる主人公は、夢を売るリコール社でサービスを受けますが、今の生活が作られた日常であることを知ります。1990年版と同じく、記憶が戻ったのか、リコール社による作られた記憶なのか、はっきりわかりません。それも映画を面白くしている要素の一つです。

本作に地球の裏側と往来できるエレベーターが出てきますが、Blenderでも似たような動きをさせたくなりました。Blenderで力場の設定をしてみます。
地球らしくするために、画像はNASA(http://visibleearth.nasa.gov/view.php?id=74493)から
world.topo.200411.3x5400x2700.jpgを取得しました。

スクリプトはこれです。
6行目で重力をなくして、26,27でForce Fieldの設定をしています。(forcefield_toggle()は2回実行する)
これでエレベーターに見立てた円柱が中心に引っ張られて落ちていきます。

~$ cat -n elevator.sh
     1	#!/bin/bash
     2	cat <<EOL>/tmp/tmp.py
     3	
     4	import bpy,os
     5	
     6	bpy.data.scenes["Scene"].gravity.z=0
     7	
     8	bpy.data.objects['Cube'].select = True
     9	bpy.ops.object.delete()
    10	
    11	bpy.ops.mesh.primitive_uv_sphere_add()
    12	
    13	mat=bpy.data.materials.new('Material.001')
    14	mat.emit=1
    15	tex1 = bpy.data.textures.new('Tex1', type='IMAGE')
    16	fname=os.path.expanduser('~/world.topo.200411.3x5400x2700.jpg')
    17	tex1.image = bpy.data.images.load(fname)
    18	bpy.context.object.data.materials.append(mat)
    19	
    20	mt=mat.texture_slots.add()
    21	mat.texture_slots[0].texture_coords='OBJECT'
    22	mat.texture_slots[0].texture=tex1
    23	mat.texture_slots[0].object=bpy.data.objects['Sphere']
    24	mat.texture_slots[0].mapping='SPHERE'
    25	
    26	bpy.ops.object.forcefield_toggle()
    27	bpy.ops.object.forcefield_toggle()
    28	bpy.data.objects['Sphere'].field.strength=-5
    29	
    30	bpy.ops.mesh.primitive_cylinder_add()
    31	bpy.ops.transform.translate(value=(0,0,1.2))
    32	bpy.ops.transform.resize(value=(0.1, 0.1, 0.4))
    33	
    34	cy=bpy.data.objects['Cylinder']
    35	
    36	bpy.ops.rigidbody.object_add(type='ACTIVE')
    37	
    38	bpy.data.objects['Camera'].location=(4,-4,3)
    39	
    40	bpy.data.lamps['Lamp'].distance=2000
    41	
    42	bpy.data.scenes['Scene'].render.resolution_x=760
    43	bpy.data.scenes['Scene'].render.resolution_y=480
    44	
    45	EOL
    46	blender -b -P /tmp/tmp.py -o //test -a -F PNG -x 1 -f 1 | grep ^Save
    47	convert -layers optimize -loop 0 -delay 5 test????.png test.gif

elevator

Leave a Reply

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

CAPTCHA