Blender で Python スクリプト：VS Code からデバッグする

# Blender で Python スクリプト：VS Code からデバッグする

こんにちは、@studio_meowtoon です。今回は、Windows 11 環境の Blender の Python スクリプトを、VS Code からデバッグする方法を紹介します。  
![python_in_blender.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/f8243cd9-1431-3429-d4cd-a5f353c7013a.png)

## 開発環境

+ Windows 11 Home 22H2 を使用しています。  

## 技術トピック

### Blender とは？  

<details>
<summary>こちらを展開してご覧いただけます。</summary>

### [Blender](https://www.blender.org/)

Blender はオープンソースの3Dコンピューターグラフィックスソフトウェアであり、無料で利用できます。

|キーワード|内容|
|:--|:--|
|Python スクリプティング|Blender は Python スクリプトを使用して操作できます。プログラム開発者は Python を活用してカスタムツールや自動化スクリプトを作成し、開発プロセスを効率化できます。|
|API と拡張性|Blender は豊富な API を提供しており、プログラム開発者は Blender の機能を拡張するためのアドオンやプラグインを作成できます。これにより、独自の機能やワークフローを追加することが可能です。|
|グラフィックス開発ツール|Blender は強力な3Dグラフィックス開発ツールです。プログラム開発者は高品質なビジュアルエフェクトやリアルタイムレンダリングを組み込むことができ、魅力的なユーザーエクスペリエンスを提供できます。|

プログラム開発者は Blender を使用して柔軟かつ効果的な3Dグラフィックスアプリケーションの開発を行うことができます。

</details>

## Windows 11 に Blender をインストール

:::note alert
Microsoft Store 経由で入手する Blender では、今回の方法ではデバッグできません。
:::

**URL**  
https://www.blender.org/download/release/Blender3.3/blender-3.3.7-windows-x64.msi/

**ダウンロードファイル**
blender-3.3.7-windows-x64.msi

**インストールパス**
C:\Program Files\Blender Foundation\Blender 3.3\

初回起動後に表示を日本語に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/fd3e36d4-95dc-9777-4f5a-b9d1b16f55ac.png)
↓ このよう変更しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/36d8224f-f3ef-7b16-d356-a0da4e6f872a.png)
その他の設定は好みで指定してください。※後で変更可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/859e6909-7ee0-fe77-843d-29b0b8c69917.png)
[次]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/da181177-1364-0fa8-a92c-8cc7a27cdd41.png)
こちらのダイアログは無視して範囲外をクリックします。下のように、あらかじめ作成された正立方体の3Dオブジェクトが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/54374474-87a2-2d5a-8306-67c7e879ed2b.png)

:::note info
ここまでの作業で、Windows 11 に Blender 3.3 LTS をインストールし、日本語表示と初期画面の表示を行うことができました😋
:::

### Blender でスクリプトを使用してみる

上部メニュー [Scripting] タブを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/e963bb3d-a24c-0aa7-c75a-9db06d19c8e2.png)
左ペインの中段 [ビュー：コンソール] に Python スクリプトを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/9a17e849-1a3c-e85d-bdd7-2098f62e75f3.png)

:::note info
Blender で Python スクリプトを使用する方法の一つとして、こちらのコンソールに Python スクリプトを直接入力して対話的に実行していくことが可能です。
:::

Python のバージョンを確認します。

```py
>>> import sys
>>> print(sys.version)
```

出力結果

```sh
3.10.9 (main, Jan 10 2023, 11:01:25) [MSC v.1928 64 bit (AMD64)]
```

Blender 3.3 LTS では、内部的に Python 3.10.9 を使用していることが分かりました。

オブジェクトの一覧を表示してみます。

```py
>>> for ob in bpy.data.objects:
>>>    print(ob.name)
```

出力結果

```sh
Camera
Cube
Light
```

この初期ファイルに、Camera、Cube、Light の3つのオブジェクトが存在していることが分かりました。

:::note info
ここまでの作業で、Blender ファイル上のオブジェクトの情報を、Blender 同梱の Python から取得して表示させることができました😋
:::

## Windows 11 に Python をインストール

:::note warn
Windows 11 に Blender 同梱の Python と同じバージョンの Python をインストールします。※ VS Code で Blender モジュールのコード補間を利用可能にする目的があります。
:::

|Blender 3.3 LTS の Python のバージョン|
|:--|
|3.10.9|

**URL**
https://www.python.org/downloads/windows/

**ダウンロードファイル**
python-3.10.9-amd64.exe

**インストールパス**
![install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/e904b78a-5c67-261d-2d9b-8ce136e0331b.png)

```
C:\Users\$USER\AppData\Local\Programs\Python\Python310  
```

※オプション設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/3c3abdd0-ccd5-33c2-0b14-41784f102457.png)
[Install Now] を押してインストールします。

Windows 11 のコマンドプロンプトで確認します。
※ Windows 11 の再起動が必要です。

```sh
> python
Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec  6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.10.9 (tags/v3.10.9:1dd9be6, Dec  6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)]
```

:::note info
ここまでの作業で、Windows 11 に Blender に同梱されている Python と同じバージョンをインストールすることができました😋
:::

### VS Code に Python 拡張機能を設定

VS Code に Python 用の拡張機能をインストールします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/a6221ac1-8850-3ecc-0054-bd1293442111.png)
[左メニュー] → [拡張機能] → [pythonで検索]
**Python extension for Visual Studio Code**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/ddb8889b-093c-756c-be6d-bd070cfb3535.png)
[インストール] します。

Windows 11 の Python の PATH を VS Code に設定します。

[ファイル] → [ユーザー設定] → [設定] → [設定の検索]

```sh
@ext:ms-python.python
```

**Python: Default Interpreter Path**

```sh
C:\Users\$USER\AppData\Local\Programs\Python\Python310\python.exe
```

任意の場所に Python スクリプトファイルを作成して、VS Code から Python ファイル実行してみます。

```py:hoge.py
print("ハローワールド")
```

VS Code でファイル右クリメニュー → [ターミナルで Python ファイル実行]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/1c6b80e3-414e-bfe9-4857-5616256d3eb1.png)
もしくは Python ファイルを選択すると表示される、右上の実行ボタンから実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/46eff018-9ed2-acc9-cacb-21df6c93bf40.png)

出力結果

```sh
hoge.py
ハローワールド
```

また、Python スクリプトをデバッグすることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/935fe139-ccf8-09f7-efa6-5ea0ac39f67f.png)

:::note info
ここまでの作業で、Windows 11 に Python をインストールして、VS Code からデバッグ可能であることを確認できました😋
:::

:::note alert
この時点では、拡張機能 **Python extension for Visual Studio Code** でデバッグを実行しています。まだ Blender とは連携出来ていません。
:::

### VS Code で bpy モジュールのコード補完を使用する設定

**fake-bpy-module** のインストールを行います。

**管理者**として実行したコマンドプロンプトから pip コマンドで **Windows 11** の Python にライブラリをインストールします。※VS Code の再起動が必要です。

pip コマンドの確認

```sh
> python -m pip --version
pip 22.3.1 from C:\Users\$USER\AppData\Local\Programs\Python\Python310\lib\site-packages\pip (python 3.10)
```

fake-bpy-module インストール(※ 3.3 は Blender のバージョンです)

```sh
> python -m pip install fake-bpy-module-3.3
Installing collected packages: fake-bpy-module-3.3
Successfully installed fake-bpy-module-3.3-20230117
```

以下のように、VS Code から Blender の bpy モジュールにコード補完が可能となります。

```py
import bpy
bpy.context.camera.angle_x
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/293fd67f-a1b8-e3de-7a4b-84b2293f8b60.png)

:::note info
ここまでの作業で、Windows 11 側の Python に **fake-bpy-module** ライブラリをインストールすることができました😋
:::

### Blender と連携するデバッガ ptvsd を設定

**ptvsd** のインストールを行います。

**管理者**として実行したコマンドプロンプトから pip コマンドで **Blender** 側の Python にライブラリをインストールします。

```sh
> cd "C:\Program Files\Blender Foundation\Blender 3.3\3.3\python\bin"
> python.exe -m pip install ptvsd
Installing collected packages: ptvsd
Successfully installed ptvsd-4.3.2
```

Blender 側のパッケージを確認します。

```sh
> python.exe -m pip list
Package            Version
------------------ ---------
autopep8           1.6.0
certifi            2021.10.8
charset-normalizer 2.0.10
Cython             0.29.26
idna               3.3
numpy              1.22.0
pip                22.3.1
ptvsd              4.3.2
pycodestyle        2.8.0
requests           2.27.1
setuptools         63.2.0
toml               0.10.2
urllib3            1.26.8
zstandard          0.16.0
```

また、VC Code で補完を有効にする為に、**管理者**として実行したコマンドプロンプトから pip コマンドで **Windows 11** 側の Python にもライブラリをインストールします。

```sh
> cd C:\Users
> python -m pip install ptvsd
Installing collected packages: ptvsd
Successfully installed ptvsd-4.3.2
```

Windows 11 側のパッケージを確認します。

```sh
> python -m pip list
Package             Version
------------------- --------
fake-bpy-module-3.4 20230117
pip                 22.3.1
ptvsd               4.3.2
setuptools          65.5.0
```

:::note info
ここまでの作業で、Blender と Windows 11 の Python に **ptvsd** ライブラリをインストールすることができました😋
:::

### Blender のファイルパス設定でユーザースクリプトの位置を指定する

:::note warn
ユーザーが作成した Blender 用の Python スクリプトを格納する為のディレクトリを作成します。
:::

ここでは以下のディレクトリを作成しました。

```
C:\Users\$USER\AppData\Local\Programs\Blender\scripts
```

Blender でユーザースクリプトフォルダを設定します。

[編集] → [プリファレンス] → [ファイルパス] → [データ] → [スクリプト]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/ce4d4a9c-acb9-e78b-4f4b-ca75d1550618.png)
ユーザー用 scripts フォルダは以下の構成にします。

```sh
scripts
    -- addons
    -- modules
```

**scripts/addons/\_\_init\_\_.py** スクリプトを作成します。

```py:__init__.py
from ..modules import *
```

:::note warn
**scripts/addons/\_\_init\_\_.py** スクリプトを作成することにより、scripts/modules に作成した Python スクリプトを、Blender からモジュールとしてインポートすることができます。
:::

#### デバッグ用のスクリプトを作成

上記の **scripts\modules** フォルダに以下の debug.py スクリプトを作成します。※ debug.py というファイル名(※モジュール名)は任意です。

```py:debug.py
import ptvsd
ptvsd.enable_attach()
ptvsd.wait_for_attach()

hoge = "hoge"
print("completed!")
```

### VS Code 側のデバッグ設定

launch.json に以下のように記述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/b8388501-bffe-9e10-8b5f-2f5b34e61982.png)

```js
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            }
        }
    ]
}
```

## デバッグの実行

### VS Code でブレークポイントを指定

VS Code で上記の debug.py を開き hoge="hoge" の箇所にブレークポイントを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/7ef17903-0b1a-4492-d54c-f10e1dd04ffa.png)

### Blender 側のスクリプトを準備

任意、または新規の .blend ファイルを開きます。

上部の [Scripting] タブを選択し、[+新規] ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/00bdfcfa-d0c1-4fb7-e897-09d5d770cfde.png)
テキストエディターに以下のように記述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/a8d387bc-185f-8f10-354d-f9fbcb9e2bf0.png)

```py:記述する内容
import importlib
import debug
importlib.reload(debug)
```

[Scripting] タブの [▶ スクリプト実行] ボタンを押します。(※Blender がデバッグ待機状態になる為フリーズします。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/c648b112-18c0-a024-dc76-70b6b81eb148.png)

### VS Code でデバッグ開始

デバッグの開始 (F5) を押します。上記の hoge="hoge" のブレークポイントで停止した状態になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/12ee2018-0a11-0dcb-87aa-257655105941.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/d029307d-39e4-c9c2-40c2-2a2e95c13c07.png)

:::note info
ここまでの作業で、Blender 側の Python スクリプトを VS Code でデバッグすることが可能となりました🎉🎉
:::

### VS Code で Blender のオブジェクトを確認してみる

debug.py スクリプトを修正します。

```py:debug.py
import bpy
import ptvsd
ptvsd.enable_attach()
ptvsd.wait_for_attach()

for ob in bpy.data.objects:
    print(ob.name)
```

for ob in bpy.data.objects: にブレークポイントを設定します。

前回と同じ手順でデバッグを実行します。VS Code のブレークポイントで停止したコード上の変数で、Blender のオブジェクト名である "Camera" という内容が取れているのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/dc1938ea-323b-ed5d-b66c-7adb98135e03.png)
また、VS Code のデバッグコンソールに出力が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/0130e8ec-4502-2020-172d-1cb61aac297c.png)

:::note info
ここまでの作業で、VS Code が Blender の Python スクリプト開発用のコードエディタ・デバッガとして利用可能であると確認できました😋
:::

## まとめ

+ VS Code で記述した Blender 用の Python コードを Blender 側から実行することができました。
+ また VS Code 側のコードにブレークポイントを設定して実行中の Python コードを停止させ状況を確認することができました。

どうでしたか？ Window 11 の VS Code で、Blender の Python スクリプトを開発する環境を手軽に構築することができます、ぜひお試しください。今後も Python / Blender の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

## 推奨コンテンツ

https://qiita.com/studio_meowtoon/items/f193a5742b7ed11e1d6d