2025年12月26日金曜日

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

YT-Tools for Blender v1.7では、外部クリップボードも更新しています。以前は一つのアクティブメッシュのポリゴンだけがクリップボードにコピーされていましたが、v1.7では全ての選択されているメッシュオブジェクト(アイテム)が同時にすべてコピーされるように改良いたしました。クリップボードには、オブジェクトごとにメッシュ情報が保存されています。Pasteを実行すると現在アクティブになっているメッシュオブジェクトにクリップボードに保存されている全てのオブジェクトのメッシュが貼り付けられます。New Object from Clipboardを実行した場合は、クリップボードに保存されているオブジェクトごとに新しいメッシュオブジェクトが新しく作られ、個別にメッシュが読み込まれます。

また、せっかく汎用的な外部クリップボードの仕組みを作りましたので、LightWave Modelerで動作する外部クリップボードを作ってみました。20年ぶりにLightWaveのプラグインを作ってみましたが、なんとか動作するものを作ることができたみたいです\(^^)/。今回はPythonを使ってCommandSequenceクラスのプラグインを作ってみましたが、Modelerに関してはGlobal Service関数の使い方はそれほど変わっていないので安心しました。ただし、サーフェイスの扱いがノードベースになっていたので従来のLWTextureFuncsからUVマップやテクスチャ画像の情報を取り出すことができませんでした。また、使用できる環境がLightWave 2024だったので、サポートされているPythonのバージョンは2.7です。LightWave 2025では、Python 3.13になったようなので、新しいバージョンで動作するかどうかはまだ確認していません。

今回はなんとなくノリで作ってしまいましたが、LightWave版の外部クリップボードに対する需要があるかどうかノーアイディアです。もし需要があるようでしたら、Layout版の開発なども考えてみたいと思います。リクエストなどフィードバックはこちらのフォームからお願いいたします。



久しぶりにLightWave 3Dを触っていてVertex PaintのAboutメニューをクリックしたら、いまだに "Vertex Paint v3.5.6 ((c) 1998-2005 D-STORM, Inc. by Yoshiaki Tazaki"という表記がでてきてびっくりしました🤭。BandSawやEPSF Loaderなど昔作ったツールがまだ残っているんですね。懐かしい。





YT-Tools for Blender (Absolute Scale)

YT-Tools for Blenderのv1.7を公開いたしました。今回のバージョンでは、日本のユーザーの方から頂いたリクエストに対応して絶対スケール(Absolute Scale)を実装いたしました。これは、実装は異なりますがModoの絶対スケール(Absolute Scale)と全く同じ使い方で対象となるメッシュを実寸値を入力してスケールするツールです。Modoではパネルを表示するタイプとインタラクティブにツールハンドルを使うタイプの絶対スケールがありますが、今回実装したのは前者のパネルタイプの絶対スケールです。選択した部分のポリゴンをGrabコマンドを使って読み込み、そのあとで変更後のサイズを入力して、メッシュのスケールを行います。

Grabして読み取るサイズは、選択ポリゴンのバウンディングボックスに基づいて計算されますが、Orient To Selectionを有効にすると方向性バウンディングボックスに基づいてサイズを計算します。

Uniform Scaleは、X/Y/Zの各軸方向のサイズが同じになるように均一にスケールが行われます。Explicit Scaleは、X/Y/Zの各軸方向を個別にスケールします。Reference Scaleは、Grabで使用した選択エレメントだけでなく、そのほかの非選択エレメントもスケールします。

Scale Centerは、スケールを行う際のピボット位置を指定します。Modoのオンラインユーザーガイドにもこのツールに関するページがありますので、そちらも参考にしてください。


また、これもリクエストからの実装で、3D画面描画の速度を視覚的に表示するFPSゲージも実装しています。




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)は、他にも利用できそうな気がします。アイディア募集中です。