Blenderでイカを描く


映画『SING/シング』
子供も見る映画はハッピーエンドと分かるので安心して見れますねえ。歌はきっと大人が楽しいと思います。
愛らしい動物たちの中で、特に可愛かったのがイカたち。なんとなく、こんな形だったかなあ、と思い出しつつ描いてみました。(たぶんだいぶ違ってますが)

今回は、スクリプトでこのイカを描いています。

最初のCubeを削除して、Sphereを追加します。Sphereは、縦に伸ばします。

bpy.ops.object.delete()
bpy.ops.mesh.primitive_uv_sphere_add()
bpy.ops.transform.resize(value=(1, 1, 4))

このオブジェクトは、イカの本体にします。

body=bpy.context.object

イカの耳を作ります。Y軸のEDGEを横に伸ばします。

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_mode(type='EDGE')
bpy.ops.mesh.select_all(action='DESELECT')

import bmesh
bm=bmesh.from_edit_mesh(bpy.context.object.data)
for e in bm.edges:
  if round(e.verts[0].co.y,4)==0 and round(e.verts[1].co.y,4)==0:
    if round(e.verts[0].co.z,4)>0:
      e.select=True

bpy.ops.transform.resize(value=(1.7, 1, 1))

本体の下の方は、足に置き換えるので削除します。

bpy.ops.mesh.select_mode(type='FACE')

bpy.ops.mesh.select_all(action='DESELECT')
bm=bmesh.from_edit_mesh(bpy.context.object.data)
for f in bm.faces:
  if round(f.verts[0].co.z,4)<-0.4:
      f.select=True

bpy.ops.mesh.delete()

オブジェクトモードに戻しておきます。

bpy.ops.object.mode_set(mode='OBJECT')

足を作ります。Sphereを追加し、縦に伸ばしてイカの本体の下に配置します。
足は全部で4本作ります。

bpy.ops.mesh.primitive_uv_sphere_add()
bpy.ops.transform.resize(value=(0.4, 0.4, 4))
bpy.ops.transform.translate(value=(0.4, 0.4, -2))
leg1=bpy.context.object

マテリアルを作ります。本体と足の紫と、目の白、黒です。

blue=bpy.data.materials['Material']
blue.diffuse_color=(0.1, 0.1, 0.6)
blue.emit=0.7

white=bpy.data.materials.new('Material.001')
white.diffuse_color=(1, 1, 1)
white.emit=0.7

black=bpy.data.materials.new('Material.002')
black.diffuse_color=(0.1, 0.1, 0.1)
black.emit=0

目は、Sphereで、上の方を色を変えて瞳にします。それを90°回転すればできあがりです。

bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.data.materials.append(white)
bpy.context.object.data.materials.append(black)

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_mode(type='FACE')
bpy.ops.mesh.select_all(action='DESELECT')
bm=bmesh.from_edit_mesh(bpy.context.object.data)
for f in bm.faces:
  if round(f.verts[0].co.z,4)>0.7:
      f.material_index=1

bpy.ops.object.mode_set(mode='OBJECT')

bpy.ops.transform.rotate(value=3.14/2,axis=(1, 0, 0),constraint_axis=(True,True,True))

全スクリプトです。


bpy.ops.object.delete()

bpy.ops.mesh.primitive_uv_sphere_add()
bpy.ops.transform.resize(value=(1, 1, 4))

body=bpy.context.object

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_mode(type='EDGE')

bpy.ops.mesh.select_all(action='DESELECT')

import bmesh
bm=bmesh.from_edit_mesh(bpy.context.object.data)
for e in bm.edges:
  if round(e.verts[0].co.y,4)==0 and round(e.verts[1].co.y,4)==0:
    if round(e.verts[0].co.z,4)>0:
      e.select=True

bpy.ops.transform.resize(value=(1.7, 1, 1))


bpy.ops.mesh.select_mode(type='FACE')

bpy.ops.mesh.select_all(action='DESELECT')
bm=bmesh.from_edit_mesh(bpy.context.object.data)
for f in bm.faces:
  if round(f.verts[0].co.z,4)<-0.4:
      f.select=True

bpy.ops.mesh.delete()


bpy.ops.object.mode_set(mode='OBJECT')

bpy.ops.mesh.primitive_uv_sphere_add()
bpy.ops.transform.resize(value=(0.4, 0.4, 4))
bpy.ops.transform.translate(value=(0.4, 0.4, -2))
leg1=bpy.context.object

bpy.ops.object.duplicate()
bpy.ops.transform.translate(value=(-0.8, -0.8, 0))
leg2=bpy.context.object

bpy.ops.object.duplicate()
bpy.ops.transform.translate(value=(0.8, 0, 0))
leg3=bpy.context.object

bpy.ops.object.duplicate()
bpy.ops.transform.translate(value=(-0.8, 0.8, 0))
leg4=bpy.context.object



blue=bpy.data.materials['Material']
blue.diffuse_color=(0.1, 0.1, 0.6)
blue.emit=0.7

white=bpy.data.materials.new('Material.001')
white.diffuse_color=(1, 1, 1)
white.emit=0.7

black=bpy.data.materials.new('Material.002')
black.diffuse_color=(0.1, 0.1, 0.1)
black.emit=0



bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.data.materials.append(white)
bpy.context.object.data.materials.append(black)

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_mode(type='FACE')
bpy.ops.mesh.select_all(action='DESELECT')
bm=bmesh.from_edit_mesh(bpy.context.object.data)
for f in bm.faces:
  if round(f.verts[0].co.z,4)>0.7:
      f.material_index=1

bpy.ops.object.mode_set(mode='OBJECT')

bpy.ops.transform.rotate(value=3.14/2,axis=(1, 0, 0),constraint_axis=(True,True,True))


bpy.ops.transform.resize(value=(0.4, 0.4, 0.4))
bpy.ops.transform.translate(value=(0.5, -0.77, 0.2))
eye1=bpy.context.object
bpy.ops.object.duplicate()
bpy.ops.transform.translate(value=(-1, 0, 0))
eye2=bpy.context.object



body.active_material=blue
leg1.active_material=blue
leg2.active_material=blue
leg3.active_material=blue
leg4.active_material=blue

ボーンをいれてポーズ。

Leave a Reply

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

CAPTCHA