yslog

ゆるめに技術ブログかきます。Maya_Python

SI Weight Editor ver_r1.3.8

ver1.3.8リリースしました。

github.com

・エクセルライクなセルのコピペ機能追加
・頂点単位のウェイトコピペ機能追加(インフルエンスの自動補完、複数頂点間コピペにも対応)
・ウェイト0のセルを保持するウェイトハンマー機能
・スムース機能(標準機能の呼び出し)と設定UI
・ウェイト0の値を保持するスムース機能追加
・Abs/Add/Add%切替時のスライダー範囲の挙動を修正
・インフルエンス数が違うスキンを読み込んだときのロック復元の不具合修正

詳細は以下。

ウェイト値0.0のセルを変更しないウェイトハンマーとスムース

weight_smooth

標準機能のスムースをUI上から実行できるようになりました。

また元のウェイト値が0.0の箇所は値が変わらないカスタムウィトハンマー、ウェイトスムース機能も追加。
元から使用しているインフルエンスのみでスムージングしたい場合に。
スムースボタン右クリックでスムース設定ウィンドウを開きます。

weight_Hammer_Smooth

Vertex Weight Copy / Paste

weight_vtx_cp

頂点単位でのウェイト移植機能です。

標準機能と違い、複数の頂点コピー→複数の頂点ペーストに対応しています。
ペースト頂点がコピー頂点より多い場合は最初の値に戻って繰り返しペーストされます。
ウェイトロック機能とは併用不可です。

またペースト先にインフルエンスが設定されていない場合は自動追加されます。

weight_vtx_copy

Excel like Cell Copy / Paste

weight_cell_cp

エクセルライクな範囲セルのコピー/ペースト機能です。

指定範囲をコピーして、インフルエンスの違いにかかわらず範囲ペーストができます。
矩形だけでなく飛び地選択でのコピーペーストも可能。
ペースト範囲がコピー範囲より大きい場合は繰り返しペーストされます。 ウェイトロックとの併用も可能です。

weight_cell_copy

こちらの機能は右クリックメニューからも呼び出し可能です。
セルの範囲内では ctrl or shift + 右クリックで呼び出しです。(右クリック入力とかぶるため)
セルの範囲外は直接右クリックでOK。

weight_cell_copy_menu

Remove Unused Influences

weight_rem_unuse_inf

使用していないインフルエンスの削除。標準機能の呼び出しです。

weight_remove_unuse_inf

 

ウィンドウサイズに応じてウィジェットを自動再配置するUIをつくろう

こちらはMaya Advent Calendar 2018 12月19日の記事です。

 

今年はアドカレはパスかな、、って思ってたけど誕生日空いてたので滑り込み!

PySideのUIネタなんぞを一つ。

UIの動的再配置!

・Maya標準機能のUI

ウィンドウサイズを縮めるとが見切れて使いづらい!

・カスタムツール

そもそも中身のウィジェットサイズ以下に縮まらなくて画面専有しすぎ!

 

ってことありませんか?ありますよね?ありますとも。

 

 ↓小さいウィンドウサイズで使おうとすると大事な部分が隠れちゃうとか、、

f:id:ys_45:20181218220852g:plain

 

SoftimageのUIは親切設計でUIサイズが変更されると動的にUIパーツが並び替わるって仕様でした。

 

↓SIの動的再配置、あの頃はよかった。。。

f:id:ys_45:20181218221615g:plain

 

自作のツールにはどうしてもこれが欲しい!ってことでPySideで実装したときの記録。

実装に必要なもの

ウィジェットサイズよりも縮む受け皿

QScrollAreaで桶。

・自由に配置できるレイアウト

今回はQGridLayoutをつかいました。

配置位置をx, y , w, hで自由に指定。

・ウィンドウサイズ変更をトリガに再配置を実行する

こちらはウィンドウにresizeEventを仕込むことで実装。

・動的再配置処理

配置するウィジェットのサイズを予め取得しておいて、ウィンドウサイズに収まり切らなくなったら行を変えて配置する仕組みを考えます。

再帰的に配置していって要素がなくなれば終了みたいな。

 

というわけで最低限の要素でひとまず作ってみましょう。

 

 ↓はい実装。※時間がなくて説明少なめです、すんまそ。

UniqueWigetLayout1

 実行するとこんな感じでボタン配置が動的に変化するウィンドウが開きます。

ちゃんと動きましたね。よかった。

f:id:ys_45:20181218230119g:plain

 

要素のグループ化

 これでも要件は満たすんですが、スピンボックスとスライダーを一組にしたい、とかボタンをグループごとに分けたいって場合もあると思います。

そういう場合はボタンリストに登録するウィジェットをひとまとめにするウィジェットでラッピングしてやるとよさそうです。

 

↓はい実装。※時間がな(ry

UniqueWigetLayout2

 

実行するとこんな感じでグループごとにまとまって配置されます。

今度もちゃんと動きましたね。よかったよかった。

f:id:ys_45:20181218231753g:plain

 

そんなこんなで公開しているツールSIWeightEditorも同じ仕組みでUIを作ってます。

こちらはテーブルと上部ペインの比率も動的に変化します。

f:id:ys_45:20181218232538g:plain

 

他QSplitter、QStackedWidgetと組み合わせると標準ウィジェットでは難しい多段タブ動的配置ツールランチャーも作れたりします。

こちらもSIにありましたね。

 

↓SIのシェルフ、あの頃はよか(ryf:id:ys_45:20181218232904g:plain

今回のものに限らずUI設計はちょっとした心遣いでとっても使いやすくなり、反面設計が悪いととってもわかりにくいものになりやすいですね。

個人的にデザイナーに使ってもらえるかどうかはUIの導入のよさ、(あとスタイリッシュさも笑)がかなり大きいと思ってます。

わかりやすく、使いやすい、機能面でも優れているツールづくりを目指したいですね。

 

明日はお待ちかねPySideマスターUnPySide(リンゴ酸)さんの記事でっす。

素敵なサムシングよろしくお願いしまーす。

 

おしまい。

 

2019/02/24追記

ウィンドウサイズ変更時にレイアウトに変化がない場合は再配置しない形にしたもの追加。ボタン数が数百とかになってきた場合の負荷対策。

UniqueWigetLayout3

SI Weight Editor ver_r1.1.0

github.com

f:id:ys_45:20180703002218p:plain

サブツール

image

 

サブツール機能としてウェイト回の便利な機能を山盛り搭載しました。

以下機能紹介、是非ご活用ください。

 

ウェイトハンマーとの連携

image

Maya標準機能のウェイトハンマーを選択したセル頂点に対して実行します。

siweighteditor11

Freeze / Freeze_M

image

・Freeze
選択オブジェクトのヒストリを全ベイクしたあとデフォーマクラスタブレンドシェイプを書き戻します。
デフォーマクラスタブレンドシェイプを保護しつつヒストリをきれいにしたいときに。

・freeze_M
選択オブジェクトのヒストリを全ベイクしたあとスキニング、デフォーマクラスタブレンドシェイプを書き戻します。
スキニング後、頂点追加やラティス変形した場合にかけておくと安心です。

siweighteditor14

Simple Weight Copy / Paste

image

・Simple Weight Copy
選択オブジェクトのウェイトデータをオブジェクトごとに一時ファイルとして書き出します。
前回出力分は上書きされます。

・Simple Weight Copy (Name Index)
コピーしたウェイトをオブジェクト名と頂点番号で書き戻します。
バインド情報も書き戻すので事前バインド不要です。

・Simple Weight Copy (Name Position)※Maya2016以降
同じくオブジェクト名と頂点座標で書き戻します。
頂点番号が変わった場合はこちらをご利用ください。

siweighteditor15

Transfer Weight Multiple

SIのGatorライクなウェイト転写機能です。

image

・Transfer Weight / Copy
転送元のメッシュ情報をコピーします。
複数メッシュ指定可能です。

・Transfer Weight / Paste
転送元のメッシュからウェイト情報を転写してきます。
複数メッシュとコンポーネント単位の指定可能です。

siweighteditor13

Symmetry機能

よく使うミラーリング系ツール

image

・Weight_Symmetrize
選択した頂点ウェイトを反転命名規則に従ってジョイントラベルを設定しミラーリングします。
対象メッシュがバインドされていなくても自動バインドするので事前設定不要です。
メッシュ単位、コンポーネント単位どちらでも実行できます。
右クリックで命名規則ウィンドウが開きます。

選択メッシュが1つの時→ +X ⇄ -X どちらに転送するかウィンドウが開きます
選択メッシュが複数の時→ 最初に選択したメッシュのウェイト情報を残りに反転転写します。
選択コンポーネントの時→ 反対のグローバル座標のコンポーネントから反転してきます。

・Auto_Symmetry
メッシュ反転からウェイトミラーまで自動。
こちらもジョイントラベリング、バインド、ミラーまで一括です。
右クリックで命名規則ウィンドウが開きます。

スキンメッシュだけでなく、ジョイントやロケータ等なんでも反転できます。

・Mesh Marge with Skinning
スキニングを保ったままメッシュを結合します。
機能でもできなくないですが、スキンクラスタを共有するのでノンデフォーマヒストリ削除後のアンドゥなどが非常に不安定なので独自機能として実装しています。
Auto_Symmetry後に簡単に左右結合ができたりします。

siweighteditor16

・ジョイント左右命名規則エディタの使い方
右クリックで設定ウィンドウを開きラベリングルールを設定します。
左右対になるようにPrefix, Suffix, middle_nameを設定します。
正規表現検索するのでワイルドカードは . (ピリオド)で指定できます。

例)_L01 ⇄ _R01 を対にしたい場合はそれぞれ
_L01 → _L..
_R01 → _R..
と記入します。

image

Toggle Mute Skinning / Go to Bind Pose

image

・Toggle Mute Skinning 選択したメッシュのスキニングのミュートを一括トグル。 何も選択せずに実行でシーン内のメッシュに全適用。

・Go to Bind Pose 標準機能のバインドポーズに戻るを実行します。

siweighteditor18

Go Maya Export / Import

Mayaシーン間でのオブジェクトの受け渡し補助ツールです。
毎回場所を指定して出力したり読み込むのがめんどくさいので。 スキンメッシュはデタッチしないとジョイント階層がついてくるのでFreezeとSimple Weight Copy/Pasteを併用すると便利です。

image

・Go Maya Export
所定の場所に選択オブジェクトを書き出します。 前回出力分は上書きされます。

・Go Maya Import
GoMayaExportで出力したオブジェクトを読み込みます。

siweighteditor19

オプション機能

0セルの明るさ指定、インフルエンスサーチ

image

・☀マーク → 値がゼロのカラムの文字色の明るさを指定します。
・Search → インフルエンスを絞り込んだり、非表示になっているものを一時的に表示したりします。
・入力文字で検索、スペースで&検索、大文字小文字区別なし
・Refine → 絞り込み検索、現在表示中のインフルエンスから探します。
・Add → 加算検索、現在非表示のインフルエンスから検索にかかったものを加えて表示します。Filterでゼロカラム非表示状態で使用するととても便利です。オヌヌメ
・i マーク → 検索をインタラクティブに行うかどうか。有効にすると文字入力に合わせてリアルタイム検索します。

siweighteditor9

 

SI Weight Editor リリースしました。

SIライクなウェイトエディタをリリースしました。

機能的にはSIのものを踏襲しつつさらにウェイト調整しやすいように機能追加したものです。

 

ダウンロードはGitHubから!

GitHub - ShikouYamaue/SIWeightEditor

 

image

インストール

Clone or download > Download ZIP もしくは
release > Source code (zip) からZIPファイルをダウンロードしてください。

解凍したSiWeightEditorフォルダを C:\Program Files\Autodesk\ApplicationPlugins へコピーしてください。
ディレクトリ構成などは変更せず解凍フォルダごとそのまま設置します。

image

MayaをCドライブ以外にインストールしている場合でも
C:\Program Files\Autodesk\ApplicationPlugins
に置く必要があるようです。

ApplicationPluginsフォルダが存在しない場合は作成してください。

動作確認はMaya2015~2018で行っています。

インストールに成功するとウィンドウ以下に項目が追加されます。

image

主な機能・UI

基本UI表示1

image

・Show → 選択したテーブルセルに表示をフォーカスする。
・Show All → オブジェクトのウェイトを全表示する
・Focus → コンポーネント選択をセル表示に反映する
・Filter → 表示されているインフルエンスのうちウェイト合計が0のものを非表示にする
・Highlite → セル選択された頂点をビューポート上でハイライトする

siweighteditor1

基本UI表示2

image

・鍵マーク → メッシュ選択変更のUIへの反映をロックします。一時的にウェイトエディタ表示の更新を止めたい場合に
・サイクルマーク → 現在の選択をUIに反映します。鍵マークでロックがかかっていても強制的に反映
・Cマーク → 表示のクリア
・⇄マーク → セル上の選択頂点を実際に選択し、UI表示も絞り込みます。
・0-1 → ウェイトを0.0~1.0で表示します(Maya仕様)
・0-100 → ウェイトを0.0~100.0で表示します(SI仕様)

siweighteditor2

不正な頂点ウェイトの絞り込み

image

本エディタでは不正なウェイト値に色付けして表示します。
合計1.0以下 → 赤
合計1.0以上 → オレンジ
指定インフルエンス数以上の使用 → 黄色
上図ボタンから不正頂点ウェイトの絞り込み表示ができます。

siweighteditor3

小数点表示桁数と丸め、インフルエンス数の修正

image

・Enforce Limit → ここで指定した数以上のインフルエンスを使用している頂点を黄色く表示。 Enforceボタンを押すと自動的に指定数にウェイトを修正します。
何も選択せずに実行すると全ての頂点に対して修正を実行します。

・Displayd Digit → 小数点以下の表示桁数を指定

・Round Off → 指定桁数以下の端数を四捨五入します。
何も選択せずに実行すると全ての頂点に対して実行します。

siweighteditor4

ジョイントハイライト、ジョイント選択機能

image

nsrt各ボタン → UIのジョイントカラム右クリックするとジョイント選択、その時に適用するSRTマニピュレータを指定します。
・n → 変更なし
・s → スケール
・r → ローテーション
・t → トランスレーション
・Joint Hilite → UI上で選択されているセルに対応するジョイントをハイライト表示します。

siweighteditor5

主な機能・入力

入力方法4種類

・スピンボックス → ボックス入力、ホイール可能
・スライダーバー → スライダーバーで値を指定
・右クリック入力 → セルを右クリックして小窓に入力、絶対値の場合はクリックしたセルの値を拾います。
・直接入力 → セル選択した状態で数値入力を始めるとそのまま小窓入力できます。

siweighteditor6

入力モード3種類と正規化設定

image

・Abs → 絶対値入力、指定した値がそのまま入ります。
・Add → 加算入力、現在の値に入力値を加算(減算)します。
・Add% → 率加算、現在の値に対して指定比率加算します。例)50に50を指定すると50%の25が加算されて75になります。
・Normalize → 入力後の値を正規化するかどうかの設定、有効にすると自動的に合計1.0(100)に正規化されます。
右クリックで選択セル(何も選択がない場合はすべてのセル)を強制的に正規化します。
・Unlimited → 合計1.0(100)以上の値を許容するかどうか。有効にすると入力上限がなくなります。

siweighteditor7

ウェイトロック機能

image

・Lock Wt → 選択したセルのウェイト値をロックします。
・Unlock Wt → 選択したセルのウェイト値をアンロックします。
・Clear locks → すべてのウェイトロックを解除します。
またカラムをダブルクリックすることで列ごとのロック、アンロックを一括トグルできます。

siweighteditor8

ウェイトハンマーとの連携

image

Maya標準機能のウェイトハンマーを選択したセル頂点に対して実行します。

siweighteditor11

オプション機能

0セルの明るさ指定、インフルエンスサーチ

image

・☀マーク → 値がゼロのカラムの文字色の明るさを指定します。
・Search → インフルエンスを絞り込んだり、非表示になっているものを一時的に表示したりします。
・入力文字で検索、スペースで&検索、大文字小文字区別なし
・Refine → 絞り込み検索、現在表示中のインフルエンスから探します。
・Add → 加算検索、現在非表示のインフルエンスから検索にかかったものを加えて表示します。Filterでゼロカラム非表示状態で使用するととても便利です。オヌヌメ
・i マーク → 検索をインタラクティブに行うかどうか。有効にすると文字入力に合わせてリアルタイム検索します。

siweighteditor9

Futures

・現状20000triangleくらいからもっさりしますが、これから更なる高速化を目指しています。
・有効な機能を絞った高速編集モードをつけるかも
・固定値入力ボタンつけるかも
・UIの色指定機能つけるかも
・Show Bad の挙動を少し変更するかも
☆他機能要望などあればお気軽にご相談ください。

SI Side Bar Ver2.4.7

Release 2.4.7 · ShikouYamaue/SISideBar · GitHub

Maya2018update2以降に起きる不具合修正

Maya2018update2以降、SI Side Barを起動してウィンドウを閉じた後のオブジェクト操作でエラーを吐き続けるようになっていた不具合に対処。

Maya側の挙動が変わったのが原因ですが取り急ぎすべての例外を処理し、例外キャッチしたらジョブをすべて止めることで対応しました。

Editタブ追加機能

Editタブにいくつか小さい機能を追加しました。

ちょっとした機能ですが明日からすぐ使える便利機能です。

是非ご利用ください。

image

・Go Maya Export / Import
Mayaのシーン間でオブジェクトをやり取りする補助ツールです。
Eportで選択したオブジェクトが一時ファイルとして書き出され、Importで書き出したものをすべて読み込みます。
再度Exportすると前回出力分は上書きされます。

gomaya

・Simple Weight Copy / Paste
ウェイトコピーペーストツール、メッシュ名でコピーウェイトを保存、対応するメッシュ名と頂点番号or座標でペースト
バインド情報も一緒に書き戻すので事前バインド不要です。
ジョイント入れ替えや別のモデルにメッシュ移植したりするときに便利です。

simpleweight

・マルチUVセットの削除 マルチUVセット設定されているメッシュの現在のUVSetをmap1にコピーして残りは全削除します。
不要な複数UVセットを一括クリーニング。
UVセットはmap1にリネームされます。
メッシュ選択せずに実行するとシーン内のすべてのメッシュに適用します。

・UVセットをmap-にリネーム
UVセット一括リネーム、セットが1つの場合はmap1、複数の場合は以降連番になります。

・テクスチャのクリーンアップ
テクスチャをクリーンアップ → テクスチャ名をファイル名にリネーム、不要なテクスチャ削除、同じファイル参照の重複テクスチャはひとつにまとめる
テクスチャ名のみ修正 → テクスチャ名をファイル名にリネーム
ゲインを修正 → テクスチャのカラーゲインを1(規定値)に戻します
Place2dをまとめる → 同一マテリアル内のPlace2dを一つにまとめます

cleanuptexture

・テクスチャパスのローカル化
テクスチャパスをsorceimage/hogehoge.tgaのように相対パスに修正します。
外部ファイルコピーオプションで外部参照のファイルをローカルパスにコピーしてきます。

Maya上でリサージュ図形をビジュアライズする

三角関数のお勉強してたらリサージュ図形ってものがあるらしい。フムフム。

高校の時は文系選択だったので範囲外だった模様。

そもそも絵ばっか描いて勉強はあんまり(ゲフンゲフン

 

自分のメモもかねてちょっくら検証してみました。

 

さておき、要約すると正弦波(又は余弦波)の振動、振幅、位相の違いを表す図形、ということらしい(あってるかな?)

 

リサジュー図形 - Wikipedia

 

ざっと図解

サインカーブ

半径が1の単位円を考えてsinθ、cosθそれぞれのサインカーブを描いてみましょう。

f:id:ys_45:20180304215917p:plain

 0°≦θ≦360°のとき

sinθは半径1なのでy/1

0→1→0→-1→0と増減します。

こんな感じですねー↓

f:id:ys_45:20180304221641p:plain

※360°は2πラジアン

cosθはx/1となるので1→0→-1→0→1と増減します。

で、こう。

f:id:ys_45:20180304221935p:plain

図形を描く

この時の(coxθ, sinθ)を(x, y)座標とする図形を描くと半径1の円になります。

座標は(1, 0)→(0, 1)→(-1, 0)→(0, -1)→(0, 1)と変遷します。

f:id:ys_45:20180304222743p:plain

 

sinθを30°ずらした図形を考えるとどうなるでしょう?

座標は(cosθ, sin(θ+30))となり、y座標が30°ぶん先行した値となります。

示す図形はこんな楕円形に

f:id:ys_45:20180304223444p:plain

90°ずらすとsinとcosの波形が一致するので直線になります。

(cosθ, sin(θ+90°))

f:id:ys_45:20180304223558p:plain

上記ではθのオフセットを考えましたが、比率が違う場合はどうなるでしょう?

(x, y) = (cosθ, sin2θ)

cosに比べてsinが2倍の比率で変動します。

x軸が1周期する間にy軸が2周期するので8の字のようなラインを描きます。

f:id:ys_45:20180304224344p:plain

比率とオフセットを変化させると以下のような図形が得られるようで。

↓拾い物です。こちらはsinθどうしの比較なのでxを90°ずらして考えてください。

f:id:ys_45:20180304224626p:plain

やっぱりビジュアライズ

図示ばっかりじゃわからん!ってことでMayaでビジュアライズしてみました。

コードはこちら。

実行するとロケータが取り出され、UI上でのθの比率オフセット変更に合わせてリサージュ図形を描きます。

Visualize lissajuous figure in Maya UI

上記図示を再現

f:id:ys_45:20180304225332p:plain

f:id:ys_45:20180304225426p:plain

f:id:ys_45:20180304225441p:plain

f:id:ys_45:20180304225501p:plain

いろんな波形を取り出してみます。

 

f:id:ys_45:20180304230203g:plain

オフセットを変更するとまるで3D空間上で回転させているように見えたりしておもしろいですねー。

 

Si Side Bar Ver2.3.8 / 2.3.9 Mayaからのキー設定反映、UIスケールへの対応

github.com

ver2.3.8

Maya上でホットキーやグラフエディタ上からキーを設定したときにサイドバーのUIへリアルタイムに反映されるように機能追加しました。

f:id:ys_45:20180204153303g:plain

設計当初から欲しい機能でしたがようやく実現。

 

ver2.3.9

MayaUIのスケーリング設定したときにUIが崩れてしまわないように自動的に各所のサイズを調整するようにしました。

※Maya2016以降対象、2015以前にはスケール機能自体が無いようです。

f:id:ys_45:20180204153505p:plain