SeExprMesh v0.5公開。(シーンによるとは思いますが)6.5倍ぐらい速くなりました。

最近これのネタばっかりですみません。

前回Windowsバイナリをtakkyunにビルドして頂いたのを報告した際に、現状1個問題があるということを書いたのですが、それが解消されたのでバージョンUPして再度githubにアップしておきました。
SeExprMesh – Download (zip)

今回もWinバイナリはtakkunにビルドして頂きました。毎度毎度あざます!!!!!!!!!
ほんと感謝です。


今回修正した問題はというと、MT化するために行った並列化処理の部分。
これを非常に愚鈍にというか、まぬけな方法で行なっていたために、どうやらMT化する前よりも遅くなっていたという事が発覚しました。

僕もなんか遅いなー、こんなもんなのかなー、、、なんて思ってはいたものの、一部高速に動作していた場所もあり、まぁこんなもんかと思っていました。とか言って自分で高速になったと感じていただけかもしれませんので実際に高速になっていた部分があったかはだいぶ怪しいのも事実、、
MT化したことで満足しちゃってた可能性もありますしねー・・・(遠い目

まぁそんなこんなで必要以上の低速動作をしていたSeExprMeshなのですが、githubにてSeExprの開発者の方から直接コメントを頂き、問題を具体的に把握することが出来ました。

その問題とは。
MT動作の際に他のスレッドと処理がぶつかっておかしなことが起こらないようにするため、並列化に対応させたのですが、そのやり方がまずかった。各頂点毎にSeExprオブジェクトを生成してしまっていました。それって要はその都度プログラムのパースなどが行われるので、とてもコストの高い処理なのです。
しかも通常は1度やればいいものを各頂点ごとにやっていたと、そういうわけです。

いやー、あほですね。あほ。
びっくりします。
普通のループじゃ絶対にやらないことをC++だったりMTが絡んだりという慣れない環境でやったがためにあれこれミスってしまった、というところでしょうか。反省。。

それを今回、各スレッド用のSeExprオブジェクトを必要な数だけ最初に用意し、それを使いまわすやり方に切り替えました。
先ほどサンプルシーン(波デフォーマのやつ)でスピードテストをしたところ、6.5倍以上(6.6xxx倍ぐらい)の速度が出ていました。
元々のはもうぶっちゃけると使えねーー!!ってぐらい重かったのですが、今ぐらいの感じであれば結構実用的な範囲なんじゃないかと思います。

なので是非皆様にも是非お試し頂いて、良い感じだなと思われたら是非実戦投入頂きたいと思っております:)

まぁ簡単なものとは言えエクスプレッションですからね、ちょっと敷居は高いかもしれませんが、なかなか使えるケースはあるんじゃないかなと思ってます。
個人的には一番使うのは多分エフェクトなんじゃないかなー、と。
ジオメトリにノイズかけたりとかが自由に出来ると、それをレンダリングする場合だけではなく、パーティクルやFluidのシミュレーションを行うときに裏で、例えばエミッタやコリジョン用などに使うことも出来るなど、用途は結構広いんじゃないかと思っています。

僕自身が仕事で使いたくて作ったノードなわけなので、今後タイミングを見て会社でも導入したいですし、あちこち根回ししとかねば、と思いますw

しかしほんとに英語で情報公開しただけで反応良すぎ。
こりゃモチベーションUPにもダイレクトに繋がりますし、これからも続けていきたいです。
そのためにもっとしっかり英語力UPさせねば、とも思います。

がんばりまーす。

〜余談〜
世の中に数多あるアプリケーションたちですが、突然10倍速くなりました!とか100倍速くなりました!とか聞くことがあります。
MayaとかHoudiniとかも然り。
それって実は今回僕がやったみたいな割としょうもないミスみたいなものも含まれてたりするんじゃないか、だから10とか100とかおかしい程の高速化が出来るんじゃないか、なんて邪推してしまいましたw
どうなんですかね、実際。

コメントを残す

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