2012年6月6日水曜日

並列化の検討

PMXモデルの描画手順

1.ボーン・スキン設定値取得
2.1.の値を用いてボーン変形(物理前)・頂点移動等
3.物理演算
4.1.3.の値を用いてボーン変形(物理後)
5.FPS調整
6.地面影描画
7.影描画
8.モデル描画

CPU側で重いのが2.と3.

この二つの並列にできればいいのですが
2.で物理演算を行うための初期姿勢を求めているので
2.が終わらないと3.を実行できない


Bulletはマルチスレッド対応されているらしいのですがやりかたがわからない

C++ではビルドしなおしてランタイムライブラリの設定でできるらしい
http://blog.livedoor.jp/dhime/archives/51784551.html

使える環境だとしてもなるほどわからんですが
http://bulletjpn.web.fc2.com/15_Parallelism.html


Bulletが重いのはあきらめて、
ボーン変形をモデル毎に並列化する?

前回スレッドを作って試したときはスレッドを作ることに時間をとられて
返って遅くなってしまいましたが、モデル数が多ければ効果的でしょうか。
.net4.0だとSystem.Threading.Tasks.Parallelとか使えて楽そうですね。
尤も、便利だけど遅いだと困りますがとりあえずやってみましょう

System.Threading.Thread は 遅くなった
System.Threading.Tasks.Parallel は 効果あり
処理時間は最も重いモデル+α

Bulletが1f=33msec中の半分を喰っているので
モデル4体で限界になります。

積んでるタスク

1.3Dプログラミング基礎
高速化 並列化の検討 もっといい方法はないか
MMDXのエッジを見る
マウス操作
キー操作
物理演算
MMDと比べて重力の影響が大きいのはバージョンの違いなのか実装不具合なのか
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


2.ツイッターbot
MMDBotAgentのタイムラインからトレンド抽出
MMDBotSeigaの個人とお題を分けようかな
ごちゃごちゃして見難いし
俺得モデルフェス用のスタンドアロンクローラーマイリスとクリップ

3.3Dプログラミング応用
・ゲームっぽく移動できるもの
・表情をプリクラっぽく出力できるもの
・モデルの首挿げ替えするもの

0 件のコメント:

コメントを投稿