myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Copy & Paste Point Weights

ポイントを選んでコピー(ウェイト情報をとっておく)

複数のポイントを選んでペースト(ウェイト情報を写す)

という単純なスクリプトを書いてみました。

XSIEnvelope (公式サイトがなくなったようですが、rray でダウンロードが出来ます) というプラグインを使っていましたが、デフォーマーの数とポイント数が多いと物凄く遅かった為VBS版を書くことにしました。

結果的に結構速くなりました。

デフォーマー数:215
ポイント数:240

XSIEnvelope の ペースト:
0:04:38.217000

俺のVBS版 ペースト:
0:00:01.074



この差が大きすぎと思ってXSIEnvelopeのコードを見てみました。

どうやらループに問題がありそうでした。
1ポイントにウェイトをペーストして、オブジェクトのエンベロープを更新して、ノーマライズ。
おまけにPrintでログも出しています。

これじゃ遅いですね

全ポイントにウェイトペーストしてから、エンベロープ更新、ノーマライズに変更してみました。
これでエンベロープの情報更新とノーマライズは1回だけで済む。

色々弄って、ノーマライズを1回だけすることにしてみた結果:

デフォーマー数:215
ポイント数:240

XSIEnvelope の ペースト(弄った後):
0:00:01.214


俺のVBS版とほぼ一緒!
自分のコードを書く前に元のコードを見るべきだったな・・・。そうすればちょっと弄るだけで済んだのに。

ちょっと悔しいからサブディビジョンをかけて3440 ポイントにしてもう一回:

デフォーマー数:215
ポイント数:3440

XSIEnvelope の ペースト(弄った後):
0:00:18.2690

俺のVBS版 ペースト:
0:00:02.6914



このような作業(数千ポイントにコピー)がめったにないでしょうけど・・・


勝った!( ̄▽ ̄)



DOWNLOAD

俺のVBS版 :
mCopyPntWeight
mPastePntWeight

XSIEnvelope(コピー&ペーストの部分だけをとって、弄った後)
copyPointWeight
pastePointWeight