弊社(LEANSYSTEM)では、積極的にAIをWeb制作やシステム開発などに活用しています。この記事ではBlenderアドオンを作成した際のAI活用についてご紹介していきます。
弊社はModelTownという3Dプログラミング学習ソフトを独自開発し、国内・国外問わず子供たちにプログラミング授業を行っています。
その活動の一環でDoodle3Dというソフトで子供たちが3Dモデルを作成し、3D空間にプログラミングで配置するという授業を行うことになりました。
ただし、3D空間にDoodle3DからエクスポートしたOBJファイルはそのまま使えず、Blenderで特殊な変換をしなければなりません・・・。
そこで、その変換作業を時短するために、ほぼすべて自動で行ってくれるBlenderアドオンをAIを使用して作成しました。
今回使用したのはAIはClaude.ai、必要に応じてChatGPT、Geminiも利用しました。
以下は、その際に指示した内容です(一部紹介のために簡潔化・割愛しています。)
<AIへの最初の指示>
Blenderで、選択中のオブジェクトに複数のマテリアル(カラーが付いたもの)があります。
1つ新しい「Bake」という名前の横512px 縦512pxの画像を作ります。 そして、すべてのマテリアルに、TextureImageノードを作り、先ほどのBake画像を割り当て、Generateにします。 そのTextureImageノードは選択中のオブジェクトのすべてのマテリアルに配置します。
その後、レンダーエンジンをCyclesにして、BakeTypeをDiffuseにして、InfluenceのContributionsをColorのみにチェックを入れ(他はチェックを外す)、MarginをSize5pxにして、Bakeを実行するスクリプトを作ってください。
<次の指示>
※コードは省略しないでくださいね。
TextureImageノードを作るとき、ノードは繋げないでください。
ベイクが終わった後、すべてのマテリアルを消し、一つBakedというマテリアルを作り、PrincipledBSDFに、TextureImageノード(先ほどのBake画像をSingleImageでセット)をつなげてください。
「※コードは省略しないでくださいね。」はコピペするだけで使用できるようになるので、案外大事な文言として使用しています。
このようにして、AIにスクリプトを生成してもらい、Blenderで貼り付け、動作確認、修正をAIに指示という繰り返しでスクリプトをどんどん改良していきます。
<より具体的な指示>
UV展開自体はしません。しかし、まずUVMapsをすべて消してUVMapというUVを作成し、現在選択されているオブジェクトのマテリアル数を「material_count」という変数に入れ、material_countを2で割った数(小数点は切り上げの数)を変数「material_count_half」に入れます。
「((doodle3d_image_size -(doodle3d_image_size – 10 * material_count_half)) / material_count_half) / doodle3d_image_size」を「uv_margin」に入れます。
「(doodle3d_image_size / material_count_half – 10) / doodle3d_image_size」の値を変数「reduction_rate」に入れます。
そして、マテリアルごとに繰り返しUV展開して、UV座標を移動していきます。(繰り返しはforを使い、material_countの個数分繰り返します。繰り返し回数は1から始まり、iに入れます。そのほかに変数f=1とh=1を用意します)
1:頂点編集モードにして、全部の頂点を非選択状態にして、i番目のマテリアルの頂点を選択します(参考:# 全ての頂点を非選択状態にする bpy.ops.mesh.select_all(action=’DESELECT’) # i番目のマテリアルの頂点を選択 for face in bm.faces: if face.material_index == i – 1: face.select = True)
2:UVMap編集画面に移動し、展開されたUVMapを全部選択し、2Dカーソルを0,0の位置に持っていき、2Dカーソルを軸に、reduction_rate分、縮小します。
3:UVのX座標を移動させます。UV移動くり返し中、移動させたらfをプラス1します。(f * uv_margin)+((f-1)) * reduction_rate)分X座標を動かしますが、(f * uv_margin)+((f-1)) * reduction_rate) + reduction_rate が1を超えるならば、fを1にします。
4:UVのY座標を移動させます。UV移動くり返し中、(f * uv_margin)+((f-1)) * reduction_rate) + reduction_rate が1を超えたら、hをプラス1します。(h * uv_margin)+((h-1)) * reduction_rate)分Y座標を動かします。
5:1からmaterial_countの数繰り返します。
上記は、こちらである程度計算式を考えて、スクリプトを作ってもらった時の指示です。途中でUVMapは展開しないほうが良いと気づき、展開しない指示に変え、UVのアイランドをマテリアルごとに位置をずらして配置してベイクするための準備のための指示をしました。
そうこうして、今まで生成して改良したスクリプトを張り付けて、以下のように指示すると、Blenderにインストール可能なアドオンになります。
アドオンにしてください
実際にアドオンが最低限思った通りの動きになるまでには3~4時間かかりました。それから不具合などの修正でさらに時間を要しました。
また、AIといっても完ぺきではなく、実際に存在しない関数や引数を生成してくる場合もあるため、Blenderの実際に実装されているスクリプト・ファイル群を検索し、確認するという作業もありました。
このように30回、40回、50回と、AIとのやり取りを駆使して、自動でOBJからUVMap移動処理、ベイク処理、GLB書き出しまで行ってくれるアドオンができ、処理の手軽さに大変助かっています。
目的のものを作るためには、最低限対象のソフトなどの基礎知識は必要ですが、pythonを学んでなくても指示していくだけで、アドオンを作れてしまうのは、本当に驚きです。
Blenderでこんなものを作りたいけど、AIにどのように指示したら良いかわからない・・・など、AIについてお困りごとがありましたら、ぜひLINEよりお気軽にお問い合わせください。
<代行費用>
1時間5000円で代行いたします。
初回2時間は無料です。
代表取締役社長:吉田 基崇
Webサイト制作
Webシステム・サービス開発
顧客アプリ開発
[本店]
〒815-0081
福岡市南区那の川1-19-20
[東京支店]
〒131-0043
墨田区立花2-26-11
有限会社出沼木工所内
Tel:092-983-6427
Fax:092-983-6428
本サイトの掲載記事、写真、イラスト、コンテンツの無断転載を禁じます。
記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。
© 2017-2024 LEANSYSTEM. All rights reserved.