さて、前に作った Houdini Image Mosaicが速度面が気になっていたので
改良の余地が無いか色々模索しておりました。
前の会社の先輩で今も同僚の津守さんのお陰もあって、初の自前python sopを。
古い仕組みはテクスチャのデータベースを作るのに、外部のpythonで画像のファイル名をカラー値にリネームして、chopで読み込む用のデータを作って、アトリビュートに割り当てなおして、、、
と回りくどい感じだったのが
python sopで画像の名前も変更すること無く、すんなりアトリビュートを作ることも出来
データベースをシンプルに作れる様になりました。
そして、画像のピクセル毎のfor eachも遅いので
(といっても他のソフトには無い強力な機能なんですが)
なるべく使いたくないなと思い、point cloudで出来るんじゃと思いトライしてみました。
結果、for eachを一度も使わない仕組みに出来、速度面では27556(167*167)ピクセルの解像度の時で、
for each 20s
point cloud 84 ms
約240倍高速化! これにはびびりました。
ちなみにmaxscriptだと7分(笑) さらにfor each の20倍遅い。。
速度も上がったということで、最後の画像の出来上がりの解像度を高くし
デモムービーをブラッシュアップしました。
Houdini Image Mosaic from sugiggy on Vimeo.
今まで、何かの近い値を探すという考えはforループで全検索をかけないと駄目だと
思っていたんですが、色々先人達の知恵があるんですね。
KdtreeやuniformGridなど最近知りました。
良く巷で言われている、スクリプトやプラグインの速度差ってのは
行われている処理の複雑度(難易度)でのスピードの違いよりも、
ループの数での差の方が圧倒的に大きいようです。
他のソフトで、スクリプトをガリガリ書けて、そして速度面に悩んでいる人、
TPじゃ物足りない!なんて思っている人には是非Houdini触ってみることをお勧めします。
他のソフトではプラグインレベルの事が、ノードを組んで出来あがってしまうので
本当にお勧めです。
Houdiniはシンプルなノードで構成していくので、TPよりも簡単に仕組みが作れますね。
(TPはノードが大きすぎて、且つ一つ一つのノードの癖がありすぎるなーと思います。
まあ、リジッドが速いので使うときは使いますが、、)
最近、とある破壊やっていますが、これはHoudiniじゃないと出来ないなーと
つくづく思いながらやっています。
モデリングの要素とパーティクルの要素を一体に、そしてプロシージャルに作成できる所は
かなりの強みです。
DOPの深い知識がまだ無いのですが、SOP+POPだけでも十分なエフェクトになりますね。
最近のエフェクトといえば、Fluid全盛期ですが自分はエクスプレッションやノードの仕組みで
ガリガリ作るのが好きなので、こっち方面で頑張っていこうと思います。
(と言いつつも、DOPの勉強も始めなければ、、、)
Tweet
0 件のコメント :
コメントを投稿