忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

【Python入門 01】コピペで覚えるぱいそん【Blender】

Python

更新日:

Blenderのプログラミングの解説を、簡単なサンプルコードを使って紹介する。

プログラミングを覚えるには 「コードを打ち込めば、ほんの少しでもなにかが変わる」という楽しさを実際に体感するのがよいと考えているので、まずはサンプルコードをコンソールにコピペして使う。

手打ちするよりまずコピペして、コレを使うとなにが起きるのかを把握しながらやること。
手打ちは打ち損じや文法ミスの元なので、コピペで作っていくほうが堅実。

準備

コンソールエディターを開く

コードを打つためのコンソールエディターを開いておく。

ヘッダーにあるWorkspaceを、一番右端にある[Scripting]に切り替えておく。
コンソールと情報エディター・テキストエディターが用意されて出てくる。

Workspaceの切り替えでなくても、ウィンドウエリアの1つをコンソールに変えて、コードを打ち込める状況にしておけばよい。

  • ウィンドウの左上のアイコンからエディタ切り替え → [Python Console]

Cubeオブジェクトを作っておく

サンプルコードでは、シーン内にあるCubeを使うため、Cubeという名前のオブジェクトがシーンになければ、作っておくこと。

  • 追加(Shift + A) → Mesh → [Cube] から、Cubeオブジェクトを作成

オートコンプリート機能を利用する

ヘッダーにある [オートコンプリート]を実行すると、現在書いている内容から予想される続きを、自動補完することができる。
今できることが一覧表示されるので、迷ったらとりあえず使ってみると良い。
逆にこれで続きが出てこない場合は、書き方が間違っている場合が多い。

bpy.data.objects[’ とまで書いた状態で実行すると、Blendファイル内に存在するオブジェクトをリストすることができる。


bpy.~

必須のまえがきみたいなもの。(BlenderPythonの略?)
単体では使わないので、とりあえず最初にいるものと思っておけばいい。

bpy.ops.~

あらかじめBlenderが用意した機能を実行できる。
オペレーター(operator)の略。

普通にBlenderを操作している時に実行されるもののほとんどはこれのため、プログラミングをしないユーザーには一番身近ではないだろうか。

注意点

このbpy.opsは利用できる状況が限定されていたり(特定のエディターでなければ動作しない・編集モードだと実行できないなど)、動作した結果を取得できなかったりする(オブジェクトの新規追加はできるが、追加したオブジェクトデータを直接確認できないなど)。
このため、bpy.opsを利用したソースコードはあまりよくない。

選択オブジェクトを削除

bpy.ops.object.delete()

全選択

bpy.ops.object.select_all()

()にプロパティを追記

コードを見ると、行末にカッコ()がついていることがわかる。
ここに、用意されたプロパティ(オプション)の設定を記入することができる

それぞれのオペレーターごとに様々なプロパティがあり、どんなプロパティがあるかを詳しく調べるには、BlenderのAPIで検索して閲覧するとよい。

  • TOGGLE 切り替え。デフォルトではこれ
  • SELECT 選択
  • DESELECT 選択解除
  • INVERT 選択を反転

bpy.ops.object.select_allの検索結果 - BlenderAPI

全選択解除

全選択は、デフォルトで全選択と全選択解除が切り替わるようになっているため、常に全選択解除のみにするプロパティ。

bpy.ops.object.select_all(action='DESELECT')

Operator をコピーする方法

情報エディターから実行履歴を見ることができるため、そこからコピーしてコンソールで実行することができる。

他にも、下記の開発者用オプションをオンにしておけば、ボタンを右クリックしたときにPythonコマンドをコピーすることができる。

bpy.data.~

Blendファイル内に存在するデータそのものにアクセスできる。

主に全データにアクセスする時に使うことが多い。

サンプルコード

Cubeにアクセスする

"Cube"という名前のオブジェクトにアクセスする

bpy.data.objects['Cube']

Cubeを選択する

bpy.data.objects['Cube'].select_set(True)

Cubeの名前を「HOGE」に名前変更する

bpy.data.objects["Cube"].name = "HOGE"

すべてのオブジェクトを確認する

for obj in bpy.data.objects:
    obj.name

bpy.context.~

現在のシーン内での状態から、データにアクセスできる。
オブジェクトやシーンの設定の状態などにアクセスすることができる。
重要なのは、状況によって内容が随時変わるものだということ。

サンプルコード

現在選択中の全てのオブジェクトにアクセスする

bpy.context.selected_objects

現在選択中のアクティブオブジェクトにアクセスする

色々あるが、全部同じ

bpy.context.object

bpy.context.active_object

bpy.context.view_layer.objects.active

スナップ機能を有効にする

# スナップ機能を有効にする
bpy.context.scene.tool_settings.use_snap = True

アドオンの制作依頼はこちら

-Python
-, , , , , ,

Copyright© 忘却まとめ , 2024 All Rights Reserved Powered by STINGER.