BlenderのPython APIを使ってMeshを作成する方法

BlenderでPython APIを使ってMeshを作成する手順についての覚え書きをメモしてみようと思います。注1

Scriptingレイアウト

普通にBlenderを起動してScriptingレイアウトにします。

左側の部分がPythonのコードを入力するテキストエディターになります。ここに必要なコードを入力していきます。

新規ファイルの作成は「New」ボタンをクリックします。

※最初からあるCamera、Cube、Lampは削除しておくと見易くなると思います。

Meshの作成

今回は入門Hello world的に立方体を作成するスクリプトを作ってみようと思います。注2

テキストエディターの部分に次のような感じでコードを入力します。

import bpy

verts = [(-1.0,-1.0,-1.0), (1.0,-1.0,-1.0), (1.0,1.0,-1.0), (-1.0,1.0,-1.0), (-1.0,-1.0,1.0), (1.0,-1.0,1.0), (1.0,1.0,1.0), (-1.0,1.0,1.0)]
faces = [(0,1,5,4), (1,2,6,5), (2,3,7,6), (3,0,4,7), (0,1,2,3), (4,5,6,7)]

mesh = bpy.data.meshes.new('Cube')
object = bpy.data.objects.new('Cube', mesh)
object.show_name = True
bpy.context.scene.objects.link(object)
mesh.from_pydata(verts, [], faces)
mesh.update(calc_edges = True)

入力できたらAlt+Pでスクリプトを実行します。

画面に立方体が表示されれば成功です。

少し解説すると、vertsで8つの頂点座標を指定し、facesで面を指定しています。(0,1,5,4)等の数字は何番目の頂点を使って面を作るかの設定になります。

Materialの設定

続いてMaterialを設定してみます。今回は面ごとに異なるMaterialを設定してみようと思います。

Materialの作成とObjectへの設定

bpy.data.materials.newでMaterialを作成しobjectに割り当てていきます。

for i in range(6):
  m = bpy.data.materials.new('material_' + str(i))
  m.diffuse_color = (int(i / 4 % 2), int(i / 2 % 2), i % 2)
  object.data.materials.append(m)

各面ごとにMaterialを設定

面へのMaterialの設定は通常Blenderを操作するようにEDITモードに移行して実行する形になります。

import bmesh

bpy.context.scene.objects.active = object
bpy.ops.object.mode_set(mode = 'EDIT')

mesh = bmesh.from_edit_mesh(object.data)
mesh.select_mode = {'FACE'}
mesh.faces.ensure_lookup_table()
for i in range(6):
  mesh.faces[i].material_index = i

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

mesh.faces[i].material_index = iの部分が実際にMaterialを設定している部分になります。代入している数字が何番目のMaterialを割り当てるかという意味になります。

※このサンプルを複数回実行するとCube.001、Cube.002という名称のオブジェクトが作成されます。スクリプト内で削除するようにはなっていませんので、手動で削除するか非表示にしておくと見易くなるかと思います。

まとめ

Meshを作成してMaterialを割り当てるだけという簡単な覚え書きですが、これだけでも外部ファイルのデータを読み込んでMeshを作成し、色付けするなど、使える場面もあるのではないかと思います。

自分自身もBlenderの勉強中ですが、機会があればaddonとかも作ってみたいと思います。

おすすめ書籍

リンク


注1 BlenderでPython APIを使うにはaddonを作成する方法もありますが、ここではaddonを使わないで、Scriptを実行するだけのお手軽な方法を使ってみようと思います。

注2 primitive_cube_addを使ってCubeを作ることもできます。


こちらの記事はWindowsの使い方というサイトで公開していた内容です。
使用していたレンタルサーバーのサービス終了に伴い移転しました。

コメントを残す

メールアドレスが公開されることはありません。