Easy Bottom Lattice|選択オブジェクト底部にラティスをセットしてくれるアドオン
- Digital0 JPY

アドオンの概要 このアドオンは「Easy Bottom Lattice」という名前で、メッシュオブジェクトの足元(底面)に「ラティス」を簡単にセットアップし、変形から後片付けまでをスムーズに行うためのツールです。 ラティスは、オブジェクトを粘土のようにこねて変形させるための機能です。キャラクターの足を地面に接地させたり、モデルの特定の部分を柔らかく変形させたりするのによく使われます。このアドオンは、特に「オブジェクトの底面にラティスを配置する」という作業に特化しています。 主な機能とワークフロー このアドオンは、3Dビューのサイドバー(Nキーで表示)に「EBL」というタブを追加し、そこに専用のパネルが作成されます。 1. ラティスの生成 (Generator) 「実行」ボタン: 選択したメッシュオブジェクトの底面のサイズと位置を自動で計算し、ぴったり合ったラティスを生成します。 自動設定: オブジェクトに「ラティスモディファイア」が追加され、生成されたラティスがターゲットとして設定されます。 オブジェクトがラティスに親子付け(Child Ofコンストレイント)されるため、ラティスを動かすとオブジェクトも一緒に追従します。これにより、変形後の位置調整が楽になります。 ラティス自体には「シュリンクラップモディファイア」が最初から付いています。これにより、ラティスを別のオブジェクト(地面など)に吸着させることができ、接地変形が非常に簡単になります。 2. ツール (Tools) このセクションは、ラティスを生成した後に表示されます。 「ラティスを選択」ボタン: 変形させたいオブジェクトを選択している状態から、ワンクリックで関連付けられたラティスオブジェクトを選択できます。ラティスの編集モードにすぐ移りたい場合に便利です。 Shrinkwrap Target: ラティスを吸着させたい地面などのオブジェクトを、ここで直接指定できます。 スナップツール: ラティスの頂点を編集する際に便利なBlender標準のスナップ機能の設定が、このパネル内にコンパクトにまとめられており、素早くON/OFFや設定変更ができます。 3. 最終化 (Finalize) 「完了して削除」ボタン: ラティスによる変形に満足したら、このボタンを押します。 オブジェクトの変形がメッシュに完全に適用され、形状として確定します。 不要になったラティスオブジェクト、モディファイア、親子関係(コンストレイント)が全て自動で削除され、シーンがクリーンな状態に戻ります。 注意: この処理は元に戻せない(Undo不可)ため、注意を促すためにボタンが赤色で表示されます。 コードの各部分の解説 コードは、主に4つのクラス(機能の塊)と、それらをBlenderに登録するための部分で構成されています。 bl_info アドオンの基本情報(名前、作者、バージョン、対応Blenderバージョンなど)が書かれています。UIのどこに表示されるか (location) や、簡単な説明 (description) もここで定義されます。 OBJECT_OT_select_related_lattice (関連ラティスを選択) 「ラティスを選択」ボタンが押されたときに実行される処理です。アクティブなオブジェクトのラティスモディファイアを探し、そこに設定されているラティスオブジェクトを選択状態に切り替えます。 OBJECT_OT_finalize_and_cleanup (完了して関連ラティスを削除) 「完了して削除」ボタンの処理です。 オブジェクトの見た目上の変形を実際の形状に適用します (visual_transform_apply)。 親子関係のコンストレイントを削除します。 モディファイアをすべて適用して、変形を確定させます (convert(target='MESH'))。 最後に、不要になったラティスオブジェクトとラティスのデータをBlenderから削除します。 OBJECT_OT_add_lattice_to_bottom (ラティスを底面に追加して親子化) 「実行」ボタンの処理で、このアドオンの中核機能です。 選択されたオブジェクトの寸法 (dimensions) とバウンディングボックス (bound_box) から、底面の中心座標とサイズを計算します。 計算した位置とサイズで新しいラティスオブジェクトを生成・配置します。 オブジェクトにラティスモディファイアと親子化コンストレイントを追加し、必要な設定をすべて自動で行います。 VIEW3D_PT_EasyBottomLatticePanel (UIパネルの描画) サイドバーに表示されるUIパネルのレイアウトを定義しています。 drawメソッド内に、どのようなボタンやプロパティをどの順番で表示するかが記述されています。 オブジェクトの状態(ラティスモディファイアがあるか否か)に応じて、表示する項目を切り替えるロジックも含まれています。 register() / unregister() Blenderにこれらのクラスをアドオンとして登録・解除するための決まり文句です。アドオンを有効化するとregisterが、無効化するとunregisterが呼び出されます。