2012年11月30日

Visual Studioのプロジェクトのプロパティシートの使い方について

オレオレライブラリを作って色々使いまわしているんですが、新しいプロジェクトを作成するたびに行うプロパティ設定が面倒でしたので、プロパティシートの使い方をメモしておきます。

[1] プロパティシート(C++)
http://msdn.microsoft.com/ja-jp/library/a4xbdz1e.aspx
[2] OpenCV 2.2 を Visual C++ 2010 Express で使うための準備から動作確認までの手順とプロジェクトサンプルとプロパティシートサンプル
http://d.hatena.ne.jp/Guernsey/20101205/

プロジェクトのプロパティ シートを作成するには([1]より抜粋編集)

1.Visual Studio IDE でソリューションを開く。
2.[表示]→[プロパティ マネージャー]で[プロパティ マネージャー]ウィンドウがIDEの左側にドッキングした状態で表示される。
3.[プロパティ マネージャー]で、新規プロパティ シートを含めるプロジェクトを右クリック→[新しいプロジェクト プロパティ シートの追加] をクリックする。
4.[新しい項目の追加] ダイアログ ボックスの [名前] ボックスに、新規プロパティ シートの名前を入力する。
5.[追加]をクリックする。

追加したプロジェクトのツリーを開くと、Release | Win32といった感じの項目が並んでいて、さらに開くと4.で入力した名前のプロパティシートが追加されています。

6.↑のプロパティシートを右クリック→プロパティで一般的なプロジェクトのプロパティ設定画面のようなものが表示されるので、既に設定済みのプロジェクトと比較しながら設定する。(見比べてみると結構デフォルトの設定が異なっています)
7.設定が終わったら、プロパティシートを右クリック→○○の保存をすれば、○○.vspropsという名前のプロパティシートが更新されます。(テキストエディタなどで開けば確認できます)

新しく作成したプロジェクトにこのプロパティシートを適用するためには、
1.[表示]→[プロパティ マネージャー]でプロパティマネージャーを表示する。
2.追加したいプロジェクトを右クリック→[既存のプロパティ シートの追加]をクリックすれば、ファイル選択のダイアログが表示されますので、作成した○○.vspropsを読込めば設定が反映されます。

web拍手 by FC2
posted by シンドラー at 12:27 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年11月07日

BVH→VMDのフレームの間引きについて その4

続きです。

クォータニオンの補間曲線近似の時にたまにエラーが出ていたのですが、エラーが出ているところを見ると、線形補間中の現在のクォータニオンと、目標となるVMDファイルのクォータニオンのx,y,z,wのそれぞれの符号が逆の場合にニュートン法が収束していませんでした。

例:
現在:x,y,z,w=-0.01, -0.02, 0.4, 0.64
目標:x,y,z,w= 0.016, 0.022, -0.38, -0.66

この場合、符号が反対なだけで表している角度はかなり近いようでしたので、現在と目標の符号がすべて逆の場合、目標のクォータニオンを-1倍することでエラーが発生しなくなりました。

他のエラーとしては、オイラー角で判定していたため、方向は同じだけれど変化量が多い場合にも発生していたため、ある一定以上オイラー角が変化した場合にも区切りを入れることにしました。

また、前回は適当にニュートン法を使っていましたが、一応数式で考えて計算してみました。

bezier_002.png

ただ、振動しながらの減少というか単調減少しない場合も多かったので、何か間違っているかもしれません。

実行ファイル
BezierTest_v005.zip

web拍手 by FC2
posted by シンドラー at 22:58 | Comment(0) | TrackBack(0) | MMD | このブログの読者になる | 更新情報をチェックする

2012年11月06日

BVH→VMDのフレームの間引きについて その3

続きです。

クォータニオンは軸も角度も細かく変わりますので、クォータニオンから一旦オイラー角に変換して、オイラー角のXYZ各軸の方向が変化した場合に、そこで区切るモードも追加しました。

その他のBVHファイルでの確認ということで、下記サイトのもので試してみました。
https://sites.google.com/a/cgspeed.com/cgspeed/motion-capture
手順としては前回同様Live Animation経由でVMDにしています。

いくつかの形式のBVHがありますが、Live Animationでそのまま読込んで問題ないのは3. MotionBuilder-friendly versionでした。

ここのBVHのデータ元はCarnegie Mellon Universityのもので、研究用などにフリーで使用可能で、BVHやその変換したものをそのまま配布してはいけない、というライセンスのようです。
http://mocap.cs.cmu.edu/

実行結果

オイラー角判定で削減した結果と全フレームの結果を重ね合わせています。
動きがゆっくりなせいもありますが、ずれは殆どないように見えます。

実行プログラム
BezierTest_v004.zip

web拍手 by FC2
posted by シンドラー at 19:10 | Comment(0) | TrackBack(0) | MMD | このブログの読者になる | 更新情報をチェックする

BVH→VMDのフレームの間引きについて その2

昨日の続きです。

回転の方は、クォータニオンの線形補間になっているようでした。
自分で実装するのが大変でしたので、実例で学ぶゲーム3D数学のサンプルソースコードを参考にさせていただきました。

並進の時と同様に、削除しないフレームは、クォータニオンのx,y,z,wの値の方向がどれか一つでも変化したら削除しないことにしました。こうするとボーンによっては殆ど削除されなくなってしまいますので、工夫すればもっと減らせるかもしれません。

また、dxとクォータニオンの値x,y,z,wは既知ですので、そこからニュートン法でdyの値を探索するようにしました。dyの候補として、x,y,z,wそれぞれの誤差を減らす方向に4個の候補ができますので、4つのうちでもっとも誤差が小さいdyを次のdyとして探索していきました。探索に失敗した場合は線形補間でごまかしています。

実行結果

昨日と同様のデータを用いています。
世界進出プロモーションサイト
http://www.perfume-global.com/


あまり削減できていませんが、全フレームの場合と比べてもほぼ誤差がない感じになっていますので、自動で減らすのであればこれぐらいかなと思います。

実行プログラム
BezierTest_v003.zip

web拍手 by FC2
posted by シンドラー at 02:02 | Comment(0) | TrackBack(0) | MMD | このブログの読者になる | 更新情報をチェックする

2012年11月05日

BVH→VMDのフレームの間引きについて

MMDでBVHファイルを使用する場合、BVH→VMDに変換すると思います。
そのために使用できるソフトウェアとしてLive Animationがあります。
http://www.drf.co.jp/liveanimation/
手順参考:http://mikudan.blog120.fc2.com/blog-entry-223.html

このソフトウェアでVMDファイルとして出力できるのですが、すべてのフレームに点が打たれていてサイズが大きいので、自動で間引くためのプログラムを作成してみました。

間引いてはいけないフレームとしては、並進(センターやIK)の場合、各XYZ軸方向の移動方向が変化した場合です。
例えば、X軸の場合、右にすすんでいて次に左にすすむ場合、つまり符号が変わるタイミングのフレームを削除してしまうと、元の動きを実現することはできなくなります。
ですので、各軸方向で、一つでも符号が変化したら、そのフレームは削除しないことと、あまりにも間が空くと、同じ方向に進んでいても補間曲線で表せなくなってしまうので、間引く最大数を指定することにしました。

また、合っているのかどうか微妙なのですが、一応補間曲線も自動で追加できるようにしました。
本当は間引くフレームの座標からベジェ曲線のパラメータを推定したかったのですが、時間がかかりそうでしたので、とりあえずMMDの(ax, ay), (bx, by)の2つの制御点から625個(ax,ay,bx,byそれぞれ0, 32, 64, 95, 127の5通りで5x5x5x5)のベジェ曲線を生成し、625個の中から一番近いベジェ曲線を選んでみました。

生成したベジェ曲線の例
line0234.png line0272.png

bezier.png

上のような理由から3次方程式を解くプログラムを作成しました。この辺MMDではどうやってるんでしょうかね。xの代わりにtをそのまま使用しているのか、何か間違っているのか。

Bezier.cpp

このプログラムは下記のサイトを参考にさせていただきました。
[1] http://ideone.com/HqTOP
[2] http://ja.wikipedia.org/wiki/%E4%B8%89%E6%AC%A1%E6%96%B9%E7%A8%8B%E5%BC%8F
[3] http://okwave.jp/qa/q2277096.html
一応カルダノの公式で還元不能になる場合はビエタの解を使うようにしましたが、計算時間を考えると結局数値計算的に解いた方がいいんでしょうね。

実行結果

PerfumeのBVHファイルをLive AnimationでVMDファイルに変換して試してみました。
世界進出プロモーションサイト
http://www.perfume-global.com/

初音ミクVer2と初音ミクメタルを重ねて表示して、片方が全フレーム、もう片方が間引いたVMDファイルを使用しています。大体1/3ぐらいしか間引けていないので、殆どずれがないかと思います。



角度の方は等間隔で1/3フレームに間引いています。角度の方も何か工夫がしたいですね。

ちゃんと動くかどうかわかりませんが実行プログラムもあげておきます。使い方についてはReadme.txtを見てください。

実行プログラム
BezierTest_v002.zip
(2012.11.05追記:ものすごく初歩的なバグがいくつかあったので修正しました)
web拍手 by FC2
posted by シンドラー at 00:26 | Comment(2) | TrackBack(0) | MMD | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。