機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【Blender】Pythonを使ってパーティクルヘアーの設定を自動化する

Pythonを使ってBlenderのパーティクルヘアーを操作する

プログラムを実行すると「ヘアー生成」というタブが現れ、ボタンをクリックすると事前に設定済のパーティクルヘアーが適用されます。

 

1. はじめに

前回、BlenderPythonを使う方法を紹介しました。

www.stjun.com

今回はその応用編としてパーティクルヘアーの設定を自動化しましたので紹介します。毎回パーティクルの設定を行うのが面倒だったため結構役立っています。

 

2. コード

コードはこちらになります。

import bpy
  
# 視点をカメラにするボタン
class Camera_viewpoint_Panel(bpy.types.Panel):
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'ヘアー生成'
    bl_label = 'ヘアー生成'
    def draw(self, context):
       layout = self.layout
       row = layout.row()
       row.operator('hair.add')
class Camera_viewpoint_btn(bpy.types.Operator):
   bl_idname = 'hair.add'
   bl_label = 'ヘアーを生成する'
   bl_description = 'ヘアーを生成する'
   
   
   def execute(self,context):
       obj=bpy.context.active_object
       if len(obj.particle_systems)==0:
           obj.modifiers.new("part", type="PARTICLE_SYSTEM")
           part = obj.particle_systems[0]
           settings=part.settings
           settings.type="HAIR"
           settings.count=50
           settings.hair_length=4
           settings.use_hair_bspline = True
           settings.render_step = 8
           settings.display_step = 8
           settings.child_type = 'SIMPLE'
           settings.child_nbr = 200
           settings.rendered_child_count = 200
           settings.child_radius = 0.03
           settings.use_clump_curve = True
           settings.radius_scale = 0.001
       return{'FINISHED'}
       
bpy.utils.register_class(Camera_viewpoint_Panel)
bpy.utils.register_class(Camera_viewpoint_btn)

なお集結カーブだけはpythonから設定することができなそうなので手作業が必要です、ご注意ください。

 

3. 説明

パーティクルの設定に関わるコードは以下の部分になります。UIの説明は別の機会に紹介するため今回は省きます。

       obj=bpy.context.active_object
       if len(obj.particle_systems)==0:
           obj.modifiers.new("part", type="PARTICLE_SYSTEM")
           part = obj.particle_systems[0]
           settings=part.settings
           settings.type="HAIR"
           settings.count=50
           settings.hair_length=4
           settings.use_hair_bspline = True
           settings.render_step = 8
           settings.display_step = 8
           settings.child_type = 'SIMPLE'
           settings.child_nbr = 200
           settings.rendered_child_count = 200
           settings.child_radius = 0.03
           settings.use_clump_curve = True
           settings.radius_scale = 0.001

 

3.1 パーティクルシステムを作る

以下5文でパーティクルシステムを新規に作成しています。まず「obj=~~」で洗濯中のオブジェクトをアクティブにし、「if len~~」で既にパーティクルシステムがあるか調べます。既にパーティクルシステムがある場合はそこでプログラムは終了です、ない場合は3〜5行目の文で新しく作ります。

       obj=bpy.context.active_object
       if len(obj.particle_systems)==0:
           obj.modifiers.new("part", type="PARTICLE_SYSTEM")
           part = obj.particle_systems[0]
           settings=part.settings

以下画像の赤枠の設定と同義です。

 

3.2 親パーティクルの設定

以下の文で親の設定をしています。

settings.typeでエミッターかヘアーかを選日ます。

countは数です。lengthは髪の長さです。use_hair_bsplineをTrueにすることでBスプラインにチェックを入れます。またレンダーもビューもステップは8程度に設定しています。

          settings.type="HAIR"
           settings.count=50
           settings.hair_length=4
           settings.use_hair_bspline = True
           settings.render_step = 8
           settings.display_step = 8

上のコードは以下画像の赤枠に値します。

 

3.3 子パーティクルの設定

子の設定は以下の文になります。

           settings.child_type = 'SIMPLE'
           settings.child_nbr = 200
           settings.rendered_child_count = 200
           settings.child_radius = 0.03
           settings.use_clump_curve = True
           settings.radius_scale = 0.001

上のコードは以下の赤枠に対応します。

 

4. おすすめ

以下の本はお勧めです。