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スペースがありますので、バグやご要望はそちらからお受けすることができます。