bpy_text_labは、Blenderのbpyモジュールを活用して、テキストベースで3DCGモデルを構築・管理できる新しい制作フレームワークとして実装しています。スクリプトによる自動化やバージョン管理に最適で、手動操作を最小化したスマートな3D制作を実現します。
詳細は、こちらの"bpy_text_lab"リポジトリ内のREADME等合わせてご覧ください。
bpy_text_labとは?
Blenderでの3D制作を「コードで管理」できたら…
そんな発想から生まれたのが bpy_text_lab です。
Blenderのbpyモジュールを活用し、テキストベースで3DCGモデルを生成・編集・管理できるフレームワークで、再現性の高い制作フローやスクリプトによる自動化に最適化されています。
Blender × Pythonによるテキストベースの3DCG制作
Blenderの通常のモデリングはGUI操作が中心です。
一方 bpy_text_lab は、「コードで構築する3Dシーン」 をコンセプトにしています。
GUI操作をPythonスクリプトで自動化することで、誰でも同じ結果を再現できるモデリングを実現します。
次は、本リポジトリにSAMPLE_PROJECTとして置いてある、bpy_text_labで生成した3Dモデルの例です。
「GUI操作からコード管理へ」という発想の転換
従来のBlender制作では、オブジェクトの追加やマテリアル設定、アニメーション制御などを 手作業でGUI上で操作 するのが一般的です。
しかし、この方法では 再現性や共有性が低く、別の環境で同じ結果を作るのは困難 という課題があります。
bpy_text_labでは、これらの操作をすべてテキストコード(Pythonスクリプト)として定義することで、制作工程そのものをソースコード化します。
これにより、3Dデータの変更が「手作業」から「バージョン管理可能な変更履歴」へと変わり、プロジェクトの管理性と透明性が飛躍的に向上します。
たとえば次のような違いがあります:
| 従来(GUI操作) | bpy_text_lab(テキスト管理) |
| 手動でオブジェクトを追加・位置調整 | Pythonコードでオブジェクト定義を記述し、実行するだけ |
| .blendファイルにのみ状態が保存される | .pyファイルで再現可能。Git管理が容易 |
| 履歴の追跡や差分比較が困難 | 変更内容を差分として確認・レビュー可能 |
| 他のBlenderバージョンや環境で再現が難しい | 環境差があっても再実行で同じシーンを再構築可能 |
つまり、bpy_text_labを使うことで「3DCGを編集する」という行為が、プログラムを書くことに変わります。
この変化により、3D制作がソフトウェア開発のワークフローと同じように扱えるようになります。
その結果、チームでの開発、レビュー、ロールバック、再現実験といった概念が3DCG制作にも持ち込めるようになり、
「3Dを“操作する”時代から、3Dを“記述する”時代へ」という新しい制作文化を実現します。
なぜテキストベース化が有用なのか
Full TextでBlenderを扱うことができるようにしたことで主に以下の利点が挙げられます。
- 再現性の高い3Dモデル制作フロー
- Gitなどのバージョン管理システム(VCS)で行程/成果物を管理
- 複数人での共同作業
- コピペで他プロジェクトへ流用
- Blender特有の操作感に慣れる手間の削減
- 作成途中段階への変更
- 生成AIによるテキストベースでの容易な作業補助
bpy_text_labでできること
bpy_text_labを使えば、Blenderの3D制作工程を すべてPythonコードで記述・再現 できます。 GUI操作の代わりにコードを実行するだけで、誰でも同じ結果を再現できる3Dモデル制作フロー を確立できます。

ここでは、bpy_text_labで可能な主な機能やワークフローを紹介します。
モデリング工程をスクリプト化
通常、GUIで行う オブジェクトの追加・変形・モディファイア設定 などの操作を、Pythonコードだけで再現可能 です。
少ない行数でモデルを追加・移動・サイズ変更でき、再現性と共有性が飛躍的に向上します。
たとえば以下のように、数行のスクリプトでモデルを追加、サイズ変更、移動可能です。
import bpy
# オブジェクト追加
bpy.ops.mesh.primitive_cube_add(
size=1 # 1辺長
, location=(0, 0, 0) # 配置場所
, scale=(1.0, 1.0, 1.0) # x, y, y
)
# サイズ変更
bpy.ops.transform.resize(
value=(1, 1, 1)
, orient_type='GLOBAL'
)
# オブジェクト移動
bpy.ops.transform.translate(
value=(0, 0, 0)
, orient_type='GLOBAL'
)これらの基本的な操作はBlenderにあらかじめAPIとして定義されており、これらを利用することで、再現性・共有性が飛躍的に高まります。
プロジェクト構造の統一と再現性
bpy_text_labでは、プロジェクトテンプレートが用意されており、 以下のような標準的な制作フローに沿ってフォルダ・スクリプトを整理できます。
この流れを1つのスクリプトまたはモジュール単位で管理できるため、 チーム全体で統一された制作手順を維持できます。
モデル・マテリアルの資産化
bpy_text_labでは、モデルやマテリアルを「再利用可能な資産」として蓄積 することを重視しています。
これにより、複数のプロジェクトで共通オブジェクトやシェーダ設定を モジュールとして管理し、即座に再利用可能 にできます。
複数のプロジェクトで共通して使用するオブジェクトや、頻繁に使うノードツリー(シェーダ設定)、マテリアル構造などをスクリプト化してモジュールとして管理することで、次の制作に即座に活かすことができます。
再利用を前提とした構造化
スクリプト化されたモデルは、単なるオブジェクト定義ではなく、引数によってパラメータを調整可能な構造を取ることで、同じコードから色・サイズ・形状を自在に変化させることができます。
例えば「椅子」や「机」といった基本モデルを、パラメタライズ化することで、他プロジェクトではわずかな設定変更だけで別バリエーションを生成できるように構成することが可能です。
マテリアルやノード設定の再現

BlenderでGUI操作によって構築したノードツリーも、bpyを通じてスクリプトとして完全再現可能です。 これにより、マテリアル設定をテンプレート化し、「共通マテリアルライブラリ」として扱うことができます。
ノードベースの設定をコードで表現することで、どのプロジェクトでも同一の結果を得られるほか、Gitによる差分管理やレビューも容易になります。
構造管理と流用性の両立
さらに、モデル構造をEmpty(空オブジェクト)による階層管理で整理しておくことで、一塊の「モジュール的モデル」として他のBlendファイルやスクリプトからも簡単に呼び出すことができます。 これにより、「コピペで使える3Dモジュール」という概念が実現し、制作の初動コストを大幅に削減します。
- ノードツリー(シェーダ)の設定をスクリプトで再現・再構築
- Emptyを活用して、階層構造を保ったまま一括で管理
- 引数を活用して色・サイズ・形状などを柔軟に切り替え
- 共通マテリアル・共通モデルとして複数プロジェクト間で共有
こうした「資産化の仕組み」が整っていることで、bpy_text_labは単なる自動化ツールではなく、スクリプトによる再利用可能な3D制作プラットフォームとして機能します。
操作の資産化
bpy_text_labでは、モデルやマテリアルだけでなく、制作過程で行った操作そのものも「資産」として再利用できる点が大きな特徴です。
Blenderの操作はGUI中心で複雑になりがちですが、本ツールではすべての操作をPythonコードとして明示的に記録・管理できるため、過去の操作を再実行・再利用することが容易です。
操作履歴の再利用
GUIでの手動操作をスクリプトとして残しておくことで、同じ作業を何度でも正確に再現できます。 例えば、過去に行ったライティング設定、ベイク処理、マテリアル調整なども、テキストコードのコピー&ペーストだけで再適用可能です。 これにより、Blender特有のツール操作に慣れるための時間を削減し、制作効率を大幅に向上させます。
関数化による操作ライブラリ化
頻繁に行う操作は関数化して自作ライブラリとして管理することで、より体系的な再利用が可能になります。 これにより、「定型操作の自動化」や「ワークフローの統一化」が実現し、個々の作業者のノウハウをコードとして共有できるようになります。
- 過去の操作コードを再利用し、同一環境を再現
- 定型処理を関数化して操作ライブラリを構築
- 新しいプロジェクトで即座に活用可能
- ツール習熟のコストを大幅に削減
このように、操作自体を知識資産として蓄積・再利用できる仕組みを備えることで、bpy_text_labは単なるスクリプト実行環境ではなく、3D制作ノウハウの共有・再現基盤として機能します。
Git連携と差分管理
制作物が.pyファイルであるため、Gitなどのバージョン管理システムと親和性が非常に高くなります。
- 変更履歴をGitログとして追跡可能
- ブランチ単位でシーンを比較・マージ
- レビューやロールバックが容易
これにより、3Dモデル制作がまるでプログラム開発のように、 「レビュー・共有・再現」ができる開かれたプロセスになります。
モデルのエクスポート
最後に、bpy_text_labはglTF / glb形式への自動エクスポートに対応しています。 これにより、スクリプトを実行するだけで最終成果物をビルドし、 ウェブビューアやゲームエンジン(Unity / Unreal)に即座に取り込むことが可能です。
実際に使ってみる
ここでは、bpy_text_labを実際にセットアップして動かす手順を紹介します。 BlenderとPython環境があれば、数分で自動生成された3Dシーンを体験 できます。 初めてでもすぐにセットアップして、スクリプトによる3D制作の利便性を実感可能です。
ステップ①:環境準備
まず、bpy_text_labを動かすための基本環境を整えます。
- Blender をインストール(バージョンはGit READMEを確認)
- Git をインストールし、環境変数(PATH)に登録
- 任意の作業フォルダを用意
準備ができたら、次のコマンドでGitHubからリポジトリを取得します。
git clone https://github.com/sukima-log/bpy_text_lab.gitステップ②:Blender内でスクリプトを実行
bpy_text_labはBlenderのText Editorから直接実行できます。 インストール後、以下の手順で動作を確認します。
- Blenderを起動
- エリア選択から「Text Editor」を開く
- Text Editorで 「main.py」 を開く(※リポジトリのProjectディレクトリにあります)
- 「Run Script」をクリックして実行
これで、スクリプトベースの3Dシーン構築が開始されます。 実行後、3Dビューにオブジェクトが自動生成されていれば成功です。
実行方法については以下も参考にしてみてください。
ステップ③:プロジェクト構造を理解する
bpy_text_labのプロジェクトは、3D制作工程をディレクトリで明確に分離する構造を持ちます。 これは「テキストで再現可能な制作工程」を目指した設計思想に基づいています。
SAMPLE_MODEL // サンプルプロジェクトディレクトリ(Top)
├── bake_texture // ベイクした画像格納ディレクトリ
├── d00_mdl // モデリング作業ディレクトリ
├── d01_uv_unwrap // UV展開作業ディレクトリ
├── d02_mtal // マテリアル作業ディレクトリ
├── d03_bake // ベイク作業ディレクトリ
├── d04_bone // アーマチュア(ボーン)作業ディレクトリ
├── d05_animation // アニメーション作業ディレクトリ
├── d06_shape_key // シェイプキー作業ディレクトリ
├── glb // グローバルファイル格納ディレクトリ
├── __init__.py // プロジェクト外流用用
├── main.py // Mainファイル (★これをBlenderで実行)
├── README.md // README
└── wrap // 上記作業整理用ファイル格納ディレクトリ各ディレクトリが制作工程ごとに分かれているため、モデリング、UV展開、マテリアル設定などの作業を独立したスクリプト単位で管理できます。 これにより、1つの変更が他の工程に影響しづらくなり、再現性と保守性が高いワークフローを実現します。
ステップ④:動作確認と応用
「SAMPLE_PROJECT」に用意されたサンプルスクリプトが呼び出され、3Dモデルが自動生成されます。 正常に生成された場合は、シーン上にモデルが生成されます。生成されるモデルは、READMEのSample Modelを確認ください。
自作モデルを追加する場合は、SAMPLE_MODELをコピーしてくるか、UNIXコマンドを使用できる環境で、「00_gen_project_dir.sh プロジェクト名」を実行すると、プロジェクト用のディレクトリのテンプレートが生成されます。制作の詳細やカスタマイズ方法については、今後別記事でより実践的なサンプルを紹介予定です。
bpy_text_labの設計思想
bpy_text_lab は、Blenderを完全にスクリプトベースで制御することを目的としたフレームワークです。 その設計思想は、「人手による操作を減らし、再現性の高い制作環境を構築する」ことにあります。 ただし、すべてをテキストで完結させるだけでは現実的に難しい場面もあるため、手作業とのバランスを取るための仕組みも導入しています。
1. 人手による調整を減らすアプローチ
bpyによるフルテキストモデリングにはこれまでも述べてきた強力の利点がある一方で、メッシュの微調整など、人の感覚を必要とする職人技のような作業には不向きな側面があります。 特にキャラクターモデリングのような頂点位置の微修正作業では、「数値を少しずつ変更 → スクリプト実行 → 確認」というサイクルが膨大な手間となります。
そこで、テキストベースと手作業のハイブリッド手法を採用しています。 これは、次のような流れで動作します:
- ① モデルの状態(メッシュの頂点位置など)を一時保存
- ② Blender上でマウス操作によりメッシュを変形
- ③ スクリプトにより保存状態との差分を相対的な頂点移動リストとしてテキストに出力
- ④ 次回以降、スクリプト実行時にその変形を自動再現
この仕組みにより、テキストベースでの再現性と手作業の自由度を両立させることができます。 これらの補助ツールはリポジトリ内の 「Tool」ディレクトリ にまとめられます。
2. スクリプト実行の効率化アプローチ
モデル数や構成が増えるほど、スクリプトの実行時間は大幅に増大します。 そのため、bpy_text_labでは不要な処理を自動スキップする仕組みを導入しています。
具体的には、Run Script 時に以下のような制御を行います:
- モデルや出力ファイルが既に存在するかを判定
- 判定結果に基づきフラグを設定
- フラグによって処理を条件分岐(if文)し、必要な処理のみ実行
これにより、繰り返し実行時の無駄な再処理を防ぎ、スクリプトのビルドサイクルを大幅に短縮できます。
具体的には次のような部分です。オブジェクトの操作前にフラグを設定し、処理の必要のない操作は意図的にスキップできるような構造を取ります。このフラグは、glbディレクトリ内で管理され、スクリプトの実行時の最初に判定されます。
def sukima_logo_mdl(
sukima_logo=glb.glb.sukima_logo
):
if (glb.glb.sukima_logo_flg):
# オブジェクト追加
bpy.ops.mesh.primitive_cube_add(
size=1 # 1辺長
, location=(0, 0, 0) # 配置場所
, scale=(1.0, 1.0, 1.0) # x, y, y
)まとめと今後の展望
bpy_text_labが変えるBlender制作の新しい形
bpy_text_labは、従来のGUI中心のBlender制作を「テキストベース(Pythonスクリプト)」に変換することで、 再現性・共有性・バージョン管理性の高い3DCG制作を実現します。 プロジェクトをソースコードとして扱うことで、個人制作だけでなく、チーム開発や長期的な資産の運用にも対応できる新しい制作スタイルを提案しています。
このアプローチにより、モデリング・マテリアル設定・ベイク・アニメーションといった制作工程をすべてスクリプトとして統一管理でき、 再実行による再構築、履歴追跡が可能になります。
今後の開発ロードマップと貢献ガイド
bpy_text_labは、開発を継続していきます。 また次のような改善提案やコード貢献を歓迎します。
- ツール自体の改良: スクリプト実行支援ツールやUI補助機能の強化
- オブジェクト・マテリアルの追加: 再利用可能なモデル・ノード・マテリアルプリセットの提供
- ドキュメント整備: チュートリアル、使用例、サンプルプロジェクトの充実
最新の開発状況や貢献方法については、以下のGitHubリポジトリをご参照ください。
制作者はPython、Blenderともに趣味レベルの初学者のため、もっと良い方法があるよ!などといった気軽なフィードバックも歓迎いたします。
コードによる創造の自由度をさらに広げる
bpy_text_labの目的は、単にBlenderをスクリプトで操作することではなく、 「コードを書くことが、創造の新しい表現手段になる」という考えを体現することです。 テキストベースの制作は、複雑なシーンを構造的に管理し、生成的・プログラマティックな表現へと発展させる可能性を秘めています。
今後は、モジュール化された制作パイプライン、パラメトリックデザイン、など、 「コードで3Dを創る時代」を加速させる環境を目指します。
