myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

Select Mirror Components

左側のポイントを選択して、ポチっと、右側のポイントが選択されます。

こういう機能が欲しい!

これぐらいのスクリプトならすぐ出来そうだから作ってみたけど、めちゃめちゃ遅い!
なにをやっても遅いです。
ハイポリには使えないツールなので、そのまま失敗作のフォルダに入れておきます。

こういうスクリプトはどっかで見たことがあるなー
きっとこれより速いんだろうなー。

と思って、りんぷるさんのサイトに似たようなツールがありました
俺のしょぼいスクリプトと違って、シンメトリマップを利用しています。
これはめちゃめちゃ速いです!さすがりんぷるさんですね。
エッジとポリ選択は普通に1個ずつの位置を比べているから、めっちゃ遅いけど。

りんぷるさんのスクリプトは両側を選択するので、少しいじってみました。
自分のパクリバージョンは、反対側だけを選択します。SHIFTを押しながら実行すると両側を選択します。

そして、エッジとポリゴン選択にもこのシンメトリマップを利用すれば早くなるんじゃないかと思って、せっかくいじってるから色々実験してみました。

結果は3倍以上速くなりました!!

スクリプトはここからDOWNLOADが出来ます。

mSelectMirrorComp.gif


では、ここからはスクリプト的な話です。ちょっとしたメイキングオブ。

VBScriptでは変数を宣言しなくてもスクリプトが動きますが、なぜか計算が遅くなります。
なので、VBScriptで書くなら宣言した方が良い。
とrrayさんが si-community.com で実験したことを覚えています。


こういうシンプルなスクリプトでも影響があるか試してみました。

XSI男にサブディビジョン x3 をかけて、38148ポリになりました。
左腕をポイント選択して、スクリプトを実行。
その結果:

ポイント・宣言なし:305 ms
ポイント・宣言あり : 276 ms

エッジとポリゴンが時間掛かりすぎるので、XSI男にサブディビジョンx1にして(9540ポリ)で試してみました:

ポリ・宣言なし:10022ms
ポリ・宣言あり:9485ms

エッジはもっと遅いので、サブディビジョン無し:

エッジ・宣言なし:62711ms
エッジ・宣言あり:58898ms

変数を宣言するだけで 5 ~ 7% のパフォーマンスが上がりました。

もっと複雑なスクリプトの場合は、この差がもっと大きくなるんでしょうね。

Option Explicitを使ったほうが良さそうですね。
※ Option Explicit とは、全部宣言しないとエラーが出てくるオプションです。使い方は:Option Explicit を書くだけです。

ポリゴンとエッジ選択が遅い原因は、選択されているポリゴンのXYZ位置をオブジェクトの全ポリゴンのと一個ずつ比べるからです。

それで思いついたことは、選択したポリゴンをポイントに変えて、シンメトリーマップで反対側を取得して、ポリゴンに戻せば速くなるんじゃないかな。
これだけでは正確にミラー選択が出来ませんが、ある程度ポリゴン数を一気に絞ることが出来ました。
これから絞られたポリゴンだけに比べれば良いです。

この2ステップ比較法は自分のしょぼいスクリプトを少しでも早くするために使っていたから、ここでも試してみました。

結果は:

XSI男にサブディビジョンx1 、腕を選択してからスクリプト実行:

エッジ : 62133 ミリ秒 --> 17984 ミリ秒
ポリ : 9758 ミリ秒 --> 3117 ミリ秒

結構速くなりましたね!3倍以上!

あのしょぼいスクリプトの作成時間は無駄ではありませんでした。良かったな~。
誰かの役に立てば良いな。

あっ、もう一つ分かったのは、XYZ位置を比べる時に、XYZ同時より、軸を一つずつ絞っていったほうが速いです。
良く考えてみると当たり前ですけどね。

3軸同時で比べたほうが書くところが減るから楽だと思ってそう書いてました。最初スクリプトを勉強し始めた時にOMなんかにこだわりがなかったし、何秒ぐらいは待てるじゃんと思っていたけど、やっぱりコンポーネントとかになると、計算が半端なく重たくなってしまいますね。スクリプトは1コアしか使えないし。

では、また。

Comments

good thing
thank u

Re: No title

Congratulations! you just wrote the first comment in this blog!
You've been awarded with a life time free pass !

I guess you didn't get pretty much of what I wrote here, (unless you can read japanese of course) but I'm glad that you find the script useful.

  • 2011/11/24(木) 17:25:36 |
  • URL |
  • myara #-
  • [ Edit ]

こんにちはー
宣言とか気にしてなかったですけど
ちゃんと早くなるんですねー
こういうのは動作が遅いとありがたみが薄くなるのでなるべく速くしたいですよねw

  • 2011/11/24(木) 19:02:23 |
  • URL |
  • りんぷる #mQop/nM.
  • [ Edit ]

Re: No title

りんぷるさんお世話になっています。
Rrayさんの書き込みを読むまで自分も気にしてませんでした。
宣言しなくても動くなら、面倒くさいからしなくて良いじゃないかと思ってdimなんてほとんど使っていませんでした。
今回は大した差が出ていませんでしたが、やっぱり少しでも速くしたいですね。

  • 2011/11/24(木) 23:31:19 |
  • URL |
  • myara #-
  • [ Edit ]

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/37-2e600e2e
Use trackback on this entry.