ラベル Plug-ins の投稿を表示しています。 すべての投稿を表示
ラベル Plug-ins の投稿を表示しています。 すべての投稿を表示

2009年5月27日水曜日

◇アップデート◇ スクリプトオペレータを使用してポイントをX軸に固定するプラグイン

発見したバグを修正した
スクリプトオペレータを使用してポイントをX軸に固定するプラグイン(バージョン1.1)を
アップロードしました。
昨日と同じく以下のアドレスよりダウンロードしてくださいませ。

http://mochi-mochi-web.hp.infoseek.co.jp/


現在までにダウンロードしたかたはダウンロード後ファイルの上書きでOKです。

今日の朝発見したバグですが、どうやらポイントクラスタの特性によるものだったようです。
ポイントクラスタはクラスタ内に含まれるポイントから延びているエッジに新規ポイントが追加された場合、
自動的にクラスタ内に追加するようです。
たぶん。
なので、

1.ポイントクラスタにスクリプトオペレータを実行。
2.ぺったんこになる。
3.ポイントから延びるエッジに新規ポイントを追加
4.新規ポイントもクラスタに強制追加
5.新規ポイントもいっしょにぺったんこ。

という流れになっていたようです。
なので、バージョン1.1ではポイントクラスタではなく、エッジクラスタを使用することとしました。
エッジクラスタであれば不要な新規エッジが追加されることもないようなので、大丈夫かとおもわれます。
たぶん。

なので、使用方法としては『エッジを選択してから実行』となりました。
ご注意くださいませ。



これで、はれてモデリングのお供になるのではないかと・・・。
ただ、処理内容が少し複雑になったため、高ポリゴンになるにつれ処理が重くなることが予想されます。orz

あと、画像のようにクラスタに隣接する場所に新規ポイント等と追加すると少し挙動がおかしくなるようです。
(真中にポイントを追加したつもりでも、ずれてしまう。)
というのも、スクリプトオペレータで強制的にポイントを0にしているだけで本来のポイント位置は別にあるからというのが理由のようです。

これは・・・トレードオフというところでしょうか・・・。
う~~~ん・・・。
常に適用しないほうがいいのかもしれませんねー。
こればっかりは使っていってみないとわからない点です。
とりあえず今はこれで妥協ということで。


拍手する

2009年5月26日火曜日

スクリプトオペレータを使用してポイントをX軸に固定するプラグイン

追記:バグ発見!
またやってしまった・・・orz
ポイントを追加選択ポイント付近に新規ポイントを追加すると
そのポイントもクラスタ内に含まれてしまうようで、X軸0に固定されてしまいます。
クラスタの作成方法が問題か??
近々アップデートしますので、それまではまともに使えないと思われます。
申し訳ないです。

前回の続きその2です。
できました。☆-ヽ(*´∀`)八(´∀`*)ノイエーイ
スクリプトオペレータを使用してポイントをX軸に固定するプラグイン。

せっかく作ったので、公開してみます。
XSI徒然日記さまの「ポイントを0平面で固定」とほとんどおんなじですが気にしない!!
任意のポイントに適用するのででちょっとだけ違うってことで。(;´Д`)
(…スイマセン…orz)


以下のページに飛んで最新プラグインの項目からダウンロードしてください。
PointCls_Zero_Fixation.jsって名前です。

http://mochi-mochi-web.hp.infoseek.co.jp/

ダウンロードしたら解凍して
C:\users\ユーザー名\Softimage\XSIバージョン\Application\Plugins
内にぶち込んでやってくださいませ。
正常にプラグインがインストールされていたらXSI画面右 Transform > 選択ポイントをX軸0に固定 が追加されてるはずです。たぶん。




使用方法は

・ポイントを選択状態にし、Transform > 選択ポイントをX軸0に固定 を実行

のみです。
簡単です。
選択したポイントがX軸に固定されているのをご確認くださいませ。キタ━(゚∀゚)━!
動かしてもX軸は移動しないはずです。


画像はわかりやすく左半分を選択してますが、通常使用用途となるとX軸0付近のポイントのみでしょう。

間違えてしまった場合はオブジェクトのシェイプコンストラクションモードにあるClsZero_Fixationという名前のスクリプトオペレータを(#゚Д゚)ゴルァ!!(削除)してください。
元に戻ります。
逆に用済みになった場合はオブジェクトをフリーズして頂ければきれいさっぱり姿を消します。




ちなみに、そんな複数オブジェクトに一度に適用しないだろうという勝手な考えの元、
オブジェクトの複数選択には対応してないっす。

注意点としてはX軸とはオブジェクトのローカルのX軸となります。
グローバルではありませんのでご注意くださいませ。

疲れたので、苦労した点などはまた後日。
ではぁ~。




あ、ちなみにLand-Yさまからのリクエストされたプラグインの作成は諦めてませんよ~!
とある問題にぶち当たっていまして…orz
もう必要とされていないと思われますが、気長におまちくださいませ。
修行を積んでまいりますので…。


拍手する

2009年4月29日水曜日

自動インストールプラグインバージョン更新メッセージ表示

- 追記 -
えぇっと・・・この記事間違ってたようです。
改めて職場で実験したら見事にXSIが立ち上がるたびにポップアップウインドウが表示されてしまいました・・・
むぅ・・・やはり外部にファイルを置くしかないのか・・・。orz


最近仕事でバリバリと自動インストールプラグインを作成しております。
お陰でだいぶ慣れてきました。
半年にくらべてかなり上達したんじゃぁないだろうか??ヽ(´ー`)ノ

半年前に作ったプラグインの中身なんて見た日にゃ、目も開けられない状態なのです。w|;゚ロ゚|w ヌォオオオオ!!
つい最近も半年ほど前に作ったプラグインの修正要望が来たついでに、
良くしようと思ったらフルスクラッチになってしまったという…

それはそうと、プラグインを大量に作るようになって、更新の際に関係者に告知をするのが面倒になってきました。
告知時に関係者が全員いないこともあるわけで…。
なので、ここはプラグインが更新されたら自動的にポップアップウインドウを出して告知しようと思いました。

今まで職場で使われてきた方法は

  1. バージョン情報を別ファイルに記録
  2. プラグイン更新時に別ファイル内のバージョンと見比べて更新されているか判断
  3. 更新されていたら告知

でした。
でもそれってスマートじゃない!!
別ファイルだったら消されちゃった日にゃ泣くしかないじゃん!!
…と思ったので別手口を模索。

プラグインの更新を行うコマンド Application.UpdatePlugins(); ってのがあるんですが、
これって更新されたかどうかスクリプトログには出力されるのに、なんにも返してくれないんです。
使えねぇやつめ…。ヽ( ・∀・)ノ┌┛ガッΣ(ノ`Д´)ノ

そこで XSILoadPluginコールバックに注目。
XSILoadPluginコールバックはプラグインがロードされたら呼ばれる関数です。
なのでここでポップアップウインドウ出せばいいのでは!!
ということで試してみました。


////////////////////////////////////////////////////////////////////////
function XSILoadPlugin( in_reg )
{
in_reg.Author = "mochio";
in_reg.Name = "hogehoge";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;

//コマンド登録
in_reg.RegisterCommand(hogehoge,hogehoge);
var msg = "\n" +
"■更新情報■\n"+
"いろいろと新しい昨日盛り込んでみました。\n" +
"詳しくはヘルプドキュメントをご覧下さい。";

XSIUIToolkit.MsgBox("――― Plugin " + in_reg.Name + "が更新されました。――――\n" + msg,siMsgOkOnly,"更新情報");

return true;
}
////////////////////////////////////////////////////////////////////////


  1.  プラグインファイルを更新
  2.  XSIでプラグインの更新をポチっとな
  3.  ポップアップウインドウが表示される。
  4.  もう一回XSIでプラグインの更新をポチっとな。
  5.  ポップアップウインドウは表示されず。

おぉ!!これいいのでは!?
しかし…
  1.  XSIを立ち上げる
  2.  かならずポップアップウインドウが表示される。∑ヾ( ̄0 ̄;ノ オーット!
という罠が…。
というのもXSIを立ち上げたときにもすべてのプラグインがロードされてるからですね。
そりゃそうか。ε=( ̄。 ̄;A フゥ…

まぁいっか~と放置して数日。
また気になり始めたので再度挑戦。

今度はXSILoadPluginコールバック内で、バージョン等を記述している点に注目。
ってことはその記述よりも前にバージョンを取得して、後に再度取得すればバージョンの比較ができんじゃねぇだろうか??
ということで試してみたのがρ( ̄∇ ̄o) コレ

////////////////////////////////////////////////////////////////////////
function XSILoadPlugin( in_reg )
{
//旧プラグインバージョンの確認(文字列なのはわざとよ~)
var Old_Plugin_Version = in_reg.Major + "." + in_reg.Minor;

in_reg.Author = "
mochio";
in_reg.Name = "hogehoge";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;

//新プラグインバージョンの確認
var New_Plugin_Version = in_reg.Major + "." + in_reg.Minor;

//コマンド登録
in_reg.RegisterCommand(hogehoge,hogehoge);

if(Old_Plugin_Version != New_Plugin_Version){
var msg = "\n" +
"■バージョン情報■\n"+
Old_Plugin_Version + " >> "+ New_Plugin_Version + " \n\n" +
"■更新情報■\n"+
"いろいろと新しい昨日盛り込んでみました。\n" +
"詳しくはヘルプドキュメントをご覧下さい。";

XSIUIToolkit.MsgBox("――― Plugin " + in_reg.Name + "が更新されました。――――\n" + msg,siMsgOkOnly,"更新情報");

}

return true;
}
////////////////////////////////////////////////////////////////////////


こんどこそ出来た~~!!d(>_< )Good!!
これで更新情報を告知したいときはバージョン情報を書き換えればOKだわ~~!
一応個人的要件は満たしてるから満足。

…でももっと簡単な方法あったりします??
だれか知ってたら教えて下さいーー (;^_^A アセアセ・・・



拍手する

2009年1月19日月曜日

さらにタンジェントくん改造中

どうも。

まだタンジェントくん改造してます。
終わったと思ってたのに…。
なんかいろいろとやろうと思うとほんとに終わらないですねー。
今回は内部的なところをイジっておりました。
今後のバージョンアップを見据えてカスタムプリファレンス内にバージョン情報を持たせてみたりしました。
前回の記事に書いたカスタムプリファレンスを消去するには\Data\Preferencesディレクトリにある
関連したPresetファイルを削除するのが唯一の方法という件ですが、
どうしてもそれを手動でやるのが許せなかったので、バージョンアップしたら自動的に作り直されるようにしました。ヾ(*´∀`*)ノキャッキャ

手法は簡単でした。
まず、既存のカスタムプリファレンス内に保持しているバージョンと現在のプラグインバージョンを比較
バージョンが古ければカスタムプリファレンスを破棄、新しいカスタムプリファレンスを作る。
です。

最初はユーザーファイルの中にあるPresetファイルを直接削除していたんですが、その必要はないようでした。
かといって、新しいものを作るだけでは重複してしまうので、XSI内での消去は必要のようです。

次に、困ったのは新しいカスタムプリファレンスを作った際にPPGの見た目が更新されない点に苦労させられました。
内容的には更新されているようなのですが、レイアウトが更新されないのです。
これは前々から疑問だったんです。
まぁそもそもあまりレイアウトを作りかえることなんてないでしょうから普段は問題ないんでしょうけど…。

カスタムプリファレンスは Defineコールバック や DefineLayoutコールバック を使っています。
SDKでDefineコールバックの説明は以下のようになっています。

**********************************************************************
プロパティページ上のコントロールの基礎になるパラメータもすべて含め、プロパティセットを定義します。
プロパティのインスタンスを作成するときに発生します
**********************************************************************

ということなので、カスタムプロパティを作った際に必ず実行されるので、XSI内で何度作っても問題ないです。
GJです。期待どおりです。

つぎにDefineLayoutコールバックですが、この説明は以下のようになっています。

**********************************************************************
プロパティページに表示されるコントロールのレイアウトを定義します。
**********************************************************************

これは問題ありません。
これだけならば作り直した時点で新しいレイアウトは変わっているはずです。
変わりません…。(#^ω^)ビキビキ
どうなっとんじゃ!(#゚Д゚)ゴルァ!!
(XSIを立ち上げなおすと更新されています。)
ということでさらに詳しく見ると以下の文章が。

**********************************************************************
XSIセッションでDefineコールバックが初めて実行された直後に発生します。
**********************************************************************

ということは…XSIを立ち上げてから最初にカスタムプリファレンス(パラメータ)を作った時にしか実行されないってこと??
意味あんの??
Defineコールバックとセットで呼び出してくれた方が使い勝手よくない??
ねぇ違うの??XSIさん?( ゚Д゚)∂゛チョットコイヤ
なんて言っていてもラチがあかないので、さらに見てみると以下の記述が。

**********************************************************************
また、PPG.Refreshメソッドを使用すると、このコールバックを強制的に発生させることができます。
**********************************************************************

んん?
PPG.Refreshメソッドって今回の場合使えなくない?
Defineコールバック や DefineLayoutコールバック を使わないカスタムプロパティならよく使ってるけど…。
たぶん方法があるんでしょう。
でもわかりません。
知りません。
誰か教えて…。

ということで違う方法を探してみますか…。
見つけました。
XSIUtils.Reload()メソッド君です。
PPG.Refreshメソッドとあまり変わらないようです。
カスタムプロパティをインスペクトする前に実行する必要があるようですねー。
注意としてはそのくらいかな?
ということで具体的には

var hogehoge = ActiveSceneRoot.AddProperty( OptionName );
XSIUtils.Reload(hogehoge);
InspectObj(hogehoge);

こんな感じでしょうか。
う~ん、なんとか解決…かなぁ? +(0゚・∀・) + テカテカ +

あと、カスタムパラメータ―を作りなおした際に、バージョン情報用のパラメータにも新しい数値を
初期値としてセットしているはずなんですが、これも更新されないようでした。
カスタムプリファレンスだからかな~~??
実験してないから分かんないですが…。
なので作ったあとに自分でセットしなおすという手間が発生しました。
その値セットの際になぜか値がバグるという不具合も…。
これはなぜだかはわかりませんでした…。
分かんないこと多いです。ホント…。orz

そうそう説明ページもまだ作ってます。
どうしてもある程度キチンと作ろうとしてしまいまうんですよー。
たぶん性分でしょう。うん。
しょうがない…じっくり作りますか。
まぁ待ってる人もいないだろうし…。
早くしやがれ(#゚Д゚)ゴルァ!!って方もしもいらっしゃったらコメントくださいませ。
では~。

追記:一応Ver2.5を公開しました。
以下のページよりDLしてください。

http://mochi-mochi-web.hp.infoseek.co.jp/

今回からZIP形式にしときました。
使い方なんかも中に書いてありますので。m(_ _)m



拍手する

2009年1月16日金曜日

タンジェントくん改造中

どうも。
ただいまの時間、午前4時半です。
明日会社なのに、こんな時間までタンジェントくん改造してます。
完全にプラグイン開発魂に火がついております。
バカです。
社会人失格です。ヽ(*´∀`)ノ キャッホーイ!!

でもようやくできました。
タンジェントくんVer2.5です。
改造できただけで、まだ説明ページとか作れてないので、公開はまた後日ということで。

Ver1.0を公開してからいろいろとご意見や要望をいただいたので、機能拡張をしました。

まず、基準フレームの指定方法の変更です。
Ver1.0では自分でコピーするフレームを指定していましたが、Ver2.5では以下のようになります。

・junkiさまよりご提案いただいたフレーム指定ではなくFカーブからマスターキーとスレイブキーを割りだしタンジェントをコピーするという方法
・PlayControlのインとアウトからキーを参照する方法

の2種類となりました。(これはVer2.0からです。)

次に、各種設定機能が加わりました。

・PlayControl参照の場合、キー検索の許容範囲
・マスターキーの値をスレイブキーにコピーするかどうか
・キーが見つからなかった場合、新たにキーを追加するかどうか

の3つの設定を行えるようにしました。
この設定はjunkiさまの神プラグイン『はいカラさん』を参考とさせていただき、
カスタムプリファレンスに登録、XSIを再起動しても設定が保持されるようにしました。

ご存じの方も多いかと思いますが、上記『はいカラさん』、ホントに(×100)神プラグインです。
リギングの際などないと死にます。
その他『ぬるぬる』などなど、多数のないと発狂して死んでしまうプラグインの開発をされていて、ホント尊敬します。
すごいです。
恩恵を受けている方は数知れずでしょう。
ビールウェアなのでjunkiさまはビールの海の上で暮していけますね。絶対。
自分もそうなれたらいいなー、という夢を見つつ頑張ります。はい。

さてさて、今回初挑戦のカスタムプリファレンスですが、結構苦労させられました。
それは自分で作ったカスタムプロパティをカスタムプリファレンスにインストールした後、『あ、レイアウトが変だわ。コード間違えてた!』となった時に起こりました。
カスタムプロパティを作るプラグインを修正して、再度インストールしなおしてもレイアウトが更新されやがらねぇ!!
何度やっても何度やっても…!!!
挙句の果てには自分の手で消去後にXSIを再起動しても復活してやがるのです。
キィィィィィーーーーーーーー!!!
と発狂後、SDKを読み直してみました。

ありましたよ!!
原因判明!!

*********** XSI SDKより抜粋 ************************************************

また、CustomPropertyオブジェクトを作成すること、およびInstallCustomPreferencesを呼び出すことによってもカスタム設定は作成できます。
このようなカスタム設定を削除す唯一の方法は、\Data\Preferencesディレクトリにある関連したPresetファイルを削除することです。

*****************************************************************************

消してやりました。
消えました。
せいせいしました。( `д´) ケッ!
もう帰ってくんな(#゚Д゚)ゴルァ!!

で、作りなおしたらようやくレイアウトが思い通りになりました
…が、値がデフォルトじゃねぇじゃねーか!!(`Д´)ゴゴゴ…━(ノдヽ)━( 乂 )━━━ヽ(゚Д゚)ノゴルァァア!!
またSDKを読み直してみました。
発見!!

*********** さらにXSI SDKより抜粋 ************************************************

ユーザが設定の値を変更する場合、新しい値は、デフォルトの.xsiprefファイルに保管されます。

*****************************************************************************

こいつの中身直接消してやりましたわ!!☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ
…なかなかの強敵だった…orz

カスタムプリファレンスってこんな風にして保持してたんですねぇー。
大変勉強になりました。
あぁーーー楽しかった。

というのが言いたかっただけです。はい。(∀`*ゞ)エヘヘ
タンジェントくんVer2.5は説明のページができたらまた後日ご紹介しますのでー。
ではーー(´∀`*)ノシ バイバイ


拍手する

2009年1月11日日曜日

MOCHI-MOCHIプラグイン第一弾:タンジェントくん

どうもです。
やはり仕事がはじまるとこまめに更新は難しくなりますね…。
でも頑張ります!!!

さて、今回ですがようやくオリジナルプラグインの公開を致します。
というのも、このMOCHI-MOCHIプラグインプロジェクト、
『XSI道場さんのTOPトピックスに紹介されてるのいいなー、うらやまCcccc-!
自分も紹介されたいーーー!! ウワァァ-----。゚(゚´Д`゚)゚。-----ン!!!!』
…という不純な動機の下、始まった経緯が…


冗談です。
この当初からこのブログの目的の一つでしたからね。
ちゃんとやらないと。
ということで記念すべき第一弾登場です。
その名も

タンジェントくん(右クリックで保存してください)
090119追記:場所が変わりました。以下の場所に飛んでDLしてください。
http://mochi-mochi-web.hp.infoseek.co.jp/

です。

……名前なんてこんなもんです。orz

で、肝心のなにをするプラグインかというと、簡単に言うと『ループモーション作成支援』です。
元ネタとなったものがSOFTIMAGE Japanのユーザ事例:株式会社スクウェア・エニックス「ラスト レムナント」内にありますので、ちと抜粋おば。

*****SOFTIMAGE Japanより抜粋************************************
-どんなツールを作成されたのでしょうか?

たとえば、F-curveの繰り返しを実施するときにキーの最初と最後のタンジェントの振る舞いが問題になるのですが、それを自動的に修正するツールや、カーブにフィルタをかける際に使うオプションの拡張などを行いました。

****************************************************************

これです。
『うぉーこれちょーべんりー!』ってことでこの発想をパクりました。
えぇ。パクりました。

いろいろな場面で多用されるループモーションですが、
そのループの開始フレームと終了フレームのFカーブキーの値と角度をキチンとあわせてあげないときれいなループにはなりません。
でもロケーターが多くなってきて、こといちいち手でやってると…やってられっか( ゚Д゚)ゴルァ!!となります。
そこでタンジェントくんの登場というわけです。はい。

インストール方法は…。

1.こちらのしてC:\users\<ユーザ名>\Softimage\XSI_6.0(バージョンにより可変)\Application\Plugins内に保存
090119追記:バージョン変更により、使い方など下記から多少変更されています。

以上です。
XSIを立ち上げると以下のような感じで項目が追加されておれば完璧です。




さてさて、使い方ですが手順は以下の通りです。

1.任意のオブジェクトを選択する。(複数選択可)
2.カレントフレームをコピー元したいフレーム(マスターフレーム)に合わせる。
3.タイムスライダー上で中クリック(ドラッグ)をしてコピー先にしたいフレーム(スレイブフレーム)に緑色のバーを合わせる。
4.Animation>タンジェントくん:Fカーブキーのタンジェントを統一 を選ぶ。

で、完了です。
オブジェクトに移動・回転・スケールのFカーブが存在していたらそれぞれループ波形になっているはずです。



ちなみに、マスター・スレイブフレームともにキーが存在していなくても問題ありません。
勝手に作ります。
(まぁ普通はそんな使い方しないと思うけど)
バージョン1ですので、いろいろと注意点が…。(バージョン更新されるかどうかもわからないけど。

1つ目はキーフレームがきっかり整数値にないといけません。
小数点が入っていると無駄にキーが打たれてしまうことになります。

2つめは、マスターフレームからスレイブフレームへタンジェントの振る舞いがそのままコピーされてしまうので
マスターフレームのスロープが片方が極端に短いとかだと、ループがいい感じになってくれません。
逆に長すぎるとイビツなFカーブとなってしまいます。
まぁその時は手動でスロープ調整やってください。

このあたりの問題はそのうち解決させようと思っております。f(^_^; スンマセン


ちなみにXSI6.0でプラグインを作成しましたので、そのほかのバージョンでは動作確認を行っておりません。
なにか問題がおきましたら誰か教えてくださいませ。


う~ん…それにしても公開したはいいが、誰か使ってくれるんだろうか
…っていうかその前にダウンロードしてくれるんだろうか?
ダウンロードしてくださった方の中で使ってみた感想とか教えて頂けると幸いです。はい。


拍手する