nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【Blender】Scripting for Artists を勉強してみた Part11【3DCG】

この記事はBlender2.92で、公式チュートリアルScripting for Artistsについて勉強した内容をまとめたものです。


こんにちは!らびです。今回はBlenderScripting for Artistsというチュートリアルを実施していきます。

BlenderPythonを扱う方法です。頑張って勉強していきましょう!


ワークスペースの準備


Scripting for Artists Part11ではPythonスクリプトを使ってオブジェクト指定した値までsubdivideしてみます。


まずはLayoutワークスペースを用意して、一番下のエディタをPython Consoleに変更します。コレクションやオブジェクトは全て削除しておきます。


f:id:nomurabbit:20220305055505p:plain

オブジェクトの追加


まずはオブジェクトの追加です。今回はCubeを追加してみます。

bpy.ops.mesh.primitive_cube_add()


f:id:nomurabbit:20220305061936p:plain


引数なしだと原点デフォルトのスケールで追加されるジョ。

オブジェクトのメッシュ情報を取得する


次にオブジェクトのメッシュ情報を取得します。下記のスクリプトでは頂点、辺、面の数をそれぞれ取得しています。

len(D.objects[0].data.vertices)

len(D.objects[0].data.edges)

len(D.objects[0].data.polygons)


実行すると、このようになります。


f:id:nomurabbit:20220305062018p:plain

指定した値までメッシュをsubdivideする


今回はText Editorを使ってsubdivideのスクリプトを記述していきます。ワークスペースにText Editorを追加しておきましょう。


f:id:nomurabbit:20220305063223p:plain


ループを使ってCubeオブジェクトメッシュをsubdivideしてみます。Text Editor下記のスクリプトを追加して実行します。

import bpy

mesh = bpy.context.active_object.data

while len(mesh.vertices) < 1000:
  bpy.ops.object.mode_set(mode='EDIT')
  bpy.ops.mesh.select_all(action='SELECT')
  bpy.ops.mesh.subdivide()
  bpy.ops.object.mode_set(mode='OBJECT')


f:id:nomurabbit:20220305063629p:plain


Editモードにして見てみると…。


f:id:nomurabbit:20220305063712p:plain


スクリプトによってメッシュが細分化されたのがわかります。


スクリプトsubdivideした結果を見てみましょう。もう一度下記のスクリプトを実行してメッシュの情報を取得してみます。

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

len(D.objects[0].data.vertices)

len(D.objects[0].data.edges)

len(D.objects[0].data.polygons)


f:id:nomurabbit:20220305063932p:plain


頂点数1538までsubdivideできたジョ。

まとめ


以上、BlenderScripting for Artistsについて勉強した内容のまとめPart11でした。


PythonスクリプトからBlenderを眺めることで、よりソフトウェアに対する理解が深まりますね。


次回もぜひご覧ください。では!