パーティクルの動作速度?などに関してあれこれ

先日Mayaでパーティクルを触っていたところ、めちゃくちゃ重くてなんじゃこりゃ、と思いました。
その時、以前某社で「MayaパーティクルとnParticleとではキャッシュの取得時間が大きく違う」という話を聞いたのを思い出して
簡単なテストを行ってみました。
何かの足しになるかはわかりませんが、一応参考までに貼っておきます。


——————————
◆テスト内容
・シンプルなシーン(1エミッタ、2フィールド、24フレーム)でテスト
・キャッシュの保存先はネットワークドライブ

■旧パーティクル
・300万パーティクル
2649.98秒(44.17分) →1ファイルあたり約900MB

・30万パーティクル
219.11秒(3.65分) →1ファイルあたり約87MB

 
■nParticle
・300万パーティクル
194.83秒(3.25分) →1ファイルあたり約140MB

・100万パーティクル
87.42秒(1.46分) →1ファイルあたり約117MB

・30万パーティクル
30.14秒 →1ファイルあたり約35MB

——————————
 
いかがでしょうか。
割と予想通り?はたまた予想外?

僕はだいぶ予想外でした。
ここまで差が出るとは思っていませんでした。

このテストでは、ネットワークドライブ上にキャッシュを保存した、という点がミソです。

要は旧パーティクルの方がキャッシュサイズが大きいのです。nParticleの何倍も。
nParticleのキャッシュはAllで取ってあるので、キャッシュされているアトリビュートも同じはずです。
なのでこれは単純にpdcファイルよりもmcファイルが優秀であるということなんですかね?
何が優秀なのかはわかりませんが。
それともキャッシュがdoubleじゃなくてfloatになってるとか・・・?まぁないか。

というわけでよくわかりませんがnParticleの方がキャッシュが軽かったので、
ネットワークにキャッシュ保存する必要がある人はnParticle推奨です。

が!

このテストをやっていたときにnParticleに問題が起きまして。
まぁもしかしたら僕がその時作ったシーンがおかしかっただけなのかもしれません。しれませんが、問題が起きました。

何が起きたかというと、300万パーティクルのキャッシュを行った際、
キャッシュがまともに読み込まれませんでした。パーティクルがぶっ飛んだりとか。つまり全く使えない。
キャッシュ自体はなんとか取れてるっぽかったのですが(たぶん)、ひとまずそういう事が起こりました。
エラーの介在なんかしようはずも無いんですけどね、キャッシュ取るのなんてボタン押すだけですし、
他のデータは全部普通に動いてますし。

というわけでよくわかりませんが(またか)、nParticleで大量のパーティクルを扱う際は要注意ということです。

 
個人的にはnParticleの方がキャッシュ周りとかあれこれ便利なので、今後ちゃんと作るときとか使い回し考えるときとかはnParticle使う感じで考えています。パーティクルに関してはプロジェクト設定してやらないとキャッシュが反映されないとかあれこれ面倒なのでキャッシュの使い回しすらままなりませんし。
あとはやっぱり軽いので。ウチではネットワークドライブガンガン使いますからね。

ただ普段使いはどうしてもいつもの癖で普通のパーティクルつくっちゃいますね、、
nParticleはnucleusの設定をいじるとかあれこれ必要なので(大体全部OFFにするだけなんですけど)面倒な感じがしてしまうのも事実です。

なんかICEみたいなの付けばいいんですけどね、ないでしょうねこの先。まぁいいんですけども。。

 
あとこちらは別のテストというか、上記テストのかなり前に行ったものなのですが、
各ソフト間でどのぐらいパフォーマンスに差が出るか、というのを試してみました。
使用ソフトはMaya 2012, 3ds max 2009, Houdini11の3本。
プレイブラストをしてその時間を測定する、という方法を取りました。
時間の測定はストップウォッチ的な感じでだいぶ適当ですwww

——————————

■内容(最初にMayaで作り、他のソフトは大体これに合わせた形にしました)
・Volume Emitter, Turbulence Field, Drag Fieldを使用
・Rateは1,000,000prt/sec
・100F(1-100)で計測

◇Maya(旧パーティクル)
213 sec
◇Maya(旧パーティクルにlifespanでrgbPPにRamp)
410 sec

◇Maya(nParticle)※nucleusはgravity0, airDensity0, substep3(デフォルト)
477 sec
◇Maya(nParticle)※上記と同セッティングでsubstepを1に
381 sec

◇Max
176 sec
◇Max(box3でturbulence)
192 sec

◇Houdini
125 sec
◇Houdin(colorPOPでrampと$LIFEを使用して色付け)
330 sec

——————————
パーティクル速度だけ見ると一番弱っちいのはMayaなんですね。特にnParticle。

Mayaの旧パーティクルでrgbPPをいじっているのは、arrayMapper経由でPPAttrをいじったら
どのぐらい速度低下するのかを確認したかったためです。
Expressionを使用したら大幅な速度低下が起こるのは目に見えていたので、どうなるかよくわからない方を見ようと思いました。
というか思っていたはずです。多分。。。あまり良く覚えていませんが、多分。。。
にしても大幅に速度低下したのでびっくりしたのを覚えています。いちいちあれこれマッピングしてるからですかね?わかりません。

ちなみになぜExpressionが遅いかというと、Expressionはインタープリタで逐次処理されるので、
ああやって自分でプログラム打ち込んで処理みたいなことをすると大体の場合遅くなるようですし、基本的にはシングルスレッドで動作します。Mayaのパーティクルは元々シングルスレッドなのであんまり関係ないですががが
まぁ遅いもんなんです。その人の記述にも依存しますし。

HoudiniのcolorPOPの使用も同様にExpressionのテストです。

nParticleは何と比べてもダントツに遅かったので何やってもダメだと思ってスルーしましたww
でも上記のキャッシュの話があるので、これもちゃんとやっておけば良かったです:P

一番安定した結果が出たのはMaxでした。
多分スクリプトOp使ったらフェアだったんですが、僕がそれ使えない&遅いものなど覚える気もないということでbox3を使いました。

box3は各ノードがネイティブ動作するというか、ちゃんとコンパイルされてるので
Expressionなどに比べると速度的にだいぶアドバンテージがあるなぁと感じました。
box3は個人的にはHoudiniのVOPに近いものだと感じています。
聞くに日本ではあまり使われていないようですがだいぶいいツールだと思いますよ、Box3。

TPとの比較がよく行われるのですが、勝手な印象としては、TPの方がパーティクルをもっと高度な概念で扱っていると感じます。
box3の方がパーティクルがパーティクルとして扱われている感じ。
TPはリジッドボディだとか、次バージョンでは乗り物だとかまでもがパーティクルとして扱われているので、1個上の概念でパーティクルを扱っているような感じ。
どっちが良いってものでもないですが、もやもやしたエフェクトとかなら実はbox3の方が得意なのかも?
まぁTP触ったこと無いからほぼ妄言です。適当に流してください。

Houdiniも本当はVOPを使ってやってみるなどすればよかったのですが、まぁそこそこ速いだろうと思ってスルーしました\(^o^)/
HoudiniもExpression使うと遅くなりますが、VOP使うともっと速度低下は避けられたんじゃないですかね。
これもいずれテストしてみたいです。こういう形でやるかはわかりませんが。

 
今はまだまだMayaをがっつり使う必要があるのですが、いずれはHoudiniメインに切り替えたいと思っていますし、
実際パーティクルなんかはHoudiniの方が扱いやすい上に高速に動作するので、
方法論というかワークフローやパイプラインさえ整ってしまえば、実はそんなに遠い未来じゃないのかな、なんて思ったりもしました。
僕はやる気です:D

っていうか統一感のないテストでサーセン。ほぼ気まぐれと勢いでやりましたし反省はしていない:D

とりとめもないですが終わります。さようなら。

「パーティクルの動作速度?などに関してあれこれ」への8件のフィードバック

  1. nParticleが大量ってわけじゃありませんが、
    以前Maya2009でやったら、全くキャッシュが使い物にならかったことがありました(;´∀`)
    そのシーンをMaya2011でやったら問題がなかったんですが
    バージョンによってnParticleは良かったり、良くなかったり、不安たっぷりです(´・ω・`)

  2. >takkunさん
    のうぇええええええ
    nParticleは登場以来ずーーーっとその存在を疑問視してたのですが、
    やっぱりそういうこともあったんですね。まぁあるわな、、
    nParticleというよりはnCacheが若干怪しいってことなんですかね。うーむ、、
    作ったものがぶっ壊れるとかどうやって使えばいいんだって話ですよマジでww
    まぁでもバージョン重ねるごとに徐々によくなってるようなので(?)、今後に期待したいところですね。

  3. 確かに、nCacheが犯人かも知れません!
    だんだん良くはなっていると思いますが、キャッシュをとった際のコネクションと、
    「Attach Existing Cache File…」で、とったキャッシュを指定した時のコネクションが
    違うのが、とても謎です。

  4. >takkunさん
    > 「Attach Existing Cache File…」で、とったキャッシュを指定した時のコネクションが
    それ!!!!!!!
    Fluidだとアトリビュートがどうたら言って100%失敗したりしますよ。
    だから自前MEL(というほど大層なものではなくただのコマンド羅列)で対処してます。
    こっちだってバグのないツールなんてないのはわかってるので、1個や2個は許容しますが、大きいのが多すぎる・・・!!
    これで「MEL書けば大丈夫です」とか言い始めたらいよいよキレていいレベルですw

  5. ですよね!まじ、デバッグしたのかっと!!!!!
    適用したら絶対に起こるバグは、許せないです。
    一応ブログのネタに取っておいてるので、そのうちポストすると思いますwww

    でも、「MEL書けば大丈夫です」は、逆にはやってほしいかもしれません(ぁ
    きっとMel/Python/APIが出来る人は、神レベルになるんじゃないかと!
    引く手あまたなんじゃないかと!
    夢の、ヘッドハンティングされるんじゃないかと!
    ごめんなさい、夢見過ぎました。(´∀`;)

  6. >takkun
    ほんとです。
    デバッグはしてると信じたいですけどね、疑いたくもなるぐらいアレです。
    MEL書けば〜ってのは、あれこれやるための手段として言って良いものであって、ツールにバグがあった時に言い訳に使っていいものでは無いと思うのですよ。。
    まぁどうやってもここはベンダーが強いので末端ユーザが何言ってもアレなんですけどね:P
     
    MEL/Python/API書ける人最近映像系にも大分増えてきた気がしますね。
    いい傾向!!
    僕はこれからHDKとHOMとVEX(どれもHoudini関連)に注力して頑張りたいです!!!
     
    目指せHoudiniでFXTD・・・!!

  7. どうも、今Houdiniを勉強しているものです。
    散策の途中でもあってこちらに寄ることにしました。

    Maxのほうが早い!?というところが実に驚いた。
    自分も元MAX userで今MAYAやっていますが、
    ずっとMAYAPのほうが早いだと感じていましたが…
    それとexpressionを書くと処理が遅くなるという点は知りませんでした。
    てっきりノードより早いだと(テキストがなんか格好よく見えるのでw
    これからは注意しますと。

    キャッシュもそうですね。
    ただ私の場合はparticleだと100万超えると必ず壊れる、
    逆にnParticleだと300までは大丈夫(検証は300まででした。2011で
    どっちにしろ使えるものならないので、
    最終手段としてキャッシュなしそのままレンダリングしちゃいます!
    Krakatoaみたいなのを作るときそうします。

  8. >iGouさん
    コメントありがとうございます。
    いつもTwitterやブログ拝見しています:)

    このテストはそこまで厳密ではなく、ざっくりとどの程度速度差があるのかを確認するために行ったものです。なので全てのケースにおいて正確かどうかは定かではないのですが、まぁ目安としては参考になるかなと思います。

    Max速いの意外でしたかね?w
    これはおそらく、Maxは表示するパーティクルの数を減らす機能が付いていることなどにも関係していると思っています。
    あとBox3(2013SAPからはAdvanced Data Manipulationと言うらしいですが)は処理がC++で記述されていることもあって、MayaのExpressionなどよりは高速に行えるようです。
    Box3、個人的には好きなんですがあまり使われてないのが残念です:s

    Expressionに関しては遅くなるだろうなーと思ってそもそもテストしてないのですが、ちゃんとテストするならやっておくべきでした。しまった:P

    Mayaで現状nParticleを使用出来ないでいるのは完全にキャッシュに対する不安からで、出来れば今後はどこかでスイッチしたいところなのですが、、最新バージョンでは直ってるかな・・・?

    キャッシュ取らずにレンダリングするのも、ハードウェアレンダリングする際、まさにKrakatoa的な効果を出したいときには有効みたいですね。
    同僚や先輩が使っているのをちょくちょく目撃します:)

    ほんとはICEも一緒に比較したかったんですが、ライセンスが手元になく断念しました。
    いつか機会あればやってみたいです!

コメントを残す

メールアドレスが公開されることはありません。