
前回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を起動するスクリプトなので、レンダリングと画像保存は手動でしなければなりません。


コメント