[簡単]blenderでPythonを使って楽しよう後編

blender2.82使用

今回はちょっとPythonコンソールを使って調べてみましょう。












まず適当にモディファイアを追加します。
その次に情報ウィンドウを表示してモディファイアを消してみます。

bpy.ops.object.modifier_remove(modifier="Build")
モディファイアを消すにはモディファイアの名前(この場合"Build")が必要な事が分かります。




ではモディファイアの名前を調べてみましょう。

bpy.context.object.modfiersfierifiers[0].nameで名前が取得できました。
ここまできたらコードを書きましょう。

import bpy
for i in bpy.context.object.modifiers:
    bpy.ops.object.modifier_remove(modifier=i.name)

適当にモディファイアを何個か追加した後、このコードをテキストエディターに貼り付けて実行してみましょう。









ハイ。オブジェクトのモディファイアを全て削除する事が出来ました。
この調子ならbpy.context.selected_objectsを使って選択したオブジェクト全てのモディファイアを削除できると思うかも知れませんが、結果的に失敗しました。と、言うのもモディファイア削除のコマンドはアクティブオブジェクトを対象としているからです。つまりスクリプトでアクティブオブジェクトを指定する必要があります。

このアクティブオブジェクトを指定する方法を調べました。(2.79とコマンドが違ってた)
結果的にコマンドはbpy.context.view_layer.objects.active=〇〇でした。

これを使って選択した全オブジェクトのモディファイアを全て削除するスクリプトを書いてみましょう。前回でも触れたとおり、モディファイアをつけられないオブジェクトを処理しようとするとエラーが出るので今回はMESHオブジェクト限定で処理するようにしましょう。


import bpy
for ii in bpy.context.selected_objects:
    if ii.type == "MESH":
        bpy.context.view_layer.objects.active = ii
        for i in ii.modifiers:
            bpy.ops.object.modifier_remove(modifier=i.name)
    else:
        print(ii.name,"はメッシュオブジェクトではありません")


if,else文にしてみました。elseはif文で条件が合わなかった時に実行されるコマンドです。
では適当にオブジェクトを配置してモディファイアを追加し、全て消えるか試してみましょう。

消えましたね。モディファイアにもtypeがあるのでif文で処理を変える事が出来ます。

ちょっと混み入ってきたので最後は簡単にしましょう。
大抵の場合、テストレンダリングと本番レンダリングで設定を変えますよね?
いちいち手作業で変えるのは面倒なのでスクリプト化しましょう。
と言ってもコードは値を変えて情報ウィンドウに表示されるものをコピペするだけです。
私の場合はアニメーションが専門なので本番はフルHDでサンプル256くらいの設定です。仮レンダリングは解像度もサンプルやライトパスも少なくて充分です。それらをスクリプト化しておけば後は実行するだけで一瞬で設定を変えてくれます。本番レンダリング用と仮レンダリング用のスクリプトを用意しておくと良いでしょう。


#本番レンダリング用
import bpy
bpy.context.scene.cycles.samples = 256
bpy.context.scene.cycles.max_bounces = 12
bpy.context.scene.cycles.diffuse_bounces = 4
bpy.context.scene.cycles.glossy_bounces = 4
bpy.context.scene.cycles.transparent_max_bounces = 8
bpy.context.scene.cycles.transmission_bounces = 12
bpy.context.scene.cycles.volume_bounces = 0
bpy.context.scene.render.resolution_x = 1920
bpy.context.scene.render.resolution_y = 1080
bpy.context.scene.render.resolution_percentage = 100


#仮レンダリング用
import bpy
bpy.context.scene.cycles.samples = 64
bpy.context.scene.cycles.max_bounces = 2
bpy.context.scene.cycles.diffuse_bounces = 2
bpy.context.scene.cycles.glossy_bounces = 0
bpy.context.scene.cycles.transparent_max_bounces = 0
bpy.context.scene.cycles.transmission_bounces = 0
bpy.context.scene.cycles.volume_bounces = 0
bpy.context.scene.render.resolution_x = 1920
bpy.context.scene.render.resolution_y = 1080
bpy.context.scene.render.resolution_percentage = 25

こんな感じで用意しておくと楽ですよ。

スクリプトは定形作業や大量のオブジェクトを処理する時に威力を発揮します。
是非是非活用してみてください。
鍵は情報ウィンドウです。

続き
簡単]blenderでPythonを使って楽しよう後編_その2