2010年07月15日

Irrlicht+CUDAのテスト

Irrlicht+CUDAを使って頂点アニメーションでもしてみることにしました。

3dsファイルを読み込んでBulletのSoftbodyに渡すようなプログラムを以前作っていたので、Bulletの代わりにCUDAを使って自前でアニメーションさせるような感じです。

昔のソースコードには一応コメントが書いてあったのですが、コメントを読んでもさっぱりわかりませんでした。

実行結果



三次元CG@七葉様のモデルを使用させていただいております。
頂点数が約1500ぐらいで、CUDAでちょっとだけ頂点をsin関数等を使って動かしています。

1ブロックを16x16スレッドにして、頂点数/256+1個のブロックを作って1スレッドが1頂点を計算するようにしています。
頂点の衝突判定等をやろうとするとこの分け方はあまりよくないと思いますが。

CUDA側では殆ど計算していないのでなんともいえませんが、現段階でFPSが400程度は出ているので、何かできないかなーと考え中です。

一応ソースコード公開しておきます。
続きを読む
web拍手 by FC2
posted by シンドラー at 20:49 | Comment(0) | TrackBack(0) | Irrlicht | このブログの読者になる | 更新情報をチェックする

2010年01月25日

Irrlicht+PMDでBulletテスト

MikuMikuDanceはBulletを使用して髪の動きなどをアニメーションさせていて、PMDファイルにはその剛体やジョイント情報なども入っています。

今使用させていただいているVMDConverterは、剛体情報の取得部分等は実装されていませんでしたので、下記ページを参考にさせていただいて拡張しました。

http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4

MMDのジョイント情報を見るとばねという謎の項目がありまして、Bullet2.75で実装されたbtGeneric6DofSpringConstraintかとは思うのですが、使い方がいまいち良くわかりませんね。

物理演算しない剛体は、kinematic Objectとして下記設定をしましたが、これでいいのかどうかも良くわかりません。

body->setActivationState(DISABLE_DEACTIVATION);
body->setCollisionFlags( m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);

body->isKinematicObject()でtrueが帰ってくるようになったので、Kinematic Objectとして扱う場合はこれでいいのではないかと思います。

実行結果



なんとなくXZ方向に力をかけてます。力をかけてなくてもMMDと同じ動きにならないんですよね。FPSも24ぐらいしかでていないし・・・。
web拍手 by FC2
posted by シンドラー at 03:04 | Comment(0) | TrackBack(0) | Irrlicht | このブログの読者になる | 更新情報をチェックする

2009年12月25日

Irrlicht+PMDでBVHの再生テスト その3

その3というか作っただけでソースの公開とかしていなかったので一応置いておきます。

IrrPMDLoaderBVH.zip

あまりコメントもいれていないのでわかりにくいと思いますが何かの参考にでもなればいいですね。

以下のソースコードを使用させていただいております。
・Irrlichtの一部ソースコード
・VMDConverter(Yumin様)
・BVHファイル読込み(九州工業大学尾下先生)を一部改変
 http://www.oshita-lab.org/index-j.html
・数学計算MathUtil(実例で学ぶゲーム3D数学)
 http://www.oreilly.co.jp/books/9784873113777/

私のソースコードの部分はライセンスはIrrlicht準拠かと思います。その辺は一緒に入っているテキストファイルを見てください。

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

2009年08月11日

Irrlicht+Box2DでSTG 7日目

とうとう7日目です。

アイテムとボスを追加してみました。

実行結果



スクリプトで動きの制御とかしないと単調になって駄目ですね。
結局音系も入れられなかったですね。

まぁなんとか1週間でもそれっぽいものができたんじゃないかなぁと思います。

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

2009年08月10日

Irrlicht+Box2DでSTG 6日目

誰が何と言おうと6日目です。

今回はちょっとだけエフェクト追加と敵からの攻撃を入れていました。

Irrlichtのシーンノードにはアニメータというものを追加することができます。

参考サイト:http://www.zgock-lab.net/irrlicht/tut05.htm

これを使ってテクスチャアニメーションや、生存時間の設定等ができます。
    ISceneNodeAnimator *anim = Device->getSceneManager()->createDeleteAnimator(2000);
BulletNode->addAnimator(anim);
anim->drop();
これで2000msで削除されるアニメータを追加することになり、2秒後にBulletNodeは削除されます。

これを使って、弾が当たった時や敵が死亡したときに数百ミリ秒エフェクトを表示するようにしました。

実行結果



後は敵の生成や動きをスクリプトで制御したり、アイテム実装したり、ボスを実装したり、スキルを実装したり、音楽・効果音を追加したり…まだまだいろいろありますね。

まぁ1週間だとこれくらいが私の限界ですね。

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

2009年08月08日

Irrlicht+Box2DでSTG 5日目

なぜかブロック崩しになってしまいました。
30秒で終わってしまうゲーム・・・。

実行結果



敵グラフィックにFirst Seed Material様のデータを使用させていただいております。
http://www.tekepon.net/fsm/


今日は主に衝突イベント処理を追加しました。

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

2009年08月07日

Irrlicht+Box2DでSTG 4日目

今日は時間が取れなかったのであまり進んでいません。
もう4日目とか困ったものですね。

変更点
・敵作ってみました。
・ブロック崩し風になってしまいました。
・一応プログラム内は色々改善しています。
・SHIFT押すとMP消費して速度増加にしてみました。

実行結果



明日頑張ろう・・・。
web拍手 by FC2
posted by シンドラー at 20:58 | Comment(0) | TrackBack(0) | Irrlicht | このブログの読者になる | 更新情報をチェックする

2009年08月06日

Irrlicht+Box2DでSTG 3日目

地形が動かないと進んでいる気がしないので、背景を動かすようにしてみました。

IrrlichtのTutorial 3:Custom SceneNodeを使って自動的にスクロールするシーンノードを作ります。
http://irrlicht.sourceforge.net/docu/example003.html
詳しくは追記のところで。

こういう場合はテクスチャがシームレスでないと継ぎ接ぎが見えてしまいますので、シームレスなフリーのテクスチャを探しました。
http://seamlesstextures.net/textures
これってライセンスはどうなってるんですかね。

後、右側が空いているだけというのもなんなので、CEGUI使ってGUIを表示することにしました。Irrlicht1.5で動かすためにまたちょっと手間が要りました。

実行結果



ミクモデルでも結構重いので、下記サイトのちるのモデルを使用させていただいております。
http://homepage3.nifty.com/knuko/mmd/mmdIndex.html
まぁ無理にPMDファイル使わなければいいだけなんですが・・・。

後、GUIのお試しにMP=弾数=100に設定して、MPが無いと弾を撃てないようにしてみました。
弾に当たったらHP減らして0になったら…といったことが次の課題ですかね。
さっさと敵も追加しないと…。
続きを読む
web拍手 by FC2
posted by シンドラー at 20:00 | Comment(0) | TrackBack(0) | Irrlicht | このブログの読者になる | 更新情報をチェックする

2009年08月05日

Irrlicht+Box2DでSTG 2日目

今日はあまり進んでいない気がする2日目です。

今日やったのは昨日の修正+αぐらいでしょうか。

・移動の修正(SHIFTキー押していると低速移動等)
・生存時間の設定(一定時間が経つと消える)
・カメラを正射影に変更
 参考サイト:http://lesson.ifdef.jp/A06.html
・GUI表示のためビューポートの設定
 参考サイト:http://www6.atwiki.jp/t-na/pages/15.html

実行結果



まぁ平日は仕方がないですね。

物理シミュレータを使うと弾の速度が一定ではないので難易度高そうですね。一定に制限しますかね。後、弾同士の接触判定とか必要ないですよね。

Box2Dはマニュアルが結構わかりやすいです。自分のゲームエンジンに組込むにはみたいな視点で書かれているので。
http://www.box2d.org/manual.html

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

Irrlicht+Box2DでSTG 1日目

IrrlichtとBox2Dを使って1週間ぐらいでシューティングゲームでも作ろうかなーと思います。

1日目は環境設定、モデル表示、キーボード操作、弾の発射ぐらいまでですかね。

描画:Irrlicht
衝突計算:Box2D
その他:未定

Irrlicht用のクラス、Box2D用のクラス、Worldクラス、イベント管理クラス、オブジェクト管理クラスの5つぐらい作ってそれぞれの初期化・オブジェクト作成などを行っていきます。

モデルはせっかくローダを作ったのでPMDファイルを読み込んで初音ミクを使用させていただいております。

実行結果



キーボードの矢印キーでAddImpulse関数でオブジェクトに力を加えて移動させています。

この辺もちゃんとしないとキーを放しても動きっぱなしになってしまいます。まーそれは後日ということで。

後は、スペースキーで弾を生成/発射しています。衝突判定や反発力計算はBox2Dがやってくれて、表示はIrrlichtがやってくれるので楽ですかね。

今後やること:
キー入力修正
敵の作成、AIの検討等
オブジェクトの消滅等タスク管理?の実装
プレイヤーをボーンアニメーション等で少しは動かす
音楽や音
視覚的なエフェクト
点数表示などGUI
アイテムとか?

まぁ全部やるとも限りませんし1週間で終わるとも思えませんがとりあえずやってみますかね。

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

2009年07月31日

Irrlicht+PMDでBVHの再生テスト その2

続きです。B-MoMi様と同じようにマッピングファイルを読み込んでボーンの姿勢修正をするようにしてみました。
@scale=0.3
センター=hip,0,0,0
左足=lThigh,0,0,2
左ひざ=lShin,0,0,0
左足首=lFoot,0,0,0
右足=rThigh,0,0,-2
右ひざ=rShin,0,0,0
右足首=rHoot,0,0,0
上半身=chest,-10,0,0
左肩=lCollar,-2,-20,40
左腕=lShldr,2,0,0
左ひじ=lForeArm,0,0,0
左手首=lHand,0,0,0
右肩=rCollar,-2,20,-40
右腕=rShldr,2,0,0
右ひじ=rForeArm,0,0,0
右手首=rHand,0,0,0
首=neck,0,0,0
頭=head,0,0,0
符号とか違うかもしれません。

昔の記事でIrrlicht+BVHでボーンアニメーションしていたので、そのプログラムを参考にSecond LifeのBVHファイルを再生してみました。

ライセンス的にまずそうでしたらご指摘ください。

実行結果

今回もはちゅねモデルを使わせていただいております。



腕の動きが合ってないので、調整が必要なんですが調整難しいですね。

昔との変更点はフレーム間を線形補間していることぐらいでしょうか。


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

2009年07月29日

Irrlicht+PMDでBVHの再生テスト

B-MoMi様のマッピングデータを見て、これを使えばBVHファイルをそのまま再生できそうな気がしたので、試してみました。

BVHファイルにはmocapdata.com様のwalk-01-normal-azumi.bvhを使わせていただきました。ライセンスはクリエイティブコモンズです。

このモーションキャプチャデータは、mocapdata.com, Eyes, JAPAN Co. Ltd. により「クリエイティブ・コモンズ表示 2.1 日本ライセンス」の下でライセンスされています。
使用許諾条件は、mocapdata.com, Eyes, JAPAN Co. Ltd. または http://creativecommons.org/licenses/by/2.1/jp/ にお問い合わせください。
http://mocapdata.com/
(C) Copyright Eyes, JAPAN Co. Ltd. 2008-2009

実行結果



腕の角度とかがやっぱりあってないのでもう少し調整しないとちょっとおかしいですね。

でもまぁBVHでボーン動かすことも一応できたので、ライセンスの問題はありますがBVHファイルを集めてFPSみたいなゲームなら作れないこともないですかね。

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

2009年07月28日

Irrlicht用PMDFileLoaderクラス 途中経過4

そういえばBVH→VMDのツールはIKなしで全部姿勢情報だった気がしたので、とりあえず試してみました。

B-MoMi
http://atupdate.web.fc2.com/

実行結果

B-MoMi様のテニスモーションVMDファイルを読み込んで再生してみました。



物理エンジン使ってないので髪とか衝突判定とかアレですが、ちゃんと動いてるみたいですね。

良かった良かった。

シャドウボリュームON+録画でもFPS55ぐらいでてますし。シャドウボリュームの計算に時間かかりすぎですが・・・。

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

Irrlicht用PMDFileLoaderクラス 途中経過3

というわけで、CSkinnedMeshクラス及びCXMeshFileLoaderと2,3日格闘した結果、一から作り直しました。

実行結果



毎度ワンパターンですが、首ボーンを取得してsin関数で揺らしています。

やっとちゃんと動くようになった気がします。

後はVMDファイルを読み込んでSPositonKeyとかSRotationKeyとかフレーム毎に作成していけばいいのですが、その前にIKをちゃんと計算しないとSRotationKeyが作れない気がしますね。
続きを読む
web拍手 by FC2
posted by シンドラー at 20:06 | Comment(0) | TrackBack(0) | Irrlicht | このブログの読者になる | 更新情報をチェックする

2009年07月25日

Irrlicht用PMDFileLoaderクラス 途中経過2

続きです。

CSkinnedMeshクラスを使ってJoint情報の作成だけはしてみました。

Xファイルローダのソースを参考にしながらなんとかやっていますが、結構わけがわからないです。

次は頂点毎にボーンの影響度とか指定していく必要が・・・。まだしばらくかかりそうな感じです。

実行結果

irrlicht_bone_pmd_test_001.JPGirrlicht_bone_pmd_test_002.JPG

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

2009年07月24日

Irrlicht用PMDFileLoaderクラス 途中経過1

というわけで、Irrlicht用のPMDFileLoaderクラスを作成しています。
MikuMikuDanceでは今のところできないはずのゲーム開発等に使えるといいですね。

一応メッシュ情報の読み込み・表示は出来たので、後はボーン情報です。

メッシュの最適化とかしていないので重いかもしれません。

実行結果

今回もはちゅねモデルを使用させていただいております。



シャドウボリュームとか元から実装されているので楽ですねぇ。XファイルもBMPやTGAファイルも普通に読み込んでくれるし。

広いマップの最適化もOctTreeなどでやってくれるようですしね。

珍しくプロジェクト置いておきますね。PMDファイルの読み込みにはVMDConverterを使用させていただいております。

IrrPMDLoader.zip

なお、このプログラムで何か起こっても責任は取りません。メモリリークとかしているかもしれません。面倒なので確認していません。

適当にコメントと入れているので説明は省略します。

コンパイルとかプロパティ設定はReadme.txtを見てください。

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

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 | このブログの読者になる | 更新情報をチェックする

2009年04月20日

Irrlicht+BulletでRagdollの途中経過

時間が経つのが早くて困ったものです。

いつの間にかPhysXの日本語の本が出てますね。

物理エンジンPhysXプログラミング
http://www.kohgakusha.co.jp/books/detail/978-4-7775-1436-6

とりあえず買ってみようかなーと思います。
本をいっぱい買うけれど消化できていない気がする今日この頃です。

前回はIrrlichtのBone状態をBVHファイルで更新してみたので、今度はBulletのRagdollの状態を反映させてみようかと思っています。

Ragdoll自分で作るのが面倒なので、BulletのappRagdollDemoを改変して作っています。そのためBulletの画面とIrrlichtの画面の2つウィンドウが出ちゃってます。まぁデバッグしやすいのでいいのですが。

Bulletの画面ではRagdollのカプセルの座標に緑色の球、Constraint(Joint)の位置に赤色の球を表示しています。

Irrlichtの画面ではまだRootの位置姿勢しか合わせていないので、これから他のボーンも合わせていく予定です。Irrlichtは親ボーンからの相対座標系で姿勢を表しているので、Bulletで取得したConstraintとカプセルの位置を相対座標系に変換して合わせればいいのですがこれまたちょっと面倒ですね。

座標系合わせてなかったりIrrlichtの方の位置座標を定数倍していたりいつものように適当です。

実行画面だけ載せても参考にならないのでプログラムの説明を・・・完成したらするかもしれません。

実行画面



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

2009年03月14日

IrrlichtでBVH表示

前回のfragMOTIONの記事で、とりあえず同じ構造のボーン持っているキャラクタなら動かせそうだなーと思いました。

そこでXファイルのボーン名と、BVHファイルのボーン名が同じならその角度を適用するようにしてみました。

補間とかしていないのでカクカクしていたり一部おかしい動きをしますが、とりあえずできているような気がします。

BVHファイルの取り扱いについては主に下記サイトを参考にさせていただきました。

ttp://www.cg.ces.kyutech.ac.jp/lecture/cg2/
ttp://www.tmps.org/index.php?TMPSwiki

Irrlichtでボーンの使い方は下記サイトを参考にさせていただきました。

ttp://柊つかさ.jp/wiki/index.php?title=Irrlictでボーンのリアルタイム制御

モデル及びBVHファイルは前回の記事と同じものを使わせていただいております。

次は・・・ボーン構造が異なる場合を・・・なんとか・・・。案はあっても実装が面倒な今日この頃です。

実行画面

赤い線が元のBVHファイルの線画です。



顔の表情が変わらないとなんとなくアレですね。


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

2008年08月22日

Irrlicht + CEGUI

Irrlicht 1.4 + CEGUI 0.6.0ということで、IrrlichtでCEGUIを使用する方法についてです。

一応CEGUIのWikiに方法は載っていますが、情報が古いのかヘッダファイルの場所などが違っていましたので。
Irrlicht用のヘッダは(CEGUIインストールディレクトリ)\RendererModules\IrrlichtRenderer\irrlichtrenderer.h辺りにあります。
必要なライブラリは、このデモではCEGUIBase.lib、IrrlichtRenderer.lib、実行時にCEGUIBase.dll、IrrlichtRenderer.dllです。

実行結果

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