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のプレビューといアプリにある"クリップボードから新規作成"というメニューと同じ感覚で使うことができます。作業中のメッシュの一部分を別のメッシュオブジェクトに分離したい時の手間暇が少し改善されると思います。