前回exportしたaaa.png(ファイル名はkuro-cube.pngに変えました)をGimpで塗り絵しました。こんなのになりました(そのうちちゃんと作ろう・・・)。
では塗り絵をした画像を使って、pythonでCubeへテクスチャマッピングしたいと思います。
Blender起動時からあるCubeを使いますが、UVマッピングするために、オブジェクトのEdge(辺)に切れ目を入れます。
bmesh.from_edit_mesh(bpy.context.object.data)
を使ってEdge(辺)をセレクトできます。
このように使います。
mesh=bmesh.from_edit_mesh(bpy.context.object.data)
mesh.edges[0].select = True
以下のようにCubeの各辺に、edges[0]〜edges[11]が割当たってるので、0,2,5,7,8,10,11番の辺を選択してmark_seam、unwrapすれば、画像がぴったり貼り付けられます。
スクリプトです。
~$ cat -n kuro-cube.sh 1 #!/bin/bash 2 cat <<EOL>/tmp/tmp.py 3 import bpy,os,math,bmesh 4 bpy.data.worlds["World"].horizon_color=(0,0,0) 5 bpy.data.materials['Material'].emit=1 6 7 8 tex1 = bpy.data.textures.new('Tex1', type='IMAGE') 9 fname=os.path.expanduser('~/kuro-cube.png') 10 tex1.image = bpy.data.images.load(fname) 11 bpy.data.materials['Material'].texture_slots[0].texture = tex1 12 bpy.data.materials['Material'].texture_slots[0].texture_coords='UV' 13 14 bpy.ops.object.mode_set(mode='EDIT') 15 mesh=bmesh.from_edit_mesh(bpy.context.object.data) 16 17 mesh.edges[0].select = True 18 mesh.edges[1].select = False 19 mesh.edges[2].select = True 20 mesh.edges[3].select = False 21 mesh.edges[4].select = False 22 mesh.edges[5].select = True 23 mesh.edges[6].select = False 24 mesh.edges[7].select = True 25 mesh.edges[8].select = True 26 mesh.edges[9].select = False 27 mesh.edges[10].select = True 28 mesh.edges[11].select = True 29 30 bpy.context.scene.objects.active = bpy.context.scene.objects.active 31 bpy.ops.mesh.mark_seam() 32 bpy.ops.mesh.select_all(action='SELECT') 33 bpy.ops.uv.unwrap() 34 35 bpy.ops.transform.resize(value=(2,2,2)) 36 cube=bpy.data.objects['Cube'] 37 cube.rotation_mode='XYZ' 38 cube.rotation_euler=(-math.pi/3, math.pi/2, math.pi/2) 39 40 EOL 41 blender -P /tmp/tmp.py
上記スクリプトを実行すると、Blenderが起動します。さらにF12を押せばレンダリングが始まって下のようなキューブが表示されます。
今回はBlenderを起動するスクリプトなので、レンダリングと画像保存は手動でしなければなりません。
コメント