2012年6月30日土曜日

マウス操作

http://moepic.com/plg/key_r.php

キー操作
・前進後退 [済]
・左右旋回 [済]
・左右平行 [済]
・歩く走る [済]
・座る [済]
・ジャンプ [済]
・自動移動 [済]
・視点前後 [済]
・カメラ上下(視点無視) [済]
・カメラ旋回(視点無視) [済]
・スクリーンキャプチャ [済]

マウス操作
・視点前後 [済]
・カメラ上下(視点無視) [済]
・カメラ旋回(視点無視) [済]

モーション
・前進(歩く) ぺんぎん氏
・前進(走る) susuki氏
・後退(歩く)
・後退(走る)
・左右旋回
・左右平行(歩く) [済]
・左右平行(走る)
・座る [済]
・ジャンプ(待機) [済]
・ジャンプ(歩く)
・ジャンプ(走る)
・待機 susuki氏


http://www.nicovideo.jp/watch/sm14977206
https://twitter.com/penguin_island/status/216110873310281728

1ミクセルが40cmで1セル5.0fだから、時速3.24kmだと40500f/hで、1/30secあたり0.375f

http://www10.plala.or.jp/masisi/pmd.html

キーイベント
起動直後1回目のpressが無反応になる課題

マウスイベント
press、releaseの瞬間しかイベントが取れないので
Drag状態の判定が怪しい
releaseの取得漏れがある

カメラ上下でキャラクターの向いている方向と垂直を軸に回転させているのだけど
微妙に回転軸がずれる。垂直軸を求めるときにずれているのかな


積んでるタスク

1.3Dプログラミング基礎
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


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

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

2012年6月22日金曜日

キー操作2

http://moepic.com/plg/key_r.php

キー操作
・前進後退 [済]
・左右旋回 [済]
・左右平行 [済]
・歩く走る [済]
・座る [済]
・ジャンプ [済]
・自動移動 [済]
・視点前後 [済]
・カメラ上下(視点無視) [済]
・カメラ旋回(視点無視) [済]
・スクリーンキャプチャ

マウス操作
・視点前後
・カメラ上下(視点無視)
・カメラ旋回(視点無視)

モーション
・前進(歩く) ぺんぎん氏
・前進(走る) susuki氏
・後退(歩く)
・後退(走る)
・左右旋回
・左右平行
・座る [済]
・ジャンプ(待機) [済]
・ジャンプ(歩く)
・ジャンプ(走る)
・待機 susuki氏


http://www.nicovideo.jp/watch/sm14977206
https://twitter.com/penguin_island/status/216110873310281728

1ミクセルが40cmで1セル5.0fだから、時速3.24kmだと40500f/hで、1/30secあたり0.375f

http://www10.plala.or.jp/masisi/pmd.html

入力イベント
現状、foamイベントで実装していますが
DirectInputのほうが楽なのかな?
同時押しが取りやすくていいですね
起動直後1回目のpressが無反応になる課題

カメラ上下でキャラクターの向いている方向と垂直を軸に回転させているのだけど
微妙に回転軸がずれる。垂直軸を求めるときにずれているのかな

積んでるタスク

1.3Dプログラミング基礎
マウス操作
キー操作
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


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

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

2012年6月17日日曜日

キー操作

一段落したところでキー入力による操作を実装しようと思います

そもそもMikuMikuDanceを知ったきっかけがMMORPGのSNSだったのですが
うっかり足を踏み入れたせいですっかり御無沙汰になってしまいました。

そういうわけで初めてプレイしたMMORPG「ResonanceAge」の後継である
「MasterOfEpic]の操作キーを使わせてもらおうかと思います。

http://moepic.com/plg/key_f.php

・前進後退
・左右旋回
・左右平行
・歩く走る
・座る
・ジャンプ
・自動移動
・視点前後
・カメラ上下(視点無視)
・カメラ旋回(視点無視)
・スクリーンキャプチャ

キーにあわせたモーションを作るか探すかしないといけませんね

http://www.nicovideo.jp/watch/sm14977206


積んでるタスク

1.3Dプログラミング基礎
マウス操作
キー操作
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


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

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

2012年6月16日土曜日

エッジ2

なんやかんやでHLSLでのエッジ描画はできたのですが、
1.顔の内側にもエッジが乗る
2.法線深度マップの解像度を上げるとGPU使用率がきつい
※RenderTargetに出力してshaderResourceを渡すようにしないと色が出せない

エフェクトエッジ前提のモデルならまだしも
MMD系のモデルをそのまま用いる場合は不向きなようです

MMEへの足掛かりが掴めたので良しとしましょう

ついでなので反転ポリエッジを追加することにしたのですが、
反転ポリの頂点位置は元ポリ座標に法線方向に加算して求めていて
頂点座標の計算をHLSLでやっているので
エッジ処理もそっちに持っていかないといけません。

同じモデルを2回描画する感じでできるかな

反転した頂点インデックスをあらかじめ用意しておいて
フラグを乗せて通常描画、エッジ描画としてDraw
フラグが立っていたらHLSL側で頂点座標ずらしと法線方向を反転



積んでるタスク

1.3Dプログラミング基礎
マウス操作
キー操作
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


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

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

2012年6月10日日曜日

エッジ

MMDの反転ポリによるエッジ
頂点は増えるわ予想外の不具合を生むわで
敬遠しがちなのですが、MMDXのエフェクトを用いたエッジ
GPUを用いたエッジ描画に挑戦してみようかと

処理フローはシャドウマップ同様に
Main.fxでモデルのエッジをEdgeMapに書き出し
Main.fxでモデルを描画
Edge.fxでEdgeMapを描画
っぽい

Edge.fxにはinputとしてエッジ幅、画面サイズ、画面の頂点座標&テクスチャ座標、EdgeMap
EdgeMapには法線と深度が書き出されており
それを元にEdge.fxで描画


エッジ箇所の検出計算が理解できない
EdgeMapからの読み込み座標が誤っているのか?
モデル部の切り出しはうまくいっているように見える
モデル部の内側が同じ値で埋まっている模様


http://codeoncanvas.blogspot.jp/2010/02/xnafps20.html


積んでるタスク

1.3Dプログラミング基礎
MMDXのエッジを見る
マウス操作
キー操作
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


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

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

2012年6月9日土曜日

並列化と高速化

前回に続き

・並列化は現状以上に効果を発揮できる箇所なし
・モーフモーションの更新フラグの持ち方を変え処理時間を半分程度に縮小

ulaさんのルカ、ユフ
508さんのリン
tdaさんのミク

に、きしめんを踊らせた状態で30fpsをやや下回ります。

物理演算が並列化できないのがかなりネックになっています。
MMDXで並列化しているらしいのでそちらを見てみましょうか。

MMDXの並列化
1.ボーン変形
2.非同期に物理演算開始
3.モーフ処理
・・・

なるほどモーフ処理に掛かる時間と重ねているんですね
PMXの場合、ボーンモーフがあるのでその辺り分離しないといけません

同様の方法をとった場合、
モデル数が少ない場合は効果が大きいのですが
モデル数が多くなると、
モーフ処理は並列化されているのでそれほど増加しないのに
物理演算は比例して増加するので効果は限定されます。
もちろんやらないよりやったほうがいいのです。




積んでるタスク

1.3Dプログラミング基礎
MMDXのエッジを見る
マウス操作
キー操作
ver2.8を入れてみる→SlimDXのバージョンが上がってた どうしよう


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

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

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プログラミング応用
・ゲームっぽく移動できるもの
・表情をプリクラっぽく出力できるもの
・モデルの首挿げ替えするもの

2012年6月5日火曜日

SlimDXのSampleFramework

SlimDXのSampleFrameworkを使ってViewerを作って
というか勉強していたのですが、
Formに描画するのでちょっと扱い辛い

PictureBoxのHandleに描画するよう変更
FPSとFrameNoの表示をラベルコントロールに変更



積んでるタスク

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



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

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

2012年6月3日日曜日

ボーン処理順の経過

ボーン処理順不具合の件

このような親子関係を持つボーンがあったとして
IKボーン→IK子ボーン→IK子ボーンを付与親に持つボーン

処理順がこうなっていた場合
IK子ボーン→IK子ボーンを付与親に持つボーン→IKボーン

PMX仕様ではIKボーンの変化量がIK子ボーンを付与親に持つボーンに伝わることがないので動きません。
PMDE上でも動きません。

しかし、MMD、MMMではなにかしらの回避がされているため動きます。
そのため仕様外のモデルが作られてしまいます。

1.なんとなく動くものを作れる
2.不備を認識できない

簡単に利用できることが重視されるので対応としては1.でよいのでしょう。


で、なにかしらの回避とはなんなのか

最初はボーン変形の処理順を再配置しているのではと思ったのですが
やってみると影響が未知数でボツ

なので、
モーションデータからローカル変形を生成する処理を2周させることにしました。

2周ループ

 ボーン数分ループ
 {
   1.モーション
   2。IK
 }


こうなるので解決するわけです
IK子ボーン→IK子ボーンを付与親に持つボーン→IKボーン→IK子ボーン→IK子ボーンを付与親に持つボーン→IKボーン

負荷が増えるので最善ではないですが...

IK子ボーンを親・付与親にしているボーンの処理順が
IKボーンの処理順より早い場合のみ2周するようにすることで多少ましに...



積んでるタスク

1.3Dプログラミング基礎
高速化
物理演算
MMDと比べて重力の影響が大きいのはバージョンの違いなのか実装不具合なのか
ver2.8を入れてみる
並列化の検討 もっといい方法はないか
MMDXのエッジを見る
物理干渉マトリクス

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

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

2012年6月2日土曜日

ボーン処理順チェック用

ちょくちょくボーン処理順による不具合が発生してはまってしまうので
ボーン処理順チェック用のツールを作りました。

とはいえ、処理順が誤っているかどうかはモデル作者にしかわからないので
ボーン間にどのような関連があるかを見やすくした程度です。

http://bowlroll.net/up/dl5480

同様にボーン処理順の正規化は難しいので
何回ループすれば同様の数値になるかをチェックして
各処理でその回数分ループさせるようにしようかと思います。


積んでるタスク

1.3Dプログラミング基礎
高速化
物理演算
MMDと比べて重力の影響が大きいのはバージョンの違いなのか実装不具合なのか
ver2.8を入れてみる
並列化の検討 もっといい方法はないか
MMDXのエッジを見る
ボーン処理順の正規化検討→ループ回数取得
物理干渉マトリクス

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

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