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が表示されてしまいます。翻訳テキストはグローバルな辞書にも登録できますし、アドオンの独自のカテゴリでのみ使用するローカルな辞書として登録する方法もあります。なぜかマウスカーソルを重ねた時に表示される文字列はグローバル辞書でないと翻訳文字列が表示されなかったりなど、まだ謎の仕様があります。ベターなアドオン翻訳のためにもう少し調査が必要なようです。