2009年05月30日

影について その2

昨日の続きですかね。

かなり手抜きでBulletデモのappBulletDinoの影付けをほぼそのまま使っております。困ったものです。

実行結果



平面投影行列で平面に投影するのはいいのですが、セルフ・シャドウがないとやっぱり何か物足りないんですよね。

本が届いたのでシャドウ・ボリュームを試してみたいと思います。思うだけでやるかどうかはわかりませんが。


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

影(Shadow)について

何となく床と影ぐらい表示したいなと思いボーンは置いておいて影表示をしてみることにしました。
陰影は両方「カゲ」ですが、陰(Shade)と影(Shadow)でちょっと違います。

光の当たり具合で明るかったり暗かったりする方が陰で、物体に光が遮られてできる黒い形の方が影です。
まぁどうでもいいですね。影を作る場合には、OpenGLではステンシルバッファを利用することが多いようです。たぶん。

ちょっと調べてみると、いつの間にかこのような本が出ていました。1年以上も気づかなかったとは困ったものです。

GLUTによるOpenGL入門2 テクスチャマッピング
http://www.kohgakusha.co.jp/books/detail/978-4-7775-1332-1

恐らく床井先生のブログを見れば、本の内容もある程度載っているのでしょうが、やはり本の方が読みやすそうでいいですね。これを機会にGLSLもちょっと試してみたいですね。

というわけで本は注文しましたが、まだ届いていないので下記ページを参考に試してみたいと思います。

http://artis.inrialpes.fr/Research/RealTimeShadows/pdf/stencil.pdf

実行結果



今日は疲れたので反射までにして、影は次回ということで。



続きを読む
web拍手 by FC2
posted by シンドラー at 00:39 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2009年05月27日

マウスでボーン回転

昨日の続きです。

とりあえず右クリックで選択して、左ドラッグでボーン回転するようにしてみました。

GUIに情報表示してみましたが、初期状態でY軸回転が-90度だったり、子ボーンの回転の追従がおかしかったりバグがありそうですね。

もう少しボーンのクラスを見直してみたいと思います。

でもまぁ目的通りデバッグしやすくなった気がするのでめでたしめでたしです。

実行結果



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

2009年05月26日

GLUT+CEGUIについて

モーションデータを読み込んで動かす場合に、ボーンの位置姿勢をGUIで入力できた方がデバッグしやすいかなと思い、せっかくなのでGLUT+CEGUIを試してみることにしました。

時間がかかった上にうまくいっていませんが、とりあえず目的は果たせそうなので良しとします。
素直にGLUIとか使っておけばよかったですかね。使ったことありませんが。

うまくいっていない部分は、subscribeEventという、GUIに対するイベントと関数を関連付けてくれる関数があるのですが、実行時にその関数の呼び出し部分でエラー停止してしまいます。

原因がよくわからないのでその関数を使わずに自分でイベントチェックしています。

日本語表示の部分などは「Irrlicht+CEGUI」の記事と同じですのでそちらを参照してください。

下記のページを参考にしました。もう少し詳しい情報が欲しかった気がします。

http://www.cegui.org.uk/wiki/index.php/Using_CEGUI_with_GLUT

実行結果

glut_cegui_001.jpg

ソースファイル

glutCEGUI.zip

動かすためにはCEGUIのダウンロードと環境設定が必要です。
後dllとTaharezLookシリーズのデータファイルとさざなみフォントを使用しているのでそのファイルが実行フォルダに必要です。

この辺はCGUIManager::CGUIManager(void)の中を環境に合わせて書き直せば何とかなると思います。
CEGUI付属のSamplesを参考にDefaultResourceProviderを使ってデータファイルがある場所を指定した方がいいと思います。

このプログラムを使って何か起こっても責任はとりません。後どこかから持ってきたようなコードが多いので問題があれば教えてください。
続きを読む
web拍手 by FC2
posted by シンドラー at 17:10 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2009年05月23日

VMDファイルの再生

ここまでやったので最後までやろうかなーと思わないでもないです。

今回はVMDファイルを読み込んでモーフィングだけやってみました。モーションの方はIKを実装しないといけないのでまた今度です。

モーフィング再生の部分をちゃんと設計せずに適当に作ってたので1回作り直しました。困ったものですね。

下記動画の音とモーションを使わせていただいております。問題がありましたらお知らせください。



実行結果



微妙にずれているのはFPS30を維持できていないからだと思います。

33msに1回呼び出すタイマー関数を使っているので、1秒間に10ms程度ずれてしまうのではないかと。

ちゃんと時間測って合わせないと駄目ですね。

後エイリアスがかなり気になりますね。何とかしたいですがどうしましょうかね。


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

2009年05月19日

ボーンアニメーションとモーフィングについて

昨日の続きです。以前のプログラムではモーフィングは絶対座標でやっていたので、ボーンアニメーションに対応するために相対座標に変更しました。

実行結果



首のボーンを前回と同様にsin関数で左右に振っています。目玉の位置の追従ができていない気がしますね。

続きを読む
web拍手 by FC2
posted by シンドラー at 18:34 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2009年05月18日

ボーンアニメーションについて

表情のアニメーションをしていると、結局ボーンアニメーションもしたくなってしまいました。困ったものです。

先週やった「Irrlicht+BulletでRagdollの途中経過その2」で作ったクラスがなんとなくそのまま使えそうだったので試してみたところ、予想以上に簡単にできてしまいました。めでたしめでたし。

そういえばRagdollの方は途中で放り出してずっとこっちやっていますね。困ったものです。

実行結果

ボーンの状態を確認するためにモデルは半透明にしています。

モデルデータはアノマロ様のルカ様を使用させていただいております。
http://anomarokarintou.blog37.fc2.com/



首のボーンをsin関数で左右に振っています。
今後は表情アニメーションをボーンアニメーションに対応するように修正したり、目がカメラの方を向くこっちみんな機能とか付けたいですね。
続きを読む
web拍手 by FC2
posted by シンドラー at 16:27 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2009年05月17日

ゆっくりに喋らせてみた

表情アニメーションも一応できたのでゆっくりにAquesTalkで喋ってもらおうと思いました。

モーフィング周りのプログラムがひどいことになっていたので修正して、まばたきしながらあいうえおぐらいはちゃんとできるようになりました。

ゆっくりモデルはnya様のものを使用させていただいております。もし問題がありましたらお知らせください。

http://homepage3.nifty.com/knuko/mmd/mmdIndex.html

実行結果



今は自分で喋らせる文字列と表情を調整して合わせているので、次はテキスト読み込んだり文字入力するとちゃんとモーフィングしながら喋ってくれるようにしたいですね。


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

2009年05月16日

TGAファイルの読み込みについて

ユーザ作成PMDファイルも読み込んでみたくなりました。
ダウンロードしてみると、tgaファイルを使用しているものが多かったです。

そんなわけで昔作っていたTGAファイルローダを使ってみたのですが、α値を読み込んでなかったりRun-Length Encoding(RLE)圧縮に対応していなかったり困ったものでした。かなり苦労して修正しましたが、libtgaとか使えば一発ですよね。

http://tgalib.sourceforge.net/

でもまぁせっかくやったのでちょっとだけ説明を。とりあえず参考にしたのは下記仕様書です。RLEというのは単純に同じ色のPixelが並んでいたらひとまとめにするだけみたいですね。

http://www.fine-view.com/jp/labs/doc/targa.pdf

今回ダウンロードさせていただいたはちゅねミクPMDモデルはRLE圧縮のTRUE-COLOR形式でして、仕様書23ページのDATA TYPE 10になります。

エナメルP様のホームページ
http://enamelhp.web.fc2.com/

25ページと26ページにRun-Length PacketとRaw Packetのファイルフォーマットがありまして、RLEなんだから25ページの方だろうと思って読み込んだらうまくいきませんでした。

読み込んだデータをテキストファイルに出力して見てみると、どうもRaw Packetも混在しているようでして、ちゃんとヘッダで判断して読み込むとうまくいきました。

後はMiku Miku DanceはDirectXを使用しているため座標系が左手系で、OpenGLは右手系なのでその変換をしました。どうも何か違和感があると思ったら左右反転していたという感じです。

実行結果

エナメルP様のはちゅねミクを表示してみました。たれたよだれがバグっぽいですね。



ゆっくりPMDもダウンロードさせていただいたので、次こそAquesTalkでゆっくり喋らせてみる…かもしれません。

続きを読む
web拍手 by FC2
posted by シンドラー at 01:17 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2009年05月14日

OpenGLで頂点アニメーション

今日もニコニコ見てました。立派なニコ厨ですね。



Processingというプロジェクトがあるんですね。面白そうです。ビジュアルプログラミングってどうなんでしょうね。

http://www.hyde-ysd.com/reco-memo/Proce55ing/sample/miku_swing_leak2/content.html

まぁそれはそれとして昨日の続きです。PMDファイルには表情データも入っているので、モーフィングで口パクとかもできそうです。しかしながら昨日作ったプログラムは、描画速度を上げるために頂点データをディスプレイリストで作成しているので、アニメーションには向いていません。

そういうわけで別の方法を探してみました。

頂点配列とかVertex Buffer Object(VBO)を使う方法があるようですね。GLSLを使えというお話もあるようですが、それはまたそのうちということで。

床井研究室
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20080829
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20080830

OpenGL de プログラミング
http://wiki.livedoor.jp/mikk_ni3_92/d/%a5%c7%a5%a3%a5%b9%a5%d7%a5%ec%a5%a4%a5%ea%a5%b9%a5%c8

今回はVBOでやってみたいと思います。簡単な方が楽でいいのでGLEW使ってみようと思います。上記サイトのサンプルソースコードを参考にさせていただきます。床井先生のページはもちろんのこと、一番下のページは知らなかったのですがとても役に立ちそうでした。

というわけでやってみましたが、色々結構大変でした。表情データって変わった形式ですね。Baseだけ頂点のインデックスと絶対座標を持っていて、他の表情はBaseのインデックスと相対座標になってました。PMDEditorでパラメータの確認しなければ嵌っていたかもしれません。

モーフィングは30フレームでBase→表情に線形で変化させるようにしました。大体30FPSで描画しているので、1秒で表情の変化が終わる計算です。遅いですかね。

実行結果



口の開け方もわかったのでAquesTalkで喋らせようかと思いましたが、疲れたのでまた後日やるかもしれません。表情データに「あいうお」があって「え」がないのはなぜなのでしょうね。


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

PMDファイルをOpenGLで描画

何番煎じかわかりませんが、MikuMikuDanceで使われているPMDファイルを読み込んでOpenGLで表示してみようかなと思いました。

流行ったソフトウェアはそれがスタンダードになっていいことですね。恐らく。

PMDファイルの解析もVSQファイルと同じように行われておりまして、今回も特に自分ではちょこちょこっとOpenGLのプログラムを書いたぐらいです。

PMDファイルの読み込みには、VMDConverterのソースコードを使用させていただきました。

http://yumin3123.at.webry.info/200811/article_3.html

VMDとCVSの相互変換のためのツールですが、ソースコードにはPMDを読み込むためのクラスも作成されています。ありがたいことです。

後はGLUT使ってテクスチャ張ったりポリゴン描画したりしているだけです。ボーンアニメーションとかまったくやっていません。

PMDのデータをゲーム等で使用するためにはVMDMotionImporterでBlenderに読み込んで他の形式で保存すれば使えそうな気がしますが、利用規約的には大丈夫なんでしょうかね。

Blenderでアニメーションまでできるのでこれもすばらしいですね。

http://sites.google.com/a/render.jp/vmdimporter/Home

そういうわけで今回やったことは今後何かの役に立つんでしょうかね。立たない気がしますね。

実行結果

横に増やそうと思っただけなのに描画関数を間違えてひどいことになりました。まぁこれはこれで面白いのでいいですかね。



次はVMD読み込んでボーン情報を使ったアニメーションとIKの実装・・・とかも他の人がやっているみたいなので多分やりません。

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

2009年05月12日

vsqファイルからAquesTalk

いつものようにニコ動をみていたら、ゆっくりを見つけました。



AquesTalkというフリーのライブラリでテキスト読み上げができるんですね。APIもとても簡潔で使い易いですね。

http://www.a-quest.com/aquestalk/

利用規約的にどうなのかよくわかりませんが、ボーカロイドのvsqファイルを読み込んでゆっくりに喋らせてみようかなと思いました。問題があったら教えてください。

vsqファイルはフォーマットを解析されている方もおられて、ついでに読み込むツールも色々あるのでそれを利用させていただくことにしました。

今回はZHUOWARE様のVOCALIPSを使わせていただくことにしました。
http://www.geocities.jp/zhuoware/vsq2lipsync/vsq_lipsync_download.html

このツールでvsq→txtにstandardで変換して、txtファイルを読み込んで適当にAquesTalkで再生させてみました。文章を”SIL”タグで区切って、開始時間を一応合わせてみました。

文章の開始だけで1文字ごとの時間は合わせていないのでずれまくりです。

対応していない文字が混ざってたりすると止まっちゃうので手動で修正したり・・・。

mp3とvsqファイルはあきぐり様のオリジナル曲を使わせていただきました。無許可で使っていますので問題がありましたらお知らせください。すぐ消します。

調教が素晴らしい本家様。


実行結果



hellotalk_test.JPG

こんな感じで時間を合わせるために無理矢理"ー"を追加しています。アクセントなどを指定できるのですが、それもやっていません。棒読みです。

まだまだ改良点はいっぱいありますがやらない気がしますね。困ったものです。

そういうわけで何の参考にもならないと思いますがソース置いときますね。実行ファイルもライブラリもtxtファイルもつけていません。

HelloTalkTest.zip

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

2009年05月11日

Irrlicht+BulletでRagdollの途中経過 その2

気がつくと1カ月近く経ってしまって恐ろしいですね。
GWも特に何もせずにいつの間にか終わっていました。

前回の続きです。Irrlicht+Bulletと書きつつ今回は両方殆ど使っていなかったりします。
代わりにODE付属のdrawstuffを色々書き換えてテストしてみました。drawstuffはわかりやすくていいですね。

Irrlichtでのボーン表現ですが、BVHファイルと似ている感じで、初期状態をオフセットとして親ボーンからの相対座標として定義し、後は親ボーンから見た目的姿勢と初期姿勢の差をsetRotationで設定して動かす感じです。

そんなわけでボーン付きメッシュファイルを読み込んでgetRotationをすると、全て0になっています。BVHファイルも初期状態の定義と、各フレームでそれぞれの角度を指定するといった方式ですので、ボーンの構成が同じであればBVHファイルとIrrlichtの相性は良さそうな感じです。

BulletのRagdollデモを見た場合、ツリー構造等を定義しているわけではなく、各カプセルやジョイントの座標もワールド座標で取得できるだけですので、ツリー構造を定義するクラスやワールド⇔ローカルを変換する関数なども自分で実装しないといけないと思います。面倒ですね。

というわけで今回も下記ページを参考にさせていただき、とりあえずRagdollの定義に必要なクラスを作ってみました。

http://www.tmps.org/index.php?%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A4%CE%A5%B9%A5%B1%A5%EB%A5%C8%A5%F3%B9%BD%C2%A4

動作確認のためにdrawstuffをマウス入力できるように改変して、適当なRagdollを作って選択したボーンの姿勢をぐりぐりするプログラムを作ってみました。意図した動作をしてくれていないのですがまぁなんとなくそれっぽいのでとりあえず途中経過として載せたいと思います。

実行結果



今回の目的にはIKって必要なんですかね。まぁ勉強がてらちょっと試してみようかとは思います。


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