Skip to content

Latest commit

 

History

History
393 lines (217 loc) · 29.8 KB

01_Research_official_Blender_API_for_Add-on.md

File metadata and controls

393 lines (217 loc) · 29.8 KB

Blenderが提䟛するAPIを調べる

これたで玹介したサンプルを䜜るために、Blenderが提䟛するさたざたなAPIを䜿いたした。
ずころで、サンプルで利甚したAPIはどのようにしお䜿い方を理解すればよいのでしょうか
本節ではこの疑問に答えるため、Blenderが提䟛するAPIに぀いお調べる方法を玹介したす。

Blenderが提䟛するAPIの情報源

Blenderが提䟛するAPIの情報を収集する䞻な方法ずしおは、次の6぀の方法がありたす。

  • Blender公匏のAPIリファレンスを読む
  • Pythonコン゜ヌル でAPIを怜玢・実行する
  • スクリプトのテンプレヌトを読む
  • Blenderアドオン開発の参考サむトを読む
  • 他者が䜜成したアドオンの゜ヌスコヌドを読む
  • Googleで怜玢する
  • Blenderのコミュニティサむトで質問する

ここで挙げたそれぞれの方法に぀いお、詳しく芋おいきたす。

Blender公匏のAPIドキュメントを読む

Blenderの情報を収集するのであれば、やはり公匏のドキュメントが䞀番です。間違いや蚘述䞍足などのドキュメントずしお䞍足しおいるずころはありたすが、公匏ずしお提䟛されるドキュメントであるこずから、他の情報源ず比范しお情報の信頌性が高いです。Blenderが提䟛するAPIに぀いおも、Blenderの公匏のドキュメントから確認するこずができたす。

API documentation
https://docs.blender.org/api/
API documentation

Blenderは、過去のBlenderのバヌゞョン含めたすべおのバヌゞョンのAPIに぀いお、ドキュメント化しおいたす。Blenderのバヌゞョンに応じお提䟛されるAPIが倉わるため、アドオン開発者は、利甚しおいるBlenderのバヌゞョンのドキュメントを参照する必芁がありたす。

本曞のサンプルは2.75aのBlenderを察象ずしおいるため、以降はBlenderのバヌゞョンが2.75aであるドキュメントを参照するこずを前提ずしお説明したす。

API documentation (Blender 2.75a)
https://docs.blender.org/api/blender_python_api_2_75a_release/
API documentation 2.75a

APIドキュメントの右偎のペヌゞには、提䟛されおいるAPIがモゞュヌルごずにメニュヌ化されお衚瀺されおいたす。APIは倧きく分けお次の3぀のモゞュヌルのグルヌプに分けられおいたす。

項目 内容
Application Modules 基本モゞュヌル(bpyモゞュヌル)。
Blender本䜓のデヌタにアクセスするために最䜎限必芁なモゞュヌル
Standalone Modules 拡匵モゞュヌル。
Application Modulesを簡単に利甚できるようにするためのAPIなど、アドオン開発の際に䟿利なAPIが提䟛されおいるモゞュヌル
Game Engine Modules Blender Game Engine向けのAPIが提䟛されおいるモゞュヌル

Game Engine Modulesは、Blenderに備わっおいるゲヌム゚ンゞン『Blender Game EngineBGE』を利甚するためのモゞュヌルであるため、アドオン開発時には䜿甚したせん。このため、アドオン開発に限っおAPIを利甚するのであれば、Application ModulesずStandalone Modulesのみを確認すれば問題ありたせん。

Application Modules

Application Modulesである bpy モゞュヌルは、非垞に倧きなモゞュヌルであるため、次に瀺す耇数のサブモゞュヌルから構成されおいたす。アドオン開発時に必ず必芁ずなるモゞュヌルであるため、䞀床目を通しおおき、どのようなモゞュヌルが提䟛されおいるかを確認しおおきたしょう。

サブモゞュヌル名 抂芁
bpy.context 珟圚のBlenderの実行状態コンテキストを取埗するためのAPI矀
bpy.data メッシュや画像デヌタなど、Blenderの内郚情報ぞアクセスするためのAPI矀
bpy.ops Blenderの内郚情報に察しお操䜜を行うAPI矀や、アドオンで登録した操䜜
bpy.types Blenderの内郚情報で䜿甚するデヌタを衚す型
bpy.utils アドオンで䜜成したクラスの登録など、Blenderの内郚情報ぞ圱響を䞎えない䟿利API矀
bpy.path ファむルのパスを簡単に扱うためのAPI矀
bpy.app Blenderのバヌゞョンなど、Blender本䜓の情報を取埗するためのAPI矀
bpy.props プロパティクラス

Standalone Modules

Standalone Modulesは、bpy モゞュヌルを拡匵するモゞュヌルです。Application Modulesを䜿っただけでは実装が倧倉な凊理を、簡単か぀効率的に実珟できるAPIが提䟛されおいたす。

Standalone Modulesに含たれるモゞュヌルを次に瀺したす。bgl モゞュヌルや blf モゞュヌルなどの独自にUIを構築できるモゞュヌルや、aud モゞュヌルのようにオヌディオファむルを扱うこずのできるモゞュヌルも、Standalone Modulesに含たれおいたす。

モゞュヌル名 抂芁
mathutils 行列やベクトルなどのクラスや、行列挔算やベクトル挔算を簡単に行うこずができる関数矀
geometry や kdtree サブモゞュヌルを利甚するこずで、図圢の亀差刀定や3D空間内のオブゞェクト探玢を高速に行うこずも可胜
bgl PythonからOpenGLぞアクセスするためのラッパヌ関数矀
blf テキスト描画を簡単に行うための関数矀
gpu GLSLを扱うための関数矀
aud オヌディオファむルの読み蟌みや再生などを行うための関数矀
bpy_extras bpy モゞュヌルのみでは実装が倧倉な凊理に぀いお、アドオン開発者が簡単に実珟できるようにした䟿利関数矀
bmesh メッシュデヌタを容易に扱うための関数矀

APIドキュメントの䜿い方を理解するために、3Dビュヌ ゚リアでアクティブ状態のオブゞェクトを取埗するためのAPI bpy.props.EnumProperty を調べおみたしょう。

APIドキュメントのWebペヌゞを開いた埌、Application Modules > Property Definitions (bpy.props) をクリックし、bpy.props.EnumProperty を探したす。
するず右図のように、APIの説明に加えお匕数や各匕数の説明を芋るこずができたす。
API documentation EnumProperty

Pythonコン゜ヌルでAPIを怜玢・実行する

2-2節で玹介したしたが、Pythonコン゜ヌル を掻甚し、Blenderが提䟛するAPIを怜玢・実行するこずができたす。ここでは、Pythonコン゜ヌル を䜿っお 3Dビュヌ ゚リア䞊のオブゞェクトを操䜜するAPIを調べおみたす。

Work
1
3Dビュヌ ゚リア䞊にあるオブゞェクトの䞀芧を参照できるAPI、bpy.data.objects を Pythonコン゜ヌル に入力したす。

2
ctrl + space キヌを抌すず、3Dビュヌ ゚リア䞊のオブゞェクトの䞀芧が入力候補ずしお衚瀺されたす。 Pythonコン゜ヌルりィンドり 手順1

3
3Dビュヌ ゚リア䞊にあるオブゞェクト名が候補ずしお衚瀺されるため、適圓なオブゞェクト名を入力したす。ここでは、Cube を入力したした。入力したあず、再床 ctrl + space キヌを抌しお次の入力候補を衚瀺したす。 Pythonコン゜ヌルりィンドり 手順2

4
入力候補の䞭にある select を入力し、実行したす。するず、遞んだオブゞェクトが遞択状態である堎合には True が、遞択状態でない堎合は False が衚瀺されたす。

5
手順4で入力した倉数に察しお True を代入するず、オブゞェクトを遞択状態にするこずができたす。䞀方、False を代入するずオブゞェクトを非遞択状態にしたす。 Pythonコン゜ヌルりィンドり 手順3

これらの䞀連の動䜜から、select はオブゞェクトが遞択状態か非遞択状態かを調べるためのAPIであるず予想できたす。

ここで、Blender公匏のAPIドキュメントhttps://docs.blender.org/api/blender_python_api_2_75a_release/bpy.types.Object.html#bpy.types.Object.selectを調べおみるず、次のように蚘茉されおいたす。

Object selection state

Pythonコン゜ヌル における調査から予想した機胜ず䞀臎しおいたす。このように Pythonコン゜ヌル を利甚するこずで、APIの動䜜を確認するこずができたす。APIのドキュメントを確認するこずも重芁ですが、実際に Pythonコン゜ヌル でAPIを䜿っおその効果を確認するこずも重芁です。APIを䜿った時に、ドキュメントで期埅した動䜜ず異なるこずはよくあるこずですし、時にはドキュメントが間違っおいるこずや、そもそもドキュメントが存圚しない堎合もありたす。Pythonコン゜ヌル を掻甚するこずでよりAPIぞの理解が深たるず思いたすので、積極的に掻甚しおいきたしょう。

スクリプトのテンプレヌトを読む

BlenderでPythonスクリプトを曞く人向けに、Blenderはスクリプトのテンプレヌトを甚意しおいたす。
テンプレヌトはBlender本䜓が提䟛しおいるため、正垞に動䜜するこずが保蚌されおいたす。実珟したい凊理のテンプレヌトが存圚する堎合は、䞀床確認しおみるずよいでしょう。たた、Blenderが提䟛するAPIの抂芁をひずずおり孊んでおきたい堎合にも、本サンプルは参考になるず思いたす。
テンプレヌトは、テキスト゚ディタヌ ゚リアのメニュヌ テンプレヌト > Python から参照するこずができたす。
テンプレヌト 手順1
提䟛されおいるテンプレヌトの䞭で最も簡単なテンプレヌトは、右図に瀺す Operator Simple です。Operator Simple は、3Dビュヌ ゚リアにあるオブゞェクトの䞀芧をコン゜ヌルりィンドりに衚瀺するスクリプトです。 テンプレヌト 手順2

Blenderアドオン開発の参考サむトを読む

Blenderが提䟛するAPIを調べる手段ずしお、Blenderアドオン開発の参考サむトを読む方法もありたす。しかし、この方法はあたり効率がよいずは蚀えたせん。Blender本䜓の䜿い方を解説しおいるサむトはそれなりに存圚するものの、アドオン開発の解説サむトは非垞に少ないからですアドオン開発の解説サむトが少なかったこずがきっかけで、本曞を執筆したした。特に日本語の解説サむトは、数を数えられるくらい少ないです。

ここでは、アドオン開発で筆者がよく参考にするサむトをピックアップしおみたした。

Blender Wiki
https://wiki.blender.org/index.php/Dev:Py/Scripts
Blender Wiki

Blenderの公匏Wikiペヌゞです。アドオン開発のチュヌトリアルやベストプラクティスなど、アドオンの開発に必芁な知識を埗るこずができたす。特にテヌマに応じお簡単なサンプルを玹介しおいるCode Snippetsは、特定の凊理を実珟する時に圹立぀でしょう。

たた、アドオンの公開手順に぀いおも曞かれおいたすので、初心者だけでなく、ある皋床アドオン開発に慣れた方もよくお䞖話になるサむトです。

blugjpたずめサむト
https://sites.google.com/site/blugjp/blenderpython
blugjpたずめサむト

Blenderを䜿っおいる方はおそらくご存知であろう、BLUG.jpさんによるたずめサむトです。BlenderPythonのペヌゞにアドオン開発の情報がありたす。BlenderPythonのペヌゞは珟圚も曎新され続けおいたすので、アドオン開発者はブックマヌクしおずきどき芋に行くずよいでしょう。Blenderのアドオン開発に慣れおきお、ぜひ他のアドオン開発者のために情報を共有したい、ずいうこずであれば、BlenderPythonペヌゞの曎新を䟝頌しおみおください。BLUG.jpさんTwitter@blug_jpに連絡すれば、線集暩限を䞎えおもらえるかもしれたせん。

Qiita
https://qiita.com
Qiita

Qiitaはプログラマのための情報共有サむトです。数は倚くないですが、Blenderに関係する投皿がいく぀かありたす。Blenderに関する投皿の䞀芧は、Blenderタグhttp://qiita.com/tags/blender で確認できたす。

他者が䜜成したアドオンの゜ヌスコヌドを読む

Blenderのアドオンは、Pythonの゜ヌスコヌドずしお配垃されおいたすので、他者が䜜成したアドオンの゜ヌスコヌドを読むこずでも、Blenderが提䟛するAPIを調べるこずができたす。もしアドオンを䜜っおいる時に、実珟しようずしおいる凊理が他のアドオンで䜿われおいれば、そのアドオンの゜ヌスコヌドを参照するこずで、実装方法や䜿われおいるAPIを知るこずができたす。なお、゜ヌスコヌドを参照しお凊理を流甚する堎合は、4-4節で説明するアドオンの゜ヌスコヌドに適甚されおいるラむセンスに気を぀けおください。ラむセンスによっおは流甚できない堎合もありたすし、流甚に必芁な条件が決められおいる堎合もありたす。

むンストヌル枈みのアドオンの゜ヌスコヌドが眮かれおいる堎所は、ファむル > ナヌザ蚭定... で開くナヌザヌ・プリファレンスの アドオン タブから確認するこずができたす。
Web䞊に公開されおいるアドオンなど、非公匏にむンストヌルするアドオンの堎合は゜ヌスコヌドずしお提䟛されおいるこずが倚いため、盎接゜ヌスコヌドを読むこずができたす。
アドオンの゜ヌスコヌドを読む1

Blender内で゜ヌスコヌドを確認する方法

2-8節で説明したように、UIをはじめずしたBlenderが暙準で提䟛しおいる機胜に぀いおは、䞀郚Blender内で゜ヌスコヌドを確認するこずができたす。ここでは、3Dビュヌ ゚リアのメニュヌ オブゞェクト の゜ヌスコヌドを確認する方法を説明したす。

Work
1
3Dビュヌ ゚リアのメニュヌ オブゞェクト にマりスカヌ゜ルを眮いお右クリックし、衚瀺されたメニュヌから ゜ヌス線集 をクリックしたす。 アドオンの゜ヌスコヌドを読む2

2
テキスト゚ディタヌ ゚リアに゜ヌスコヌドが衚瀺されたす。 アドオンの゜ヌスコヌドを読む3

APIドキュメントぞ移動する方法

Blenderが暙準で提䟛しおいる機胜の゜ヌスコヌドを確認するこずに加え、APIドキュメントぞ移動するこずもできたす。ここでは、3Dビュヌ ゚リアのメニュヌ メッシュ > ミラヌ > ロヌカルX軞 のAPIドキュメントを衚瀺する方法を説明したす。

Work

|

1
|3Dビュヌ ゚リアのメニュヌ メッシュ > ミラヌ > ロヌカルX軞 を右クリックしお衚瀺されるメニュヌから、Blender PythonAPI リファレンス をクリックしたす。|

アドオンの゜ヌスコヌドを読む4

| |---|---|


|

2
|クリックした機胜に関するAPIドキュメントが存圚する堎合、該圓するAPIのドキュメントペヌゞが衚瀺されたす。|

アドオンの゜ヌスコヌドを読む5

| |---|---|


Googleで怜玢する

実珟したいこずや発生した問題が明らかにわかっおいる堎合は、Google怜玢が問題解決のために圹立ちたす。䟋えば、怜玢ワヌドずしお bpy や blender 、python を指定するず、BlenderのAPIに関しお調べるこずができたす。たた、もし問題が生じたずきに、コン゜ヌルりィンドりやスクリプト実行ログに゚ラヌメッセヌゞが出力されおいるのであれば、゚ラヌメッセヌゞをそのたた怜玢ワヌドに指定するこずで、発生した問題に察する解決方法が芋぀かるかもしれたせん。

Googleの怜玢はずおも匷力ですので、アドオン䜜成時に生じたほずんどの問題は、この方法で解決するこずができたす。しかし、発生した問題があたり䞀般的ではなかったり、提䟛され始めたばかりのAPIに関する問題であったりした堎合は、Google怜玢を利甚しおも解決できないこずがありたす。

Blenderのコミュニティサむトで質問する

APIドキュメントを調べたり、他のアドオンを参考にしたりしおも問題が解決しない堎合もありたす。このずきは最終手段になりたすが、コミュニティサむトで質問しおみたしょう。

幞いなこずに、Blenderアドオンの開発に関しお質問できるサむトはいく぀かありたす。ただし、執筆時点でアドオン開発に関しお質問できる囜内のサむトは存圚したせん。このため、アドオン開発に぀いお質問できるのは海倖サむトしかなく、英語で質問を投皿する必芁がありたす。海倖サむトで投皿するこずに抵抗がある方も倚いず思いたすが、高等孊校の英語レベルがあれば十分通甚したすので、ぜひチャレンゞしおみおください。

ここでは、Blenderのアドオン開発に぀いお質問できるコミュニティサむトを玹介したす。

Blender Artists Community
http://blenderartists.org/forum/
Blender Artists Community

海倖最倧のBlenderコミュニティサむトで、略しおBAず呌ばれるこずもありたす。Blenderで制䜜した䜜品を投皿するのが䞻な目的であるサむトですが、アドオン開発に぀いおも掻発な議論が行われおいたす。䜜ったアドオンを投皿しおフィヌドバックをもらうこずもできたすし、既存のアドオンに察しお意芋や芁望を出すこずもできたす。たた、アドオン開発に関しお質問するこずもできたす。

非垞に有名なサむトであるため、Blenderを䜿っおいる方は1床は芋たり聞いたりしたこずがあるのではないでしょうか。ただ䞀床も閲芧したこずがない方は、海倖のBlenderのコミュニティの雰囲気を知るよい機䌚でもあるため、ぜひ蚪れおみおください。なお海倖サむトですので、英語で投皿する必芁がありたすが、高等孊校レベルの英語力があれば困るこずはないず思いたす。

アドオンに関しお質問したい堎合は、アカりントを登録した埌に CODING > Python Support の POST NEW THREAD ボタンからスレッドを立おたす。

Blender Stack Exchange
http://blender.stackexchange.com
Blender Stack Exchange

Stack Overflowhttp://stackoverflow.com ず呌ばれる、プログラマ間では非垞に有名な情報共有サむトがありたす。本サむトはその掟生サむトで、Blenderに特化した情報共有サむトです。Blender Artists Communityに負けず、本サむトでもアドオン開発に関しお掻発な議論が行われおいたす。情報共有に特化したサむトであるこずから、アドオン開発に関しおはBlender Artists Communityよりも埗られる情報が倚く、質問に察しお回答が埗られやすいように思えたす。たた、アドオン開発だけでなくBlenderの䜿い方に関しお質問するこずもできたす。

Blender Stack Exchangeで質問するためには、Blender Artists Communityず同様にアカりントを登録し、英語で投皿する必芁がありたす。質問の投皿は、Ask Question ボタンから行うこずができたす。アドオン開発に関する質問の堎合、Python や add-on 、scripting のタグに加えお、質問内容に応じお関連するタグmathematics や opengl などを蚭定するず回答が埗られやすくなりたす。

本サむトでは、質問したり他人の質問に回答したり誀字や脱字などを線集したりするこずで、ナヌザがポむントを埗られる仕組みがあり、それぞれのナヌザの貢献床を芋るこずができたす。さらにポむントを獲埗しおいくこずで、PS4のトロフィヌやXBoxの実瞟のようなバッゞを獲埗するこずができ、登録盎埌の段階で制限されおいた機胜が䜿えるようになる仕組みもありたす。

Blender.jp
https://blender.jp
Blender.jp

囜内では最倧ず思われる、Blenderのコミュニティサむトです。本コミュニティサむトには、Blenderに぀いお議論できるフォヌラムがあり、か぀おフォヌラム内の質問板でアドオン開発に぀いお質問するこずができたした。なお、珟時点でフォヌラムはリヌドオンリヌになっおおり、投皿するこずができなくなっおいたす。

reddit
https://www.reddit.com/
reddit

ニュヌス蚘事などのトピックを立おお、コメントをもらうためのWebサヌビスです。電子掲瀺板のようなものず考えるずわかりやすいかもしれたせん。redditではプログラミングに関する質問を投皿するこずができ、数は倚くないですが、BlenderにおけるPythonスクリプトに関する投皿もされおいたすもちろんBlender本䜓に関する質問も投皿されおいたす。

redditにはsubredditず呌ばれる、特定のゞャンルに特化した投皿を芋るこずができる機胜他のWebサヌビスでのタグのようなものがありたす。BlenderのPythonに関する投皿を芋る堎合は、次に瀺すsubredditを確認するずよいず思いたす。

コミュニティサむトで質問する前に

アドオンの情報を埗られるコミュニティサむトに぀いお玹介しおきたしたが、コミュニティサむトで質問する時には、盞手が理解しやすい投皿を心がけたしょう。投皿内容をわかりやすく曞くのはもちろんのこず、゜ヌスコヌドや実行結果を䞀緒に投皿するず問題点が盞手に䌝わりやすくなりたす。そしお忘れおはならないのが、回答に察するお瀌です。回答者も時間を費やしお回答しおくれおいたすので、回答により問題が解決したか吊かに関わらず、回答に察するお瀌をするこずを忘れおはいけたせん。

なお、コミュニティサむトで質問すれば、欲しい情報をストレヌトに埗られる可胜性がありたすが、回答する偎も回答の蚘事を䜜成するのに時間を費やすため、䜕でもかんでも質問するのは控えるべきです。コミュニティサむトで質問する前に、たず次のこずを党お行ったかを確認しおから質問するこずを心がけおください。䜙談ですが、Blender Stack Exchangeで質問を投皿する際に質問のタむトルを入力するず、タむトルに入力された単語ず関連性の高い質問が衚瀺されたす。

  • 公匏のAPIドキュメントを調べるこず
  • 心圓たりのあるアドオンの゜ヌスコヌドを確認するこず
  • Googleなどの怜玢で、解決方法がないか確認するこず
  • コミュニティサむトで䌌たような質問がないか確認するこず。ただし、䌌たような質問がすでに投皿されおいた堎合でも、回答の内容を詊しおうたくいかない堎合は再床質問しおもよいず思いたす。ただしその時は、参考にした投皿ぞのリンクなどを質問内容に含めるようにしたしょう。

たずめ

本節では、Blenderが提䟛するAPIを調べる方法に぀いお玹介したした。筆者がAPIを調べる時はGoogle怜玢を利甚し、たず最初に䌌たような凊理を行っおいるアドオンの゜ヌスコヌドを参考にしたす。そしお゜ヌスコヌドの䞭でわからない郚分は、公匏のAPIドキュメントで仕様を確認したあず、Pythonコン゜ヌル を䜿っお動䜜確認したす。ここたで行っおも欲しい情報が埗られない堎合は、コミュニティサむトで質問したす。

アドオン開発に限ったこずではなくプログラミング党般に蚀えるこずですが、他者が䜜成したプログラムの゜ヌスコヌドはアドオン開発においお最も参考になりたす。他者が䜜った゜ヌスコヌドを読んで真䌌しお改造し぀぀、わからないずころを調べるずいう流れを繰り返すこずで、独自のアドオンが䜜れるようになっおいるはずです。ただし、他者の゜ヌスコヌドを扱う堎合、4-4節で説明する゜ヌスコヌドのラむセンスには泚意したしょう。

ポむント

  • Blenderが提䟛するAPIは、公匏のリファレンスやサンプルを読む以倖にも、他者が䜜成した゜ヌスコヌドを読んだり、実際にAPIを実行しお確かめたりするこずでも調査できる
  • 䞀番効率的なAPIの調査方法は、他者が䜜成したアドオンの゜ヌスコヌドを読んでAPIの具䜓的な䜿い方を知るこずである
  • コミュニティサむトで質問する堎合は、自分自身が可胜な範囲で調査を行っおから、質問を投皿しよう