サボってる場合じゃないですねそうですね。
Ruby1.9ではブロックの途中で抜けるとプロファイルが正しく取れなくなるバグ(たぶん)があって困ったなというのが前回までのお話。
一応現象はRubyのRedmineで報告しといたものの、ソースみた感じではそう簡単に直りそうもねー気がするので、これを回避しつつプロファイル取るか。
1.9はあきらめて1.8だけにする手もあるんだが、1.8用のビルドをするのが面倒なだけだったりする。
まあブロックから途中で抜けなければいいので、breakとかブロック中からのreturnとか例外で飛び出したりとかしなければいいだけ。簡単だね!
いや、日常的に例外で抜けることなんてそうないし、途中でいきなりreturnとかあんまり行儀良くないことはしないんだが、breakは普通に使うし禁止されたらきついだろ。
とおもって調べたけど意外になんとかなった。
breakは大抵これ以上のループは無駄だから打ち切りというところで使われているので、無駄だけど最後まで通してしまうことにする。
やられたのがEnumerable#find。こいつの中でもbreakしてやがる。これはselect {...}[0]で置き換え。
こんなもんでなんとか通ったよ!意外と使ってないもんだね、break。
実際にはソースみてもどこでずれてるのかよくわからないんで、tracerで1フレーム分トレースしたログから、入ったけど抜けてないメソッドを抽出してやると簡単に見付かった。
取れたプロファイル的にはやはり描画に9割弱の時間がかかってるね。そうだよなー、こういう値は想定内だ。
ずっと前計測したときの経験からすると、ゲームロジックの方ももうちょっとでかいと思ってたんだけど、描画方法変更して重くなったんだろうなぁ。
さて、ここからどうしようかな。そろそろプレゼン内容をちゃんと決めてデータ取りなり改造なりしないとね。
Blender 2.49でCOLLADA Exporterが改善されてるのに気づいた。
モディファイアが適用して書き出せるのは嬉しい。
あとアニメーションも中途半端だったからなんとかしといたよってなってんだがこれ大丈夫だろうか。試してみるかなぁ。
アニメーションの補間方法がBEZIERになってるのにIN_/OUT_TANGENTが無いのはそのまま。
あとtransparencyが1-alphaになってるのもそのまま。だけどこれは仕様があいまいだったのが悪いのでalphaと1-alphaのどっちも一応有りらしい。
試したらアニメーションは駄目だった。動きがおかしい。やっぱりボーン座標系のアニメーションをワールド座標系に変換ってのが無理あるんじゃ…。
あとモディファイアの適用もおかしい。これArmatureモディファイアも適用されてんじゃなかろうか。
やっぱりまだそのままじゃ駄目か。あとでマージしたパッチあげておこう。本当は本家に投げるのがいいんだろうけど、でかいところは反応ありそうで敷居高いなぁ。