blenderスクリプト使えるようになりたい!

blender2.79向けです!!!しかしやり方は2.8でも同じなはず


スクリプト。使えたら便利だろうなーっとずっと思いつつ、スクリプトの作り方とかでググると「このぐらいわかるよね!」ってテンションで数百行のスクリプトを読ませられるし、かといって逆に初心者向けでググると「スクリプト一行で!キューブを作成できました!おしまい!」みたいなかんじで、キューブ作成とかスクリプトよりキーボードショートカットで作成したほうが早いわ!みたいないまいち実用性がない…

そんな感じなので、超入門だけど最低限の実用性があるblenderスクリプトの記事を書いてゆきます。

この記事を読むと何ができるようになるの?

複雑なことはまだできません。ただ、普段blenderを触っていて(この一連の作業何度もやってるな…)とか、いつもやってるけどめんどくさい作業をスクリプトにすることによって、10回クリックしてた作業を1クリックで終わらせて普段の作業をちょっと楽にしようというレベルです。

具体的には

・選択した複数のオブジェクトを複製して
・モディファイヤーの適用をして
・オブジェクトを結合して
・トランスフォームの適用をして
・レイヤーを変える

という作業を自分でやるんじゃなくスクリプトにやらせたい

画像1

(動かないオブジェクトをunity向けに書き出すときひとまとめにしてエクスポートしたいんだけど、モディファイヤーの適用とかいちいちめんどくさいんだよね…)

それでは具体的にやっていきます。

「やりたいこと」のスクリプトを調べる

調べるって言ってもグーグルで検索するとかしないよ。スクリプト調べるのめんどくさいんだよ…blenderのバージョンによっても変わるし…もっと簡単な方法あるから紹介するね

画像2

まず画面上のほうにある「スクリーンレイアウト選択」メニューをDefaultからScriptingに変更します。

画面がスクリプト用のものに変わるよ

そしたら実際にスクリプトにやらせたい作業を自分でやってみる

オブジェクトを選択して複製を普段通りにやってみると上のところ「情報ウィンドウ」になんか文字が追加される

画像3

これが、「選択したものを複製するスクリプト」だ。選択してコピーできるので、メモ帳とかに保存しておこう

bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False, "use_accurate":False})

コピーした文字列を画面下側の黒いウインドウに張り付けてエンターキーを押すと、選択されているものがさらに複製されるはず。

画像4

同じように、モディファイヤーの適用(オブジェクト>適用>形状をメッシュ化)とか、オブジェクトを結合とか、トランスフォームの適用とか、レイヤーを変えるとかして文字列を確認していく

全部集めたらこんな感じになった

bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False, "use_accurate":False})
bpy.ops.object.convert(target='MESH')
bpy.ops.object.join()
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
bpy.ops.object.move_to_layer(layers=(False, False, False, False, 
False, False, False, False, False, False, False, False, False, 
False, False, False, False, False, False, True))


集めた文字列からスクリプトを作る

といってもさっき集めたものの頭に「import bpy」を追加するだけ。

import bpy
bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False, "use_accurate":False})
bpy.ops.object.convert(target='MESH')
bpy.ops.object.join()
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
bpy.ops.object.move_to_layer(layers=(False, False, False, False, 
False, False, False, False, False, False, False, False, False, 
False, False, False, False, False, False, True))

そして、画面真ん中左側の灰色のところ、テキストウインドウで新規作成を押し、集めた文字列を張り付けて実行を押すだけで、いままで手作業でちまちまやってた作業が一発でできるようになります。

画像5

おしまいです

なんか結局コピペとかしただけで簡単にスクリプトを使えそうな雰囲気を味わえたんじゃないでしょうか?

ループとかIF文とか使うともっともっとすごいことができるけど、そういうのは「すごいことがしたい!」って思ってから手を出すので良いよ

まずはいつもの不便をちょっと便利にするところからやっていき!

こちらからは以上です。

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