見出し画像

【Blender Python】メッシュオブジェクトに色を付ける

PythonでBlenderのメッシュオブジェクトに色を付ける方法を紹介します。
Blenderのバージョンは2.93 LTSです。

1. コード

import bpy


# 既存のメッシュオブジェクトを削除
for msh in bpy.data.meshes:
   bpy.data.meshes.remove(msh)

# 既存のマテリアルを削除
for mat in bpy.data.materials:
   bpy.data.materials.remove(mat)


# 新規マテリアルを作成
mat_r = bpy.data.materials.new('red')
mat_r.diffuse_color = (1.0, 0.0, 0.0, 1.0)

mat_g = bpy.data.materials.new('green')
mat_g.diffuse_color = (0.0, 1.0, 0.0, 1.0)

mat_b = bpy.data.materials.new('blue')
mat_b.diffuse_color = (0.0, 0.0, 1.0, 1.0)


# メッシュオブジェクトを配置し、後でアクセスしやすいように名前を付けておく
# 立方体
bpy.ops.mesh.primitive_cube_add(location=(0, -5, 0))
bpy.context.object.name = 'my_cube'

# 球体
bpy.ops.mesh.primitive_ico_sphere_add(location=(0, 0, 0))
bpy.context.object.name = 'my_sphere'

# 円柱
bpy.ops.mesh.primitive_cylinder_add(location=(0, 5, 0))
bpy.context.object.name = 'my_cylinder'


# メッシュオブジェクトに名前でアクセスし、マテリアルを付与する
my_cube = bpy.data.objects['my_cube']
my_cube.data.materials.append(mat_r)

my_sphere = bpy.data.objects['my_sphere']
my_sphere.data.materials.append(mat_g)

my_cylinder = bpy.data.objects['my_cylinder']
my_cylinder.data.materials.append(mat_b)

2. 実行結果

画像1

ちゃんとメッシュオブジェクトごとに色が付きました。

3. 透明にしたい場合(うまく行かないやり方)

メッシュオブジェクトを透明にしたい場合は、新規マテリアルを作成するときにアルファチャンネルを1より小さい数値にすればできそうですよね。
実際にやってみましょう。

# 新規マテリアルを作成
mat_r = bpy.data.materials.new('red')
mat_r.diffuse_color = (1.0, 0.0, 0.0, 0.1)

mat_g = bpy.data.materials.new('green')
mat_g.diffuse_color = (0.0, 1.0, 0.0, 0.1)

mat_b = bpy.data.materials.new('blue')
mat_b.diffuse_color = (0.0, 0.0, 1.0, 0.1)

アルファチャンネルの値を1から0.1に変更しました。
このコードを実行してみましょう。

画像2

Layoutではちゃんと透明になりました。
しかし、レンダリングしてみると…

画像3

透明ではなくなってしまいました。
このやり方ではうまく行かないようです。

4. レンダリング結果でも透明にするには?

これは次の記事で紹介したいと思います。


この記事が気に入ったらサポートをしてみませんか?