2017年07月10日

進捗が不具合

独自フォーマットの開発の続きになります。
アニメーションが動いたら進捗を上げる予定でしたが、6月中の進捗はほぼなく、7月に入って不具合を二つ修正しただけでした。結局、2ヶ月も遊んでしまって自己嫌悪。

進捗ひとつめはシェイプキーノードの問題修正。
前回のテストでは、シェイプキーを持つメッシュノードを再帰関数で処理できない問題があったのでこれを修正しました。修正は恐ろしく複雑な作業を要するものだったので詳しいことは書けませんが、まあ、大変でした(まる

進捗ふたつめは激遅インポータの修正。
リグなしの摩耶改二モデルを独自フォーマットで書き出して、自作エンジンで読み込んでみたところ、11.2MBあるこのモデルを読み込むのに、デバッグモードで52秒ほど(220KB/s)かかってしまうことが判明しました。
バイナリ版のFBXで書き出した同モデルのデバッグモードでの読み込み時間が、7.2MBで4秒(1843KB/s)なので、1秒あたりの処理速度は約8.3倍も遅れています。ロード時間では13倍の差。
これだけ遅れた原因は、ファイル読み込みに使っているifstreamのread()関数を頂点ごとに呼び出していたからでした。1回呼べばいい関数を60万回くらい呼んでたよ(・・;) 税金対策か。

修正後の読み込み時間は、デバッグモードで約1秒(1042ミリ秒)、リリースモードでは約0.5秒(524ミリ秒)という速度になりました。1秒あたりの処理速度は計算するまでもない感じですね。
デバッグモードの読み込み時間が一転して爆速になりましたが、これはAssimpがインポータで行っている処理を私はエクスポータに実装したのでインポータの仕事が極端に少なくなっているためと思われます。MSVCはデバッグモードだといろいろちょっかい出してきて処理が遅くなりますが、それを回避できているためではと思います。
リリースモードの速度は普通です。Colladaとほとんど同じでした。


進捗は以上です。今回は問題を2ヶ所修正しただけでした。
頑張れば1日でやれなくもない程度の進捗ですね。。だらしねえ。

現在はちょっとだけモデリングをしています。近頃は仕事が忙しくてプログラミングが捗らず遊んでばかりになっているので、これで配管と思い久しぶりにモデリングすることにしました。
作っているのは、GGXrdの某キャラ(まだ秘密)で、今は素体を作っているところです。モチベが微妙なため1日30分くらいしか作業できてないですが、素体はなかなかいい感じになってきています。そろそろ顔作るかというところです。
元ネタも3Dというハードルの高さもあっていろいろ難しそうですが、まぁどうにかして乗り越えたいですね。
とか書いたときに限ってプログラミングが急に捗るっていうパターンもあると思いますが、そのときは悪しからずです。

そんな感じです。
では。
posted by gency at 21:46| Comment(0) | 3DProgramming