harumaxy's blog

Blender Python を VSCode で書く

Poetry, Blender はインストール済みとする。

Setup

Python のパッケージマネージャー Poetry を使う

mkdir my-bpy && cd my-bpy
poetry init
poetry add fake-bpy-module-3.4
poetry add -D flake8 black mypy
poetry shell
# Open vscode
code .

fake-bpy-module

ここはちょっとした落とし穴ポイント。

PyPi に bpy パッケージがあるが、これをインストールしてもコードを書くときにIntellisenseが動作しない。

Python は元々静的型付けがない言語だったところに、後でtypingモジュールなどで型ヒントをつけるようになった。
元の bpy には型定義がないので、型定義されたダミーの Python API コレクションである fake-bpy-module をインストールする。

Install easybpy (optional)

※入れるかはお好み。(Python のテキトーな型付けに則って作ってあるため fake-bpy-module と組み合わせるとlintエラーが出るため)

https://curtisholt.online/easybpy

Blender API をシンプルに扱うためのモジュール。
単一のpythonファイルで配布されているため、リポジトリから直接コピペしてローカルインポートすれば補完される。

easybpyを含むソースをBlenderで上で実行するには、以下のパスにもコピペしておく必要がある。

# Windows
C:\Users\${USER}\AppData\Roaming\Blender Foundation\Blender\${VERSION}\scripts\modules

# MacOS
/Users/${USER}/Library/Application Support/Blender/${VERSION}/scripts/modules

Mac easybpy path

Execute

Blender scripting tab

Blender > Scripting のタブを開く

  1. New Text で新しいpythonファイルを作成
  2. VSCodeで編集 > コピペ
  3. 再生ボタン(alt + P) で実行

フォルダマークからVSCodeで編集しているファイルを直接読むこともできる。
編集後に自動で反映されないので、赤い?マークから Reload from disk を選択する必要がある。

Logging

https://blender.stackexchange.com/questions/6173/where-does-console-output-go

Python 標準の print 関数は標準出力されるため、Blenderウィンドウ上で確認することはできない。

MacOS, Linux の場合はターミナルから Blender バイナリを実行することで、ターミナルに標準出力が表示される。
Windosの場合は Window > Toggle System Console

または、Blender で開いてるエリアから Python Console を探してデータを出力するように print 関数を override する方法もある。

下のスクリプトは Blender 4.0 で動かなくなったので、ターミナルからBlenderを起動して標準出力を見る方法の方がより簡単なので

import bpy

def print(data):
    for window in bpy.context.window_manager.windows:
        screen = window.screen
        for area in screen.areas:
            if area.type == "CONSOLE":
                override = {"window": window, "screen": screen, "area": area}
                bpy.ops.console.scrollback_append(
                    override, text=str(data), type="OUTPUT"
                )

actions = bpy.data.actions
print(actions)

コメント

初見だと環境構築にかなり落とし穴あるような...
型関連はPythonはやっぱクソ
(とはいえ使う場面が多いのでガマン)