« Pigeon:Impossible。 | トップページ | 淫さまバージョンアップ。 »

2008年7月 4日 (金)

秒殺クラスタ。秒殺するプラグイン。



色んなことしているうちに、知らず知らずのうちにクラスタは増える。
基本的に、XSI はオブジェクトの「ある部分」に何かの操作をするとき、多くの場合クラスタを作る。
デフォーメーション関係や、ハードエッジや、エンベロープも UV も。
ひと通りの作業が終わると、もはや用済みのクラスタも多い。
そんなオブジェクトがいっぱいあったら、どうしますか。
全部手で消しますか。
ほんとですか。


ゴルァ。


秒殺クラスタ。クラスタを秒殺するプラグイン。
http://homepage3.nifty.com/jjj/XSIFiles/Plugin/JJJ_XSI_Plugins.html


Bjosatscluster_ppg

もともとは、他のソフトウェアから Wavefront OBJ か何かでデータを持ってきたときに、鬼のようにクラスタが付いていて激怒したことが始まりだった気がする。UV 関係だったか、必要のないクラスタが1オブジェクトにつき数十個、そしてそういうオブジェクトが数十個あるような状態だったと思う。 そこで書いたのが、クラスタであれば種類を問わず問答無用で削除するスクリプトだった。

それとはまた別に、テクスチャの実験をしている時などに次々に UV を与えて、気がついてみると Texture_Projection が死ぬほどたまっていることがよくあった。こんどは、Sample クラスタであれば問答無用に削除するスクリプトを書いた。

こうしてだんだん色んな場合が出てきてしまったため、統合・汎用化したのがこのツールです。一応、マトモに動いているように見えるが、変なもの削除するといけないので、心配な方はバックアップを取ってから秒殺するか、秒殺の前に一度弱虫をしてみて下さい。




ところでクラスタの種類って、こんだけだっけ?

・ポイントクラスタ
・エッジクラスタ
・ポリゴンクラスタ
・ウェイトマップ(ポイントクラスタのプロパティ)
・エンベロープ(ポイントクラスタのプロパティ)
・シンメトリマップ(ポイントクラスタのプロパティ)
・UVクラスタ(サンプルクラスタのプロパティ)
・テクスチャマップ(サンプルクラスタのプロパティ)
・バーテックスカラー(サンプルクラスタのプロパティ)

他に思いつかないんだけど、何か抜けていたら指摘して下さい。追加します。




|

« Pigeon:Impossible。 | トップページ | 淫さまバージョンアップ。 »

コメント

ご無沙汰しております。IRCやらスカイプでお世話になりました。げとーです。ご家族皆様円満にお過ごしでしょうか。

厳密に確認してはいないのですがクラスタの件で、CageDeformすると「CageWeightCls」というクラスタができます。中身にエンベローブオペレータが入ってるので特殊な感じがしますが、念のためご報告を。

投稿: getoo | 2008年7月 7日 (月) 13時10分

おおう、げとーさまお久しぶりです。 
お父さんが下品なプラグインばかり書くせいで家庭崩壊の危機に瀕しております。


Cage Deform の情報ありがとうございます。ほんとだ、Cage ってこうなってるんですね。全然知らなかった・・・。
ってことで調べてみたのですが、

>中身にエンベローブオペレータが入ってるので

これは違うようです。

CageWeightCls の子供である Envelope_Weights、これはオペレータではないですね。オペレータじゃなくてプロパティです。Exploer でグラデーションのアイコンになってますよね。このアイコンは全部プロパティです。名前が Envelope_Weights となっていますがこれは単なる名前でしかなく、その証拠にリネームできちゃいます。Type を調べると envweights となっていて、エンベロープしたときにできるクラスタが持つプロパティのタイプと同一ですね。

ちなみに CageWeightCls というクラスタは単にポイントクラスタですね。名前が自動でCageWeightClsにされるというだけで、普通に頂点選んでクラスタを作った時にできるクラスタと同じ、ただのポイントクラスタです。エンベロープした時もこれと同じただのポイントクラスタができます。

オペレータで言えば、Cage Deform したオブジェクトと Envelope したオブジェクトを Explorer でコンストラクションヒストリーを見比べれば分かりますが、Cage の方は Cage Deform Operator で、Envelope の方は Envelope Operator ができていますよね。まあ、当たり前ですが。 ちなみにオペレータの Exploer 上のアイコンは歯車ですね。

なので、厳密に記述しようとすると、


●Cage Deform をした時

・CageWeightCls は、ただのポイントクラスタ。処理対象の範囲を決めてるだけ。

・その子供の Envelope_Weights は、CageWeightClsポイントクラスタが持つ、プロパティ。

・そのEnvelope_Weightsプロパティの Type は envweights。

・そのEnvelope_Weightsプロパティには、Cage Deform Operatorが接続されている


●Envelope をした時

・EnvelopeWeightCls は、ただのポイントクラスタ。処理対象の範囲を決めてるだけ。

・その子供の Envelope_Weights は、EnvelopeWeightClsポイントクラスタが持つ、プロパティ。
・そのEnvelope_Weightsプロパティの Type は envweights。

・そのEnvelope_Weightsプロパティには、Envelope Operatorが接続されている


ということになりますね。違いは、最後の「何オペレータに接続されているか」だけです。別の言い方で Cage Deform と Envelope の違いを説明すると、元のデータはまったく同じ形式のものを使うけれど、最後にそのデータを誰が利用するか= Cage Deform Operator が利用すると Cage Deform になり、Envelope オペレータが利用すると Envelope になる、ということになると思います。

いやあ、厳密な解説をしても意味はないんですが、いちおう、ね。
この辺は、Ctrl + Shift + 4 で出てくる SDK Exploer を見ると分かりやすいです。


で、秒殺クラスタでは、まずクラスタの type でフィルタをかけてポイントかエッジかポリゴンかサンプルかを分け、ポイントだった場合、そのポイントクラスタが持つプロパティの type がenvweight なのか wtmap(ウェイトマップ)なのか map(シンメトリマップ)なのか、あるいはプロパティを持たないただのポイントクラスタなのかを見分けて処理をしています。

この方式でやるとなると、Cage Deform と Envelope は両方とも type が envweight であるプロパティを持っているので、見分けがつかないことになります。 そうなると、そのプロパティに接続されているオペレータを探して、Cage なのか Envelope なのかを見分けなければいけなくなるでしょう。


しかし、その接続を探す方法がわかりません。 Orz


接続を調べる前にクラスタやクラスタが持つプロパティの名前を調べるというのは、もちろんNGです。ユーザにリネームされたら終わりですから。

ってことで、長ったらしく書いておきながら申し訳ないのですが、ひとまず Cage と Envelope を見分けて処理をするのは(Envelope は残して Cage だけ秒殺するとか)、すいません、まだできません。いずれ調べてみます。


ってことで、現在の秒殺クラスタは、Envelope にチェックが入っていた場合、Envelope はもちろんのこと、Cage Deform まで秒殺してしまいますので、ご注意ください。、仕様です。ええ、仕様ですとも。



投稿: junki | 2008年7月 7日 (月) 20時53分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/41725165

この記事へのトラックバック一覧です: 秒殺クラスタ。秒殺するプラグイン。:

« Pigeon:Impossible。 | トップページ | 淫さまバージョンアップ。 »