Blenderで円柱をUV Unwrap

agari-title

アニメ「Sushitown ~あるスシのくらし~」 NHKの「プレ基礎英語」のアニメです。寿司たちが人間のように喋ります。これを見てると寿司が食べたくなるんです。しかも踊り食いです。ところで寿司屋の湯のみって、魚へんの漢字がいっぱい書いてあるタイプの湯のみが多いですよね。魚へんが並んでると、湯のみまで美味しく見えます。

タイトル絵は、円柱に魚へんの漢字のテキストを貼り付けた画像です。円柱なのでお茶は飲めません。(そのうち湯のみにします)
ではUVマッピングするためのUnwrapから始めます。下は円柱にちょうどよい継ぎ目を入れてUnwrapするスクリプトです。

~$ cat -n cylinder-unwrap.sh
     1	#!/bin/bash
     2	cat <<EOL>/tmp/tmp.py
     3	
     4	import bpy,bmesh
     5	
     6	bpy.ops.object.delete()
     7	bpy.ops.mesh.primitive_cylinder_add()
     8	bpy.ops.object.mode_set(mode='EDIT')
     9	bpy.ops.mesh.select_mode(type='EDGE')
    10	
    11	mesh=bmesh.from_edit_mesh(bpy.context.object.data)
    12	
    13	bpy.ops.mesh.select_all(action='DESELECT')
    14	mesh.edges[0].select = True
    15	for i in range(0,32):
    16		mesh.edges[i*3+1].select = True
    17		mesh.edges[i*3+2].select = True
    18	
    19	bpy.context.scene.objects.active = bpy.context.scene.objects.active
    20	bpy.ops.mesh.mark_seam()
    21	
    22	bpy.ops.mesh.select_all(action='SELECT')
    23	bpy.ops.uv.unwrap()
    24	
    25	EOL
    26	blender -P /tmp/tmp.py

起動したら、UVEDITORを起動します。
bl-cylinder-uveditor

外部ツールで塗り絵するので、exportします。
bl-cylinder-export

Gimpを起動して、薄い青色に塗りました。
bl-cylinder-nurie1

続いて魚へんの漢字を並べて貼り付けます。
作った塗り絵は適当に名前をつけて(/tmp/blender/agari.png)保存します。
bl-cylinder-nurie2

以下のスクリプトで、マッピングされた円柱ができます。

~$ cat -n agari.sh
     1	#!/bin/bash
     2	cat <<EOL>/tmp/tmp.py
     3	
     4	import bpy,bmesh,math,os
     5	
     6	bpy.ops.object.delete()
     7	bpy.ops.mesh.primitive_cylinder_add()
     8	bpy.ops.object.mode_set(mode='EDIT')
     9	bpy.ops.mesh.select_mode(type='EDGE')
    10	
    11	mesh=bmesh.from_edit_mesh(bpy.context.object.data)
    12	
    13	bpy.ops.mesh.select_all(action='DESELECT')
    14	mesh.edges[0].select = True
    15	for i in range(0,32):
    16		mesh.edges[i*3+1].select = True
    17		mesh.edges[i*3+2].select = True
    18	
    19	bpy.context.scene.objects.active = bpy.context.scene.objects.active
    20	bpy.ops.mesh.mark_seam()
    21	
    22	mat=bpy.data.materials.new('Material.001')
    23	mat.emit=1
    24	tex1 = bpy.data.textures.new('Tex1', type='IMAGE')
    25	fname=os.path.expanduser('/tmp/blender/agari.png')
    26	tex1.image = bpy.data.images.load(fname)
    27	bpy.context.object.data.materials.append(mat)
    28	
    29	mt=mat.texture_slots.add()
    30	mat.texture_slots[0].texture=tex1
    31	mt.texture_coords='OBJECT'
    32	
    33	bpy.data.materials['Material.001'].texture_slots[0].texture = tex1
    34	bpy.data.materials['Material.001'].texture_slots[0].texture_coords='UV'
    35	bpy.ops.mesh.select_all(action='SELECT')
    36	bpy.ops.uv.unwrap()
    37	
    38	cy=bpy.data.objects['Cylinder']
    39	cy.rotation_mode='XYZ'
    40	cy.rotation_euler=(0, 0, math.pi/2)
    41	 
    42	EOL
    43	blender -P /tmp/tmp.py

Leave a Reply

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

CAPTCHA