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
コメント