Blenderマテリアル

Blenderを起動した直後の状態は、オブジェクトとはCubeだけではなく、Camera、Lampが存在しています。

>>> list(bpy.data.objects)
[bpy.data.objects['Camera'], bpy.data.objects['Cube'], bpy.data.objects['Lamp']]

>>>

objectの中にマテリアルはありません。
マテリアルは、materialsにあります。

>>> list(bpy.data.materials)
[bpy.data.materials['Material']]

>>>

で、このマテリアルがどこで使われているかというと、Cubeということになります。

>>> bpy.data.objects['Cube'].active_material
bpy.data.materials['Material']

>>>

Cubeを消すと、Materialはどうなるでしょうか。

>>> bpy.ops.object.select_all(action='DESELECT')
{'FINISHED'}

>>> bpy.data.objects['Cube'].select=True
>>> bpy.ops.object.delete()
{'FINISHED'}

>>> list(bpy.data.materials)
[bpy.data.materials['Material']]

>>>

MaterialはCubeを消してもちゃんと残っていました。

では、新規にCubeを追加してみます。

>>> bpy.ops.mesh.primitive_cube_add()
{'FINISHED'}

>>>

全オブジェクトはというと、

>>> list(bpy.data.objects)
[bpy.data.objects['Camera'], bpy.data.objects['Cube'], bpy.data.objects['Lamp']]

>>>

CubeがまたCubeという名前で追加されました。

このCubeのマテリアルはどうなっているでしょう。

>>> bpy.data.objects['Cube'].active_material

>>>

何も表示されません。つまり、マテリアルが設定されていません。

では、先ほど行き場を失ったマテリアルをこのCubeに再設定してみましょう。

>>> bpy.data.objects['Cube'].active_material=bpy.data.materials['Material']
>>>

次は、faceのマテリアルです。

>>> import bmesh
>>> bm=bmesh.from_edit_mesh(C.object.data)
>>> bm.faces[0].material_index
0

>>>

0が返ってきました。
faceのマテリアルは、インデックスで指定します。
デフォルトのMaterialが0で、マテリアルを追加する毎にインデックスが増えていきます。

球体の各faceに別々に色を割り当ててみましょう。

>>> from random import *
>>> import bmesh
>>> bpy.ops.mesh.primitive_uv_sphere_add()
>>> bpy.ops.object.mode_set(mode='EDIT')
>>> bm=bmesh.from_edit_mesh(C.object.data)
>>> i=1
>>> for f in bm.faces:
...     bpy.ops.mesh.select_all(action='DESELECT')
...     f.select=True
...     name="Material.%03d" % i
...     m=bpy.data.materials.new(name)
...     m.diffuse_color=(random(),random(),random())
...     bpy.context.object.data.materials.append(m)
...     f.material_index = i
...     i=i+1

Leave a Reply

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

CAPTCHA