2025年2月23日日曜日

Straight Skeleton キット その2

Straight Skeletonキットをv1.0.1に更新しました。主な変更はクラッシュバグの修正とExtrudeモードでMaximum Heightでクリップされたトップポリゴンの三角形をできるだけマージするように変更しました。Extrudeモードで作成する形状は基本的に三角形で出力されるので同一平面上の三角形はできるだけまとめておいた方が使いやすそうです。

また、実験的にですが要望があったInsetモードをBETA版として追加してみました。これはStraight Skeletonの出力結果を使って、可能な限り交差の少ないポリゴンのインセットを行うことを目的としています。アイディアとしては、Extrudeで作成されたメッシュの元の輪郭上の頂点から、分岐されたエッジを高い方向かつ距離が短い方向にエッジをMaximum Heightの高さまで辿っていくことで輪郭の頂点とスケルトンを構成する頂点を結ぶベクトルを求めようとする試みです。ただし、この方法だとExtrudeした形状のピークが複数ある場合、低い方のピークに辿り着いた検索エッジがより高いピークを探してしまうため、何かしらの方法で検索をストップさせる条件を見つける必要があります。また、新しくインセットで作られたポリゴンのUVは保管されていないので、これも正しく実装する必要があります。Modoのポリゴンベベルでは3Dポリゴンのインセットの情報をもとにUVポリゴンもUV空間で一つ一つインセットを行うという結構めんどくさいことをしていました。良いアイディアが見つかりましたら、Insetモードの残りの問題にチャレンジしてみたいと思います。




2025年2月13日木曜日

Straight Skeleton キット

 Straight Skeleton キットを公開いたしました。Straight Skeletonは、2Dポリゴンの中心線カーブを求めるアルゴリズムで、等高線の作成や3次元地形モデル、建築物の屋根のモデリングなどで利用されています。外郭を構成する線分を等速で移動させ、それらが衝突などで発生したイベントごとにトポロジーを更新していくアルゴリズムです。

前回、CDT三角形分割で利用したCGALにStraight Skeletonライブラリがありましたので、これを利用してModoのプラグインを作ってみました。CGALのStraight Skeletonライブラリは機能が豊富でしたのでこのプラグインでは、実験的に複数のモードを用意し、異なる結果が得られるようにしてみました。もっと便利な使い方はこれから研究してみたいと思います。

Skeletonモード

これはポリゴンの背骨となる中心線(Straight Skeleton)を求め、ポリゴンの外郭を構成する頂点とで作られる複数の平面にポリゴンを分割します。



アップロード中: 127810 / 127810 バイトをアップロードしました。



Extrudeモード

これはポリゴンの輪郭線をStraight-Skeletonの押し出し機能を利用して立体的な押し出し形状を生成します。押し出しはゴールとなる中心線の高さとなり、Maximum Heightを指定することで中間の高さまで押し出しを制限することができます。中心線の高さは固定されていますので、Scaleを使って高さを調整できるようにしました。


Duplicateモード

Duplicateはポリゴンの輪郭線をStraight-Skeletonの中心線の内側もしくは外側に向かってオフセットしたポリゴンを作成する機能です。オフセットした形状は複数のループに分割されたり、交差部分が融合する場合があります。段階的にオフセットしたポリゴンが一度に得られるように、ShiftオプションとStepsオプションを追加しています。


Offsetモード

OffsetはDuplicateと同じ方法でもとのポリゴンのオフセットループを求めていますが、新しくポリゴンを作る代わりに、元のポリゴンの各頂点の座標値を最も近い位置にあるオフセットループの頂点座標値に移動しています。これによりコーナー部分に交差のないインセットを行うことができます。Mergeオプションをオンにしておけば、同一点に収束された頂点はマージされます。この方法は元の頂点とオフセットループの頂点の距離を使ってインセットを行っていますので、オフセットループのトポロジーが極端に変更された場合などでは、インセットされたループは破綻する場合があるので注意が必要です。



2025年2月4日火曜日

Part Falloff

 FoundryでModoの開発をしていたChris Hagueが自身のGithubでPart Falloffというサブツールを公開しています。ChrisはLuxologyからFoundryへ来たデベロッパーの一人でModoのアーキテクチャに関するスペシャリストです。Modo17.0のマルチスレッドを使った新しいModoのアーキテクチャをデザインしたのもChrisで、Modoの内部構造に関しては一番詳しいのではないかと思います。

Part Falloffは、リニアフォールオフに似たフォールオフサブツールです。リニアフォールオフがフォールオフ影響範囲にある頂点の座標値に対してウェイトを頂点ごとに線形に設定するのに対して、Part Falloffは、連結されたポリゴンのグループの中心を評価し、グループ単位にフォールオフウェイトが設定されます。いままでありそうでなかったフォールオフサブツールで便利そうですね。



Modoにはツールパイプラインというアーキテクチャがあり、フォールオフ、アクションセンター、アクションアクシスなどが独立したツールとして実装されていて、他のメインツールと組み合わせて使用することができます。プラグインであとからPart Falloffなどのサブツールが追加されると組み合わせでどんどん面白そうなコンビネーションツールが増えていきます。

ChrisのGithubには、Part Falloffのリポジトリにはソースコードのみが公開されています。このツールを使用するには、ターゲットとするOS向けに自分でソースコードをビルドするか、DiscordのPixel Fondueのサーバーの#modo-contentからPartFalloff.lpkをダウンロードする方法があります。