[リストへもどる]
一括表示
タイトルE3DFillUpMotion
記事No9945
投稿日: 2011/11/29(Tue) 10:17
投稿者26℃
ブレンドモーションさせることに挑戦しているのですが。
現在、処理の重さが課題になっています。

モーションポイントのないダミーのモーションをロードし(フレーム長さ余裕をもたせて500)

フレーム長さ40 と フレーム長さ20の
2つのモーションのボーンのクォータニオンを補間させ
E3DSetBoneQで設定しブレンドさせました。
E3DSetBoneQでモーションポイントが自動で作成され、40フレームまでモーションポイントが作成されるのですが。
前もって500フレーム全て+全ボーンにモーションポイントを作成したら
E3DFillUpMotionで大きく計算速度が変わりました。
フレーム長さが大きいほど重くなります。

E3DFillUpMotion hsid1, motid1, -1, frame, frame, 0

このような感じで、フレームは1つしか設定していないのですが、
モーションポイントの多さだけ重くなっているみたいです。

E3DFillUpMotionは補間が目的のものなので全体のモーションポイントを参照とかしているのですか?

タイトルRe: E3DFillUpMotion
記事No9946
投稿日: 2011/11/29(Tue) 10:48
投稿者26℃
よくよくかんがえたら、ブレンドしたデータをセットするモーションのフレーム長さは1でも事足りました(^^;)

一応フレーム長さ、モーションポイントによるE3DFillUpMotionの処理速度の変化の比較ですが
フレーム長さ1   FPS 600程
フレーム長さ40  FPS 150程
フレーム長さ500 FPS 30程
こんな感じです。

E3DSetBoneQも重い処理なのでこっちのほうどうするか考えるかな。

タイトルRe^2: E3DFillUpMotion
記事No9947
投稿日: 2011/11/29(Tue) 16:33
投稿者おちゃっこ
モーションポイントはC言語のチェイン方式で実装しています。
つまり途中データへも先頭データから順番に探さないと
たどり着けない仕様なのです。

補間結果へのアクセスは途中データでも速いですが
FillUpのときは遅いです。

1フレームずつ補間命令を呼ぶより
まとめて呼んだほうが合計速度で比べると速いです。

タイトルRe^3: E3DFillUpMotion
記事No9948
投稿日: 2011/11/29(Tue) 17:35
投稿者26℃
>先頭データから順番に探さないと
>たどり着けない仕様なのです。

500フレーム分チェックポイントを作っても
0〜40フレームしか利用していないので、その理由が原因のようにも思えませんねえ。

タイトルRe^4: E3DFillUpMotion
記事No9949
投稿日: 2011/11/29(Tue) 18:43
投稿者おちゃっこ
あ、そういえば、昔気が付いて放置していたんですが
補間自体は部分的に出来るんですが
補間結果に親子関係を反映させる処理が部分的に出来ていなかったのかも。
ちょっと記憶があやふやですが。

この辺、プログラムへの影響が大きいのでOpenRDBで直そうかと思ってるんですが。

タイトルRe^5: E3DFillUpMotion
記事No9950
投稿日: 2011/11/29(Tue) 19:13
投稿者26℃
親子関係ですか?
フレーム長さと関係なさそうな気もしますが。

E3DFillUpMotionを使う人も少なそうなので
OpenRDBで直しても問題ないのかなあ、自分は1フレームのモーション使うようにしたので速度的に問題なくなりました。

タイトルRe^6: E3DFillUpMotion
記事No9951
投稿日: 2011/11/29(Tue) 20:40
投稿者おちゃっこ
通常の読み込み処理では
補間した結果をまずフルフレームにします。
そしてそこから親子関係を考慮したフルフレームを作るのです。

fillupは1個目のフルフレームは部分的計算だけど
2個目のフルフレームが全体計算になっていたかも。

タイトルRe^7: E3DFillUpMotion
記事No9952
投稿日: 2011/11/30(Wed) 11:19
投稿者26℃
ああ、なるほどそれがあやしいですね。