2025年12月20日土曜日

YT-Tools for Blender (External Clipboard その2)

YT-Tools for Blenderのv1.6.2とModo Clipboardのv1.0.2を公開いたしました。外部クリップボードの機能を公開した後でユーザーの方から頂いたフィードバックを元にバグ修正と機能追加を行いました。下記のような改善を行っています。

  • 転送速度を改善するためできるだけ無駄なエッジ情報をできるだけ出力しないように変更
  • 選択セットのサポート
  • 頂点カラーのサポート
  • UVシームマークのサポート
選択セットは、Modoの頂点、エッジ、ポリゴンの選択セットをYT-Tools for Blenderに実装したSelection Setと双方向に変換しています。頂点カラーはModoのRGB、RGBAをBlenderのColor Attributesと双方向に変換しています。BlenderのColor Attributesは、PointとFace Cornerのドメインの両方をコピーしていますが、Modoからの出力は全てFace CornerのRGBAデータに変換されます。UVのエッジシームは、"_Seam"という名称のUV Seamマップに変換しています。



Modo ClipboardYT-Tools for Blenderに関するバグやご要望がありましたらこちらのフォームからお願いいたします。




2025年12月11日木曜日

YT-Tools for Blender (External Clipboard)


YT-Tools for Blender v1.6
を公開いたしました。このバージョンでは、v1.5で実装したクリップボードを拡張した外部クリップボードという機能を実装しています。この外部クリップボードを利用することでBlenderとModoの間でメッシュデータの交換が可能になります。Modo側にはこの外部クリップボードに対応したModoClipboardキットを用意しました。


ModoでモデリングしたメッシュポリゴンをこのModoClipboardのCopyコマンドからコピーし、BlenderのYT-ToolsのクリップボードにあるUse External Clipboardを有効にした状態でPasteボタンを押すと、クリップボードに保存されているメッシュデータがBlenderのMeshオブジェクトに貼り付けられます。もちろんBlenderからModoへも同様の操作で転送が可能です。通常のコピペ作業と同じように選択したポリゴンだけでもメッシュの全てのポリゴンでもクリップボードに転送することができます。

転送されるデータは面ポリゴンおよび頂点データの他、下記のような属性データも転送することができます。

  • UVマップデータ(UV Sets)
  • 頂点ウェイトマップ(Vertex Groups)
  • サブディビジョンエッジウェイト(Crease Edge)
  • モーフマップ(Shapekeys)
  • マテリアルデータおよび画像テクスチャ

マテリアルに関しては基本的なDiffuseColorをBlenderのBasis Colorのみを変換しています。また、BlenderのFreestyle Edgeのマーク情報は、"_Freestyle"という名称でModoのエッジ選択セットに変換しています。

外部クリップボードに転送するデータはメッシュデータをJSON形式のテキストデータに変換して保存しています。クリップボードのタイプをOS Clipboardに変更することで変換したJSONテキストをテキストエディタなどに貼り付けて変換データを閲覧することができます。ただし、OS Clipboardには転送するデータのサイズや転送速度に制限がありますので、通常は一時ファイル経由で使用することをお勧めします。

ModoClipboardキットは、GumroadのほかGithubにも公開していますのでModoのキット形式(.lpk)のパッケージファイルに加えて、Pythonのソースコードも入手することができます。




ModoClipboardもしくはYT-Tools for Blenderに関するリクエストやバグ報告はこちらのフォームからお願いいたします。

2025年11月24日月曜日

Kelvin Sculpt キット

Kelvin Sculpt キットGumroadで公開したしました。このキットは、PixarのKelvinlets(2017)変形モデルをModoに直接組み込み、直感的なスカルプトツールセットとして提供したものです。これはKelvinletベースの変位フィールドを適用することで、シミュレーションや複雑なリギングを必要とせず、柔らかく、弾力があり、予測可能なリアルタイムのブラシインタラクションを実現します。質量が保たれて、いい感じに変形してくれるのが楽しいです。

またこの技術はメッシュのトポロジー情報を使用しないためポイントクラウドに対しても変形を行うことができます。今回はメッシュの頂点の座標値をスカルプトする機能を実装していますが。パーティクルに対しても同じアルゴリズムが使えそうです。実装はLibiglRegulared Kelvinletsを利用しています。
先月からModoのキットばかり作っていましたので、そろそろBlenderのアドオン開発に戻ろうと思っています。YT-Tools for Blenderの機能リクエストなどがありましたらGoogleフォームからお願いいたします。


ポイントクラウドに対するスカルプト


筆者は普段Visual Studio Code(VS Code)を使ってmacOS上でプログラミングをしているのですが、Googleから新しく出たAntigravityを最近試しています。AntigravityはVS Code互換のAIエディタですが、VSCodeからフォークしたプロジェクトではなく、Googleが一から開発したAIエディターのようです。今回のKelvin SculptからAnitigravityを使っているのですが、ほぼノーストレスでVS CodeからAnitigravityに切り替えることができてビックリです。見た目も操作性もほとんど変わりませんね。Antigravityが強力なのはGemini3を搭載したAgent Managerが中心になってコードの提供から単体テストプログラムの作成などをどんどん提案してくれるとこだと思います。コード補完もちょっと頑固すぎるぐらい賢いです。そのうちタブキーだけ押していけば、全部コードが完成してしまう日が来るかもしれませんね。

Gemini 3 Pro以外のモデルも選べちゃいます

上がVS Code、下がAnitigravity。互換性が高いです。

2025年11月16日日曜日

Mesh Approximation キット

Mesh Approximationキットは、Variational Shape Approximation(VSA)というアルゴリズムを使って形状近似を行う手法を応用したModoのプラグインキットです。前回実装したDecimationキットがエッジを折りたたみながらポリゴン数を減らしていく方法とは異なり、幾何学的プロキシの概念を用いて、面を最適な領域に繰り返しクラスタリングしながら誤差を軽減し、そのクラスターから近似形状を構築します。

VSAは、プロキシーにシードとなる三角形を与えていきながらリラクゼーション処理を行い、クラスタリングを行いながら入力ポリゴンを複数のセグメントに分割していきます。このアルゴリズムは実はModoのUV ProjectionツールのAtlas2というモードで利用していました。AtlasがポリゴンをXYZの主軸方向に投影した後、連続するUVポリゴンをグループ化するのに対し、Atlas2ではVSAによってセグメント分割されたポリゴンをセグメント単位に投影しています。

Mesh Approximationキットは、CGALのTriangulated Surface Mesh Approximationパッケージを使ってソースポリゴンのセグメント分割とクラスターから構築した近似メッシュを作成します。

下記はSegementationモードでセグメント分けしたメッシュ形状(中)とApproximationモードで再構築した近似メッシュ形状(右)です。


Segementationモードは分割してグループ分けしたポリゴンをポリゴンタグで出力したり、異なるセグメントの境界のエッジを選択セットに出力するようにしています。視覚的にセグメント分けされたポリゴングループを表示できるように頂点カラーをRGB Vertex Mapに書き込んでいます。これはSet Colorといオプションを有効にすると出力され、Modoの3DビューポートプロパティにあるShow Weightmapsを有効にすることで表示することができます。

セグメント化されたポリゴングループはUV展開ツールを使ってUV空間に投影することができます。Edge Selection Setで出力された選択セットのエッジはそのままUV展開のシームエッジとして使用することができますし、マテリアルやパートのポリゴンタグはUV展開ツールのSegment by MaterialSegment By Partを有効にすることでポリゴンタグの境界をシームとして利用することができます。


Approximationモードは、VSAによって構築した近似メッシュを出力するモードです。New Meshを有効にすると新しいメッシュに近似メッシュを書き込みます。この近似メッシュはCGALのCGAL::Surface_mesh_approximation::approximate_triangle_mesh()からの出力を元に作られているのですが、残念ながら元のメッシュを構成するポリゴンとの関連付けはトレースできないため、マテリアルやUVマップなどの属性情報は継承されていません。また、近似メッシュのポリゴンは全て三角形になります。

最近はModoの開発中に試してみたかったアイディアやアルゴリズムをオープンソースライブラリを使ってキットとして実装しています。ユーザーの方々からの要望に基づく機能ではないので、使い道は限定されてしまうかもしれませんね。(^^;;

2025年11月8日土曜日

Heat Weight キット

Heat Weight Kit for ModoGumroadに公開いたしました。このキットはThe Heat Methodという熱伝導のアルゴリズムを利用して指定したソースからの各頂点の測定距離(geodesic distance)を計算し、その距離をベースに頂点ウェイトを頂点ウェイトマップに設定するツールです。ダイレクトモデリングツール版とプロシージャルメッシュオペレータ版を実装しています。今回もCGALのパッケージを利用しています。ソースコードはGithubに公開しています。

通常のウェイト設定では基点となるポイントや線分などからの直線的な距離をベースにウェイトを計算しますが、The Heat Methodは、基点からサーフェイスを沿って各頂点に到達する距離を計算するので、複雑に入り組んだメッシュ形状(曲がりくねったパイプやホースなど)にウェイトを設定したい場合などで、ウェイトを設定したい場合に便利です。



基点となるソースは、頂点やポリゴンなどを選択して指定します。計算は連結ポリゴンのパートごとに行われ、一つのパートに複数のソースを指定することもできます。



The Heat Methodの計算は、すべての頂点に対した行われ、頂点に対して測定距離(geodesic distance)が保存されていますが、ソースからの影響範囲を限定するために最大距離(Maximum Distance)をツールパラメータに用意しています。この距離よりも小さい測定距離を持つ頂点に対してウェイトの正規化処理を行い、頂点ウェイトを設定しています。

Falloff Shapeは、範囲内の頂点ウェイトを減衰したいときに設定します。Constantでは最大距離内の頂点に指定した値を設定します。Linearなどを指定すると測定距離をベースに正規化して計算したウェイトを減衰して設定します。

プロシージャルメッシュオペレータでは、設定したウェイト頂点マップをWeight Falloffに指定することで、プッシュなどの他のツールのフォールオフウェイトとしてHeat Weightを利用することができます。



このThe Heat Methodで計算した測定距離(geodesic distance)は、他にも利用できそうな気がします。アイディア募集中です。


2025年11月2日日曜日

Convex Partitioning (Triangulateキット)

ModoのTriangulateキットを更新し、Convex Partitioningモードをサポートとするようにいたしました。これは三角形分割ではなく、凹型ポリゴンを複数の凸型ポリゴンに分割するモードです。三角形にする必要はないけど、できるだけ少ない数の凸型ポリゴンに分割しておきたい場合などでの使用を想定しています。


実装はCDT Triangulationで使用しているCGALの2D Polygon Partitioningというパッケージを使用しています。このパッケージは堅牢で最適化された凸型ポリゴン分割を行ってくれるのですが、Modo固有の鍵穴ポリゴン(Keyhole)は、うまく処理してくれないので、テキストから変換した鍵穴を持つ面ポリゴンは事前に手動で複数のポリゴンに分割しておく必要あります。この問題は前処理で自動処理できる方法が見つかりましたら、後ほど更新したいと思います。また、Convex Partitioningに加え、Monotone Partitioningのアルゴリズムも提供されているので、用途・要望があればMonotoneモードも追加したいと思います。

追記)ModoのキットのパッケージをダウンロードできるサイトをGumroadに用意いたしました。ここからダウンロードしていただければ、キットがバージョンアップした時に通知メールを受け取ることができます。また、GumroadにはプロダクトごとにComminityスペースがありますので、バグやご要望はそちらからお受けすることができます。



2025年10月31日金曜日

Decimate キット

久しぶりにModoのキットを作ってみました。最近はYT-Toolsの機能拡張ばかりを行っていましたので、プログラミングもPythonばかりでC++を忘れてしまいそうだったのでリハビリも兼ねてDecimateキットというポリゴンリダクションのツールを作ってみました。研究目的の実験的なツールなので、あまり実用性はないかもしれません。


今回もCGALライブラリを利用しており、Triangulated Surface Mesh Simplificationをベースに実装しています。このパッケージで提供するポリゴンリダクションのアルゴリズムはプライオリティキューに入れたエッジを順番に折りたたみ、結合した2つの頂点の位置を再配置するという従来からのアルゴリズムで折りたたむエッジの順番を評価し、結合頂点を再配置するCost Strategyに関する手法がいろいろ研究されています。

近年では高密度のメッシュからアニメーションなどでも利用可能な最適化されたトポロジーをメッシュを求める手法が主流になっていて、リトポロジーの操作も半自動でできるツールも出てきています。実用的にはエッジを折りたたむ従来からのポリゴンリダクションはもうあまり出番がないかもしれませんが、単純にポリゴン数を減らしたい場合などにはまだ活躍できるかもしれません。

このキットではCGALが提供する3つのアルゴリズムをCost Strategyというオプションから選べるようにしています。

Edge Lengthは、最も単純な方法で長さの短いエッジから順番にエッジを折りたたみ、結合した頂点はエッジの中間位置に再配置します。単純ですが一番高速です。ModoのPolygon Reductionもこの方法に近いです。

Lindstrom-Turk Cost and Placement Strategyは、簡略化された表面メッシュを各ステップで元の表面メッシュ(または前のステップの表面メッシュ)と比較しない手法をとっていて、元の表面メッシュや局所的な変更履歴といった追加情報を保持しないため、メモリコストに優れています。Decimateキットではこれをデフォルトにしています。

Garland-Heckbert Cost and Placement Strategyは、結果のメッシュを元のメッシュと比較せず、局所的な変更履歴にも依存しまが、各頂点に割り当てられた二次行列を用いて、元のメッシュへのおおよその距離を符号化します。これにより均一な三角形分割を作成できるようになり、特徴感度を維持しながらノイズに対する耐性が向上するという手法らしいです。

また、境界のポリゴンにあるエッジやマテリアルとマテリアルの間にあるエッジなど重要なエッジを指定するオプションを用意しました。これらに該当するエッジはCGALのedge_collapse関数に拘束エッジ(constrained edges)としてインプットされます。Modo上でロックを設定したエッジは自動的に拘束エッジになります。

リダクション処理を終了する条件は、全体のエッジ数に対する比率もしくは折りたたむエッジの数で指定します。Decimateキットでは内部的に対象ポリゴンを三角形に分割してから処理を行っているため、最終的なポリゴン数は元のメッシュのエッジ数からの比率にはならないことに注意してください。縮退しなかった三角形は可能な限り元のポリゴンに戻しています。



2025年10月25日土曜日

YT-Tools for Blender (Clipboard その2)

前回v1.5で実装したクリップボードの動作をユーザーのみなさんからのフィードバックに基づきマイナー変更いたしました。v1.5.1のクリップボードはコピー&ペースト実行後のエレメントの選択がModoと互換になっています。エレメントをコピーした後、コピー元のエレメントの選択状態はそのまま選択状態を保持し、ペーストしたエレメントは選択状態になります。これらの動作は初期設定パネルで変更することができるようにいたしました。v1.5の動作はModoの初期バージョンやLightWaveのコピペの動作と近いものになっていました。


また、メッシュのエレメントと同様にカーブのスプラインに対しても同様のコピー&ペーストができるようにして欲しいとのリクエストがありましたので、対応いたしました。Blenderにはスプライン単位の選択というモードがないようですので、カーブ内の特定のスプラインをコピーする場合はスプラインを構成する全てのポイントを選択してからコピーを行います。スプラインを構成するポイントを選択しやすいようにダブルクリックで実行するコンテキスト選択もスプラインで動作するように変更いたしました。



2025年10月18日土曜日

YT-Tools for Blender (Clipboard)

YT-Tools for Blender v1.5を公開したしました。今回のアップデートではソフトドラッグを改良し、UVエディタ上のUVマップを編集できるようにしたのと、メッシュエレメントのコピー&ペーストを行うためのクリップボードの実装です。

Modoではツールの設計思想に"Generalize"という概念があって、一つのツールが異なる編集対象に対して、同一の操作性を提供できるように実装されていました。トランスフォームツールやペイントツール、スカルプとツールなど多くのツールはメッシュ、UV、アイテムに対して動作するように作られています。

今回はYT-Toolsで実装したソフトドラッグがUVマップの編集で動作するように改良いたしました。ツールを切り替えることなく、クリックしたビューが3Dビューの場合はメッシュの頂点の編集、UVビューをクリックした場合はUVマップの編集を行います。UVビューでの対称は、U方向をX軸、V方向をY軸に設定して動作するようにしています。UVの対称軸はクリックしたUVの正規化空間(UDIM)によって決定しています。クリックした箇所が(0,0)-(1,1)の空間であれば対称軸が0.5になります。クリックした箇所が(1,0)-(2,1)で対称がU方向の場合は1.5が対称軸になります。


コピー&ペーストを行うためのアドオンは他にも公開されているようですが、YT-Toolsで実装して欲しいとの要望がありましたので、v1.5で実装いたしました。YT-ToolsのクリップボードはモデリングワークフローのサブツールとしてEdit Modeでのみ動作し、メッシュのポリゴン、エッジ、頂点のコピー&ペーストに特化しています。ポリゴンを選択しCopyボタンを押すと選択したポリゴンがクリップボードの内部メッシュにコピーされます。Pasteボタンを押すとコピーされたポリゴンがアクティブメッシュに貼り付けられます。アクティブメッシュはコピー元のメッシュでも別のメッシュでも構いません。クリップボードのデータは次回またコピーを行うまで保存されます。クリップボードにはポリゴンの基本データの他に下記のような属性もコピーされます。
  • マテリアル
  • UVマップ、頂点カラー、シェイプキー
  • エッジクリース、スムース、シーム、Freestyle
  • 頂点ウェイト(頂点グループ)
"クリップボードから新規メッシュ作成"というボタンは、澤田さんからいただいたアイディアで、新しいメッシュオブジェクトを作成した後に、そこにクリップボードのデータを貼り付けます。macOSのプレビューといアプリにある"クリップボードから新規作成"というメニューと同じ感覚で使うことができます。作業中のメッシュの一部分を別のメッシュオブジェクトに分離したい時の手間暇が少し改善されると思います。







2025年10月7日火曜日

YT-Tools for Blender (日本語UI)

YT-Tools for Blenderv1.4.1を公開いたしました。今回のバージョンではUIの日本語化を行っています。Blenderのプリファレンスのインターフェイスタブで言語を日本語に設定するとYT-ToolsのUIが日本語に変わります。



Blenderには、内部に翻訳辞書というものがあり、言語を日本語などに設定するとアドオンなどのメニューもこの翻訳辞書に存在する用語は自動的に翻訳されたテキストが表示されます。従って多言語化を考えずにアドオンを作ると部分的にローカライズされたUIが表示されてしまいます。翻訳テキストはグローバルな辞書にも登録できますし、アドオンの独自のカテゴリでのみ使用するローカルな辞書として登録する方法もあります。なぜかマウスカーソルを重ねた時に表示される文字列はグローバル辞書でないと翻訳文字列が表示されなかったりなど、まだ謎の仕様があります。ベターなアドオン翻訳のためにもう少し調査が必要なようです。



2025年9月24日水曜日

YT-Tools for Blender (Snapping)

v1.4を公開いたしました。このバージョンでは以前から要望があったツールハンドルのスナップに対応しています。Blenderのスナップ処理は外部には公開されていないので、アドオンはスナップパネルで設定されているスナップの設定項目を参照し、アドオンで独自に実装しました。YT-Toolsでは下記のようなスナップ設定項目をサポートしています。

Snap Target

Increment, Grid, Vertex, Edge, Face, Edge Center, Edge Perpendicularに対応しています。Vertexではメッシュの頂点およびカーブの制御点にスナップします。

Target Selection

Include Activeがオフの時にはアクティブオブジェクトのエレメントにはスナップしません。

Affect

Move, Rotate, Scaleに対応しています。

Rotation Increment

標準のインクリメンタル角度を参照します。


2025年9月15日月曜日

YT-Tools for Blender (Smooth Brush)

v1.3をリリースいたしました。このバージョンではSmooth Brushというオペレータを追加しています。メッシュの頂点をスカルプティングのようなブラシ操作で平滑化する機能です。LMBを押しながらメッシュ上をドラッグするとマゼンダ色の円の中にある頂点の座標位置が平滑化されていきます。ブラシのサイズはRMBで調整、平滑化の強さはSmooth Strengthで調整することができます。

また、このSmooth Brushの機能はSoft Drag使用時に使う事ができます。Shiftキーを押しながらLMBでドラッグするとソフトドラッグの代わりに頂点の平滑化を行う事ができます。

YT-ToolsはPythonで実装されているためパフォーマンスの問題は今後の課題です。

v1.3では、その他下記のような変更を行なっています。

  • SelectionSetsにReplaceボタンを追加
  • WorkplaneにSet to 3D Cursor and Rotationを追加
  • Display Infoで新しいシーンを読んだ後に選択情報が更新されないバグを修正
  • MergeとLoopSliceにもシンメトリーの初期値を追加
  • AddLoopとPolygonSlice終了後にAdjustLastOperationパネル(左下のプロパティパネル)が表示されるように修正
  • Randomize Transformが動かなくなってしまう問題を解決
Set to 3D Cursor and Rotationは、作業平面で選択エレメントから計算した位置情報と回転マトリクスをTransform Pivot PositionOrientationのCursorが参照するLocationとRotationに設定する機能です。v1.2ではカスタムOrientationに設定するSet to Transform Orientationsを追加しましたが、今回はこれを3D Cursorに追加するコマンドを用意いたしました。



2025年9月3日水曜日

YT-Tools for Blender (Radial Weight)

Radial Weightは、Linear Weightと同様にフォールオフを利用して頂点のウェイト値を設定するツールです。基本的なウェイト設定の操作性はLinear Weightと同じで、ギズモのハンドル操作はRadial Transformと同じです。



v1.2では、Linear WeightRadial Weightの遅延適用モードを改善し、インタラクティブなドラッグ操作を高速化しています。YT-Toolsの主なインタラクティブのツールは、Alt(Option)を押しながらLMBで行う操作は、Altキーを押している間は処理の適用が保留されます。画面上のメッシュには実行結果が反映されませんが、その間はハンドルの移動などを比較的思いメッシュでも軽快に行う事ができます。ウェイト設定ツールでは、ウェイトの表示はVertex Group WeightsというMesh Edit Mode OverlaysというBlenderの表示機能を使って表示しています。これはEdit Modeでのみ機能する表示なのですが、ウェイトの設定は内部的にはObjectモードで行う必要があります。つまりウェイトをドラッグしながら設定する場合は、内部的にObjectモードとEditモードを頻繁に切り替えながら行なっていますので、重たいメッシュですと速度が極端に遅くなります。v1.2では、Alt(Option)キーを押しながらドラッグしている間は、ウェイトの計算だけを行いツールが簡易的にウェイトを既存のメッシュに重ねて表示するように変更いたしました。簡易的な表示ですがウェイトの設定量を確認しながら高速にウェイトを設定する事ができます。


追記)DiscordのPixel FondueのBlenderチャンネルでDisplay Infoが原因での不具合や速度低下する事例が報告されています。現在調査中ですが、YT-Toolsを有効にした後で問題が発生がした場合はDisplay Infoを無効にして試してみてください。

2025年9月2日火曜日

YT-Tools for Blender (Soft Drag)

YT-Tools for Blenderv1.2を公開いたしました。今回のバージョンでは、2つの新機能の他、アクションセンターおよび作業平面の機能改善を行なっています。リリースの詳細はリリースノートもしくはオンラインマニュアルをご覧ください。

Soft Dragは、スクリーンスペース上の円の中にある頂点の座標値を円の中心からの減衰率をもとにスムースに移動するツールです。Modoではスクリーンフォールオフ+トランスフォームツールとして実装されていました。Modoのエレメント移動やBlenderのTweakツールがクリックしたエレメントを基準に周辺の頂点を移動するのに対して、Soft Dragはスクリーン上の円の中にある頂点が対象となります。対称を考慮しながらメッシュの膨らみを直感的に調整していくときに便利なツールです。Shift+LMBでスクリーン上をドラッグするとフォールオフのサイズを変更する事ができます。



Occlusion Testを有効にすると円の中にある頂点が他のポリゴンの後ろに隠れていないかどうかをテストし、頂点が隠れている場合は頂点座標値の移動を行いません。このオプションを有効にすると実行速度が低下しますので、必要な場合にのみ有効にして使用されることをお勧めいたします。


2025年8月27日水曜日

YT-Tools for Blender (Display Info)

YT-Tools for Blender v1.1.1を公開いたしました。このバージョンではLinear WeightツールやBendツールのバグがいくつか修正されています。また、PreferencesパネルにView Navigationという項目が追加されています。これはビューナビゲーションをModo風に変更するものではなく、Alt-LMBなどModoのビューナビゲーションを使用していることをYT-Toolsに認識させるためのオプションです。YT-Toolsのインタラクティブツールは、MMBのイベントをビューナビゲーションとして認識していて、このイベントがあった場合は、マウスオペレーションの制御をBlenderに渡していました。このためビューナビゲーションにMMB以外のキーマップが指定されていた場合、ツールが正しく動作できない問題があったため、暫定的にこのオプションを追加いたしました。将来的にもう少し賢い方法でこの問題の解決を行うかもしれません。

Display Infoは、Blenderの標準でスクリーンに表示される情報を補うための追加情報を表示します。Blenderは、BOXセレクションなど選択操作も全てオペレータで実装されてるため、常に何かしらのツールがアクティブになっています。画面の左下のDisplay Infoは現在アクティブになっているネイティブなツールを表示しています。また、Editモードでは現在選択されているEdgeの合計の長さや、Faceの合計面積も表示しています。

Display Infoは、スクリーンの左下に表示されるためBlenderのツールバーに隠れてしまう場合があります。Preferencesにテキストを表示するスクリーンの位置やテキストの大きさを調整するオプションがありますので、ご使用環境に合わせて調整してみてください。



2025年8月24日日曜日

YT-Tools for Blender (Selection Set)

Selection Setは、頂点、エッジ、ポリゴンの選択状態を名前をつけて保存し、必要に応じて呼び出す機能です。操作は簡単でエレメントが選択されている状態でAddボタンを押し、表示されるダイアログに適当な名前をつけてOKボタンを押せば、現在の選択状態がシーンに保存されます。Selection SetのNameから呼び出したいセレクションセットの名称を選択し、Selectボタンをおせば、保存した選択状態を復元する事ができます。


Selection Setの情報は、内部的にはメッシュの各エレメントに設定できるカスタムレイヤーに保存されます。頂点やエッジなどにユーザー固有のデータを保存することができます。これはシーンファイルに保存されますので、あとからそのシーンファイルを読み込んでも再現する事ができますので便利ですね。ただし、このカスタムレイヤーを増やし過ぎるとメモリー消費の増大やパフォーマンスの低下を招く原因になりますので、必要のないセレクションセットはこまめに削除していただくことをお勧めします。

Push/Pop/Clearは、選択状態を一時的に保存しておくための簡易的なSelection Setです。名前をつけて選択状態を保存しておくほどではないけれど、一時的に現在の選択状態をどこかに退避しておきたいときに使用します。Modoでは頂点、エッジ、ポリゴンの選択状態は個別に保存されいますので、選択モードを切り替えても元の選択状態を得る事ができます。Blenderでは例えばFaceからVertに選択モードを切り替えると選択されていたFaceを構成するVertが選択に変換されてしまうので、以前のVertの選択状態は変更されてしまいます。選択モードを切り替える時など維持的に現在の選択状態を退避しておきたいときに使用する事ができます。



2025年8月21日木曜日

YT-Tools for Blender (Set Positions)

YT-Toolsのバージョン1.1では、ベンドツールの他に選択した頂点の座標値の成分を指定した値にセットしたり、全体をセンタリングするオペレータを追加いたしました。

選択した頂点のX/Y/Z座標値をしてした値に揃える操作は、サイドバーのItemにあるTransformで値を揃える事ができると思ったのですが、値を入力すると相対的に選択した頂点の成分値がシフトしてしまい、値を揃える事ができませんでした。おそらくBlender流の標準的な良い方法があるのだと思うのですが、見つけられなかったので実装してしまいました。

Set Positionsは、頂点を選択した状態で起動すると実行パネルが表示され、変更を行うX/Y/Zのトグルボタンと入力値を表示します。このデフォルト値は、最後にクリックしたアクティブエレメントの頂点座標値が設定されます。投げ縄などで一括して選択した場合は、選択されている頂点の平均値が設定されます。たとえば、Y軸の値だけをある頂点の位置に揃えたい場合は、そろえたい頂点を先に投げ縄などで選択してから、SHIFTキーを押して基準となる頂点を最後に選択するとその頂点の値がデフォルト値になります。選択した頂点の平均値に値を揃えたい場合は、投げ縄などで一括選択すると選択された頂点の座標値の平均値がデフォルト値に設定されます。ちょっとした事ですが、覚えておくと設定値を手動で入力する一手間を減らす事ができます。



Center Positionsは、選択した頂点のバウンディングボックスを計算し、トグルボタンで指定したX/Y/Zの軸方向に限定して、バウンディングボックスの中心位置が原点に来るように移動します。Set PositionsCenter PositionsもこのX/Y/Zのトグルボタンが縦並びになっていて、ちょっとダサいのです。横並びにする方法が見つかったら将来のバージョンで変更しておきます。



2025年8月20日水曜日

YT-Tools for Blender (Bend Tool)

YT-Tools for Blenderバージョン1.1をリリースいたしました。主な変更点は下記の通りです。

  • Bend Transformオペレータの追加
  • 頂点座標値の設定
  • 頂点座標値のセンタリング
  • Radial TransformにInvertオプションを追加
ベンドツールはBlenderの標準のツールセットに存在する他、アドオンの中にもベンドツールをサポートするものがあるようです。ただし操作性に関してはModoのベンドツールとは異なっていたり、対称をサポートしていなかったりと期待通りに使えない事があるようなので、YT-Toolsに独自のベンドツールを実装いたしました。ハンドル操作に関してはModoにもない操作を工夫しています。

Edit ModeBend Transformを起動すると選択されているエレメント、選択がない場合はメッシュ全体の境界ボックスを計算し、最も長い主軸の方向にベンドハンドルを表示します。マゼンダ色のスパインベクトルに沿って白い円のハンドルの中心位置を基準に選択されているエレメントの頂点位置が変形します。ベンドを行う基準平面はAxisでX/Y/Zの主軸に設定するか現在表示しているビュー平面を基準に定義します。選択しているポリゴンの方線方向などでベンドする場合は作業平面と組み合わせて使用してください。


ベンドのオペレーションは、このベンドハンドルを変形を行いたい位置に素早く配置する事が重要になります。Linear TransformなどでもサポートしているAuto Fit機能がありますので、この機能を使って方向性バウンディングボックスなどに沿ってハンドルをフィットさせる事が可能です。ベンドハンドルの方向を反転したい場合はReverseボタンを押して反転させる事ができます。

また、ベンドハンドルをフィットさせた後、ハンドルの方向を固定した状態で、ハンドルのサイズを変更したり、回転中心をベクトルに沿ってスライドさせたい場合は、SHIFTキーを押しながらベンドハンドルの端点のハンドルをドラッグして調整する事ができます。



逆にハンドルの中心点を固定し、ベンドハンドルのベクトル方向だけをフィットさせたい場合は、Spine Onlyを有効にしてAuto Fitを実行してみてください。

Both Sidesは、Modo 17.0でBend Toolに追加したオプションと同じで、ベンドハンドル方向と反対側にある頂点も同時に湾曲します。




2025年8月19日火曜日

YT-Tools for Blender (Edge Slice)

Edge Sliceは、クリックしたエッジからエッジを結ぶラインでポリゴンを連続したスライスする機能です。BlenderではKnifeツールが同様な機能を持つ標準ツールだと思います。このEdge Sliceでは対称のサポートが最も重要な要件の一つでした。ツールハンドルの処理やスライスラインがクロスする場合など複雑な処理が必要だったため、YT-Toolsの中では実装に一番時間がかかったツールです。

基本的な操作はメッシュ上のエッジを次々にクリックし、ポリゴンをスライスするラインを追加していきます。クリックしたラインが他のエッジを跨ぐ場合は、マウスボタンを離したタイミングで現在のビュー方向でスライスラインと交差するエッジ上の交点を計算し、新しいハンドルを追加します。ポリゴン上をクリックしてエッジ以外のポリゴン上の位置にもハンドルを追加することも可能です。

追加したハンドルの位置は全て後からエッジ上をスライドして調整する事ができます。Shiftキーを押しながらエッジをクリックするとエッジの中心にハンドルを配置する事ができます。また、Controlキーを押しながらハンドルをドラッグするとエッジ上を1/10間隔でスナップして位置調整することができます。

操作感覚はBlender標準のKnifeツールとは異なりますが、メッシュを対称にスライスしたり、ハンドルの位置調整を容易に行う事ができます。



2025年8月16日土曜日

YT-Tools for Blender (Statistics)

Statisticsは、現在アクティブなメッシュオブジェクトを構成する頂点、エッジ、ポリゴンの統計情報を一元的に表示するパネルです。メッシュの中にある三角形ポリゴンやNサイドポリゴンの数はもちろん、境界エッジ、非平面ポリゴンなどさまざまな属性のエレメント数を一目で把握する事ができます。各項目の右側にある(xxx/zzzz)は、その属性を持つ選択されているエレメント数とエレメントの総数を表しています。左側のボタンを押せば対象となるエレメントが選択状態にボタンを押せば非選択状態になります。Modoユーザーにはお馴染みのパネルですが、Blenderネイティブのユーザーにも便利に機能するのではないかと思います。

EdgesのBy Boundaryには、Blender固有の属性であるSeam、Crease、Sharp、Freestyleなどの項目も用意しています。Blenderは標準でSelect Similarというメニューの中にある属性を持ったエレメントを選択するツールを用意していますが、Statisticsはこれらのツールの機能も一部サポートしています。

Auto UpdateUpdate Countsは、重たいシーンでStatisticsの情報の更新が原因で操作が遅くなってしまう事に対応する機能です。BlenderにはDependency graphという依存関係を保持するデータ構造があって、アドオンからこのDependency graph更新時に呼び出される関数を登録しておくとメッシュなどのデータに何か変更が行われる際にアドオンが登録したコールバック関数が呼び出されます。ただこのDependency graphの更新関数は変更があったときに無条件で呼び出され、アドオンのコールバック関数が自分に関係する項目があるかどうかを変更コンテキストの中から探しにいく必要があります。この処理が結構なオーバーヘッドで重いシーンだとStatisticsの各エレメント数の更新処理に時間がかかってしまいます。この場合は、Auto Updateを無効にしてもらうことで、Dependency graphの更新に伴う自動更新処理を無効にする事ができます。必要に応じて手動でUpdate Countsを押す事で最新のエレメント数の情報が更新されます。Modoでは、Notificationというシステムがあり、ピンポイントで必要な条件でのみ呼び出されるコールバック関数を登録する事ができました。例えばメッシュの頂点が移動した時のみ呼び出される関数を登録する事で最低限の負荷で対応するアップデート処理を行う事ができました。このあたりはもう少し上手いやり方を模索する必要があるかもしれません。





2025年8月15日金曜日

YT-Tools for Blender (Linear Transform)

Linear Transformは、澤田さんから強いリクエストがあった機能で、Modoのリニアフォールオフ+トランスフォームと同等のワークフローをBlenderで実現するすることが課題でした(澤田さんいつもありがとうございます)。Blenderのトランスフォームツールには、Proportional Editingという中心からの距離に応じてトランスフォームの大きさを減衰する機能があるのですが、リニアフォールオフを実現するために標準のトランスフォームをアドオンから拡張することはできそうにないとの結論に至り、標準のトランスフォームツールを利用する方法は諦めました。

Modoにはツールパイプラインというメインで使用するツール(アクターツール)とフォールオフなどのサブツールを自由に組み合わせてコンビネーションツールを自由に作る事ができます。フォールオフ意外にもアクションセンターやスナッピングなどもツールパイプラインのサブツールとして実装されていますので、プラグインなどで新しいサブツールを作ると組み合わせが膨らんでできる事がどんどん増えていきます。

Blenderにはもちろんこのツールパイプラインというシステムはありませんので、今回はリニアフォールオフとトランスフォームを1つのオペレータとして実装する方法を取りました。トランスフォームやリニアフォールオフで行う計算自体は非常に単純なものなのですが、ツールハンドルを独自に実装する必要があったので、今回一番実装に時間がかかったオペレータでした。BlenderのAPIが提供するGizmoは、限られた用途にしか使えそうもないので、独自にイベント処理やツールハンドルクラスを作りました。

Linear Transformの処理は非常にシンプルで、画面に表示されているマゼンダ色の三角のハンドルに沿って選択された頂点(選択がない場合は全ての頂点)の減衰値が計算され移動・拡大・回転のトランスフォームが行われます。三角形の末広がりから頂点からに向かってトランスフォームの量が減衰されます。

このLinear Transformのオペレーションは、このフォールオフハンドルを目的の位置に素早く正確に配置する事が重要です。フォールオフハンドルは開始点と終了点のハンドルを使って自由に移動させることはもちろん、Show Falloff Axisをオンにすれば開始点と終了点にXYZ軸の値を個別に移動するための軸ハンドルが表示されます。

また、Auto Fitというボタンを押すと、フォールオフハンドルが対象となる形状にフィットするように再配置されます。Orientは方向を計算する方法を指定するオプションで、デフォルトのOriented Bounding Boxは方向性バウンディングボックスを計算し、一番長い軸に沿ってフォールオフハンドルをフィットさせています。その他、XYZの各主軸に沿ってフィットさせることもできます。



Mirrorは、フォールオフハンドルを開始点もしくは終了点でミラー反転したもう一つのフォールオフを用意し、強ー弱ー強もしくは弱ー強ー弱のような2段階の減衰領域を提供するものです。この機能はModoのリニアフォールオフのSymmetryと同じなのですが、今回のLinear Transformには別にSymmetryというトランスフォームを対称に行うオプションがありましたので、Mirrorという名称にいたしました。



また、Pythonで記述するBlenderアドオンの弱点として、ネイティブのツールと比べてどうしても実行速度が遅い点が挙げられます。Linear Transformの計算処理はとてもシンプルですし、可能な限りのコードの最適化は行なっていますが、それでもC++で記述されているネイティブのトランスフォームツールには及びません。一つの解決策として、実行処理の遅延適応という操作を組み込んでいます。Altキー(Optionキー)を押しながらLinear Transformのハンドルを操作した時は、トランスフォームの実行処理は保留され、Altキー(Optionキー)を離した時に適応されます。これはModoの多くのツールでサポートしていたLazy Applyと同じアイディアに基づくものです。頂点数の多いメッシュの処理では、ハンドルがストレスなく動作します。



2025年8月14日木曜日

YT-Tools for Blender (Workplane)

作業平面は、一時的にメッシュオブジェクトのトランスフォームマトリックスをメッシュ編集作業しやすいようにビューの中心と方向に沿うように設定する機能です。よく使うワークフローでは、編集したいポリゴンを選択し、そのポリゴンの中心をビューの中心、ポリゴンの法線ベクトル方向をトップビューの方向に一致させ、メッシュ編集を行う方法があります。これによりトップビューでの2次元的な編集操作が可能になるため、精密なモデリング作業を行いたい時には重宝する機能です。Modoでは作業平面は内部的なトランスフォームマトリックスとして実装されています。初期のバージョンから基本機能として備わっていて、全てのツールが作業平面をサポートしています。Blenderでも任意の作業平面を定義してモデリング作業をするための機能はあるようですが、パースペクティブビューで作業をすることが前提のアドオンが多いように思われます。

YT-Toolsでは、作業平面用にEMPTYオブジェクトを用意して、ここに作業平面のトランスフォームマトリックスを設定し、一時的にメッシュ編集したいメッシュオブジェクトをここにペアレンティングすることによって、平行投影のトップビューでモデリング作業を行う仕組みを作りました。

Edit Modeでポリゴンを1つ選択し、YT-ToolsのWorkplaneにあるSetボタンを押すと、ビューがトップビューに切り替わり、選択したポリゴンの中心がビューの中心となり、ポリゴンの法線ベクトル方向がトップビューと並行のZ軸方向に切り替わります。シーンコレクションのアウトライナーをみると"_Workplane"という名称のEMPTYオブジェクトが追加され、選択されたポリゴンを含むメッシュオブジェクトが"_Workplane"オブジェクトにペアレンティングされているのがわかると思います。この状態でTransform OrientationをGlobalにすれば、選択したポリゴンの法線ベクトル方向をZ軸にしたモデリング作業が可能になります。"Unset"ボタンを押せば、メッシュオブジェクトは元の階層に戻り、"_Workplane"オブジェクトは削除されます。


この"_Workplane"オブジェクトのトランスフォームはObjectモードでも利用することができます。Modoにはアイテムリストにアイテムリファレンスというボタンがあり、あるアイテムのアイテムリファレンスを有効にするとそのアイテムがシーンの中心に位置するようにシーン全体がトランスフォームされます。対象となるアイテムのトランスフォームが一時的にリセットされ、相対的に他のアイテムが座標変換されます。YT-Toolsの作業平面ではObjectモードでSetボタンを押すと、アクティブメッシュオブジェクトのトランスフォームがリセットされるマトリクスを"_Workplane"オブジェクトに設定し、全てのメッシュオブジェクトがこの"_Workplane"オブジェクトにペアレンティングされます。


"_Workplane"という名称はたぶん一般には使われないであろうとの前提のもとに一時オブジェクトの名称として定義した予約名称です。もし、この名称が一般的なオブジェクトに利用していて衝突する場合はリクエストフォームでご連絡ください。解決方法を検討してみます。

2025年8月12日火曜日

YT-Tools for Blender (Action Center)

アクションセンターは、Modoのツールパイプラインを通して各ツールで共有されるピボット位置です。Modoにはツールパイプラインという1つのアクターツールと複数のサブツールを組み合わせて使用するユニークなシステムで、アクションセンターはサブツールとして実装されています。Blenderには、Transform Pivot PositionTransform Orientationという設定値があり、これがModoのアクションセンター、アクションアクシスにあたります。これらはある程度、対応する項目に変換することができます。

Automatic

Automaticは、選択位置に3D Cursor位置を移動し、Pivot PointをCursorにOrientationをGlobalに設定します。

Selection

Selectionは、Pivot PointをMedian Centerに設定し、OrientationはNormalに設定します。

Selection Border

Selection Borderは、選択されている境界エレメントの中心を3D Cursor位置を移動し、Pivot PointをCursorに設定します。OrientationはNormalに設定します。

Selection Center Auto Axis

Selection Center Auto Axisは、Pivot PointをMedian Centerに設定し、OrientationはGlobalに設定します。

Element

Elementは、Pivot PointをActive Elementに設定し、OrientationはNormalに設定します。

Screen

Screenは、Pivot PointをActive Elementに、OrientationはViewに設定します。

Origin

Originは、アクティブオブジェクトのセンターに3D Cursor位置を移動し、Pivot PointをCursorに設定します。OrientationはGlobalに設定します。

Parent

Parentは、アクティブオブジェクトの親オブジェクトの位置に3D Cursor位置を移動し、Pivot PointをCursorに設定します。OrientationはParentに設定します。

Local

Localは、Pivot PointをIndivisual Originに設定し、OrientationはNormalに設定します。

Pivot

Pivotは、アクティブオブジェクトの位置に3D Cursor位置を移動し、Pivot PointをCursorに設定し、OrientationはLocalに設定します。 Localは、Pivot PointをIndivisual Originに設定し、OrientationはNormalに設定します。

Pivot Center Parent Axis

Pivotは、アクティブオブジェクトの位置に3D Cursor位置を移動し、Pivot PointをCursorに設定します。OrientationはParentに設定します。

 

Selection Borderに関しては、選択の境界の中心位置を計算し、3D Cursorに設定していますので、選択を変更しなおした場合は、再度Selection Borderを選択し直す必要があります。ModoのSelection Borderはサブツールとして実装されていましたのでエレメントの再選択時には自動的にアクションセンターが変更されていました。



Elementアクションセンターを使った操作では、選択状態を保持したままActive Elementを変更できないことが分かりました。Active Elementを変更しようと選択操作を行うと選択自体がリセットされてしまいます。Active ElementはFaceなどのMeshエレメントを選択した時に最後に追加されたエレメントの中心で、内部的には'select_history'という選択リストの最後に追加された白くハイライト表示されたエレメントがActive Elementになります。Active Elementを変更しようとすると選択自体を再設定しなければならないため、選択と関係ない場所にActive Elementを設定することができません。そこでHit Mesh Elementというオペレータを実装し、現在選択されているエレメントの選択状態を変更せずにActive Elementだけを変更できるようにしました。これによりModoのエレメントアクションセンターに近いワークフローが可能になります。



Gumroadに加え、BOOTHでの販売を開始いたしました。BOOTHでは日本円でお支払いいただけます。ダウンロード可能なYT-Toolsのバージョンはどちらも同じです。よろしくお願いいたします。




2025年8月11日月曜日

YT-Tools for Blender (Selection)

エレメント(頂点、エッジ、面)を選択する機能は、ModoもBlenderも多くの機能を標準装備しており、機能リストだけ比較すると主だった選択機能はすでに用意されているように思えます。その中でエレメントの選択ワークフローを改善するオペレータを幾つかYT-Toolsに組み込んでみました。

ダブルクリックによる連結ポリゴン、エッジループの選択(Contextual Selection)

ダブルクリックによるエレメントの選択はModo基本操作でしたので、各選択モードでエレメントをダブルクリックした時に連結するポリゴン、頂点もしくはエッジループを選択するオペレータを実装し、ダブルクリックのマウスイベントに登録しています。SHIFTキーを押しながらダブルクリックすると選択が追加されます。


ModoとBlenderの選択に関する考え方の違い

エレメントの選択状態の保存方法はModoとBlenderで若干異なります。Modoはセレクションスタックというシステムがあり、メッシュのエレメントをはじめオブジェクトや頂点マップなどあらゆる選択はセレクションパケットというID+選択情報を収めたパケットデータをスタックとして一元管理しています。これに対してBlenderは各データ構造体の中に'select'という状態変数があり、そこで管理されているようです。また、Modoはポリゴン、エッジ、頂点の各モードでの選択状態は個別に保存されていますが、BlenderはFaceからEdge、EdgeからVertなど選択モードを変更した時にそれぞれの選択されている構成要素の選択状態がモード変更時に変換されるようです。例えばFaceモードからVertモードに変更すると選択されているFaceを構成する全てのVertが選択状態になります。また、Modoはセレクションスタックというスタックにパケットとして選択情報を保存しているため、全ての選択には選択の順番が同時に保存されています。これに対してBlenderは基本的に'select'という状態変数で選択の状態を管理しているため、選択順序は保存していません。BMesh構造体には'select_history'というリストを別に用意していて、明示的にこの'select_history'に対応している操作にのみ選択順序に関する操作を行うことができます。

また、Modoでは何かエレメントが選択されている場合、そのエレメントが編集対称になり、何も選択されていない場合は、メッシュの全てのエレメントが編集対称になります。Blenderの場合は、明示的に選択されているエレメントが編集対称になります。

選択の変換

明示的にあるモードの選択を別のモードの選択する。オペレータを用意しています。Select Boundaryは選択されているFaceと非選択Faceとの境界を選択します。選択されているFaceがない場合、境界エッジが選択されます。Convert Edge to Faceは、選択されているEdgeが一つ場合は、そのEdgeを共有する全てのFaceが選択されます。選択されているEdgeが2つの場合、それらのEdgeを全て持つFaceが選択されます。同様にConvert Vert to Faceは、選択されているVertが一つの場合はそのVertを持つ全てのFaceが選択されます。選択されているVertが3つの場合は、それらを全て持つFaceだけが選択されます。

ループ選択

Blenderのループ選択はAltキーを押しながらEdgeやFaceをクリックして行います。Blenderのオペレータは実行時の位置情報が参照できるため、Faceをクリックした場合、クリックした位置に最も近いEdgeの方向にFaceのループが選択されます。Modoは選択コマンドとして実装されているため連続する2つのポリゴンからループの方法が決定されます。おそらくBlenderの操作に慣れている方は、標準の方法の方が馴染みやすいかと思います。ただし、標準のループ選択は前述した'selection_history'に対応していないため、Previous Activeで最後に選択したエレメントを非選択にするような操作ができません。これはModoで言うところのSelect Lessコマンドです。そこで'selection_history'に対応したループ選択オペレータをYT-Toolsには実装しています。2つの連続しているFaceを選択してLキーを押すとFaceがループ選択され、ループの並び順にFaceが選択されます。下矢印キーを押すとループの選択が一つづつ非選択状態になります。Altクリックで実行される標準のループ選択も'selection_history'に対応したオペレータに置き換えています。


選択関係のオペレータは、Modoライクなワークフローを再現するために、割とメジャーなショートカットキーやマウスイベントに割り当てられています。Blender標準のキーマッピングに戻したり、YT-Toolsの選択オペレーションを無効にしたい場合は、プリファレンスパネルのYT-ToolsのKeymap Listをカスタマイズしてください。