[PR]ްpi͂܂Ђ:qĂyȂ֗тς

log

2009.11.06 C++:モーション読み込み、やるぞー

ファイル 202-1.jpg

なんとなく背景を読み込ませてみました。

背景とキャラの比率があっていないので、…すごい、巨人だ笑。
一応これで基本的な読み込みはO3Dとほぼ同じになりましたが、
C++の方はテクスチャサイズがO3Dより全然大きいにも関わらず、
今のところ処理落ちが全くないです!すごい。

さて、いよいよモーション読み込みです。僕にとっては
全くの未開の地なので、どうなるのか分かりませんが
とりあえず少しづつやっていこうと思います。

僕のサイトにはほとんど人がこないので、技術的な話とかは
ほとんどメモ程度にしかまとめてないんだけど。ひょっとしたら
モーション周りは今でも興味ある人が少しくらいいるかな。

ManagedDirectXやXNAがでる前まではスキンメッシュは
ゲームプログラミングの山の一つといわれてたそうですが。
今だと簡単に読み込めるらしいですからね。

じゃあ何でわざわざC++でやってるんだよ!っていわれそうですが。
何というか。僕にとってC++は高校時代に挫折した苦い経験があるので
昔の自分を乗り越えるって意味も込めていたりします。

最近になって思うんですよ。「ようやく高3の頃のみんなの
技術に追いついたかなぁ」って笑。

2009.11.06 C++:Xファイルのマテリアル実装の仕様について

ファイル 201-1.jpg

ようやくXファイルの自作読み込みでマテリアルが読み込めるようになりました。
ついさきほど表示できたんですが、表示できたときは
「キターー」と思いました。うれしいなぁ。

ちなみにXフォーマットにあまり詳しくない人のために、
たかだかマテリアルの読み込みになぜここまで手間取ったのか
少しばかり説明しようかと思います。

Xフォーマットはタグテンプレートと呼ばれる要素単位で
テキストで保存されていて、マテリアル情報はMaterialというタグに、
メッシュとマテリアルとの関連付け情報はMeshMaterialListという
タグに登録されているのですが。

問題なのが、こいつらの登録方法がエクスポートするソフトによって
仕様がいくつも存在してしまうんです。

例えばMaterialListの中に直接Materialを登録しているXファイルもあれば、
MaterialListの外にMaterialListを登録して、MaterialListの下に
マテリアルインデックスの順番通りのマテリアル名だけ
記述しているものもあったり。
さらにはマテリアル名を登録しているXファイルもあれば、
マテリアル名を登録していないものもあったり。
駄目押しに、マテリアルインデックスが0からはじまるXファイルもあれば、
1からはじまったり、インデックスの途中でまた0を
はさんだりするXファイルもあったり。

それらの仕様に対応するようにこちらでプログラムを組まなきゃいけない訳です。
正直、「仕様をひとつにまとめんかい!」と毒づきたくもなりました。

自作読み込みをする上では、面倒なことこの上ないです、Xファイル。
しかし、それもようやくクリアできたのでとりあえず一安心です。

2009.11.04 C++:脱・頂点爆発

ファイル 200-1.jpg

なんとかXファイルの自作読み込みで頂点爆発させずに
読み込ませることができました。

何が原因だったかと思えば、SetStreamSourceのサイズ指定の
部分で頂点の構造体ではなく頂点バッファを渡しておりました。馬鹿だな…。

ただ、如何せんマテリアルとテクスチャの読み込みはまだ
行っていないので、今のところ木造の彫刻みたいになってます笑。

それと自作読み込みを表示させてみて、自作読み込みの方がなぜか
標準読み込みよりも身長の半分だけ高く表示されることに気づきました。
ちなみに画像では自作読み込みのモデルの方がやたら大きくみえるのは
大きい訳ではなくて、実際には上&手前にいるからです。
画像だと、分かりにくいですね。

はじめは自作読み込み関数がおかしいのかと思いましたが。
…よくよく考えてみるとカメラターゲットはモデルの座標位置に
合わせているので、標準読み込み側のモデルの中心が
画面の中心に来ていることを考えると…。どうやら標準読み込みの方が
自動でモデル中心をローカル原点に吸着させているようです。

改めて思うけど、やっぱり自作読み込みが一番安心するなあ。

余談ですが。最近特に寒くなってきたので、毛布を羽織ながら
制作しております。なので、全然手が進まないっ!
まいったな。

2009.11.02 C++:頂点爆発!と。

ファイル 199-1.jpg

現在、Xファイルの自作読み込みと格闘中です。
むこうのアイツにいってやりたい、マテリアルとサブセットの
クラスをいちいち分けるんじゃない、と。

とりあえず途中までは読み込めたようなので、試しに
やっつけRender関数を組んでみたところ…。(画像参照)

おー、これがうわさの頂点爆発か(遠い目)。


そういえば、マテリアル読み込み部分を調べてるときに
気がついたのですが、どうも僕のXファイルのマテリアルには
先頭にxof_defaultなる見慣れないマテリアルが存在していました。

それでマテリアル数を調べてみると、なぜか一つだけ少ない値を
とっていて、試しにそのマテリアル定義の部分だけ消して
プログラムを実行してみると…。何事もなく動くという。

うーん。何なんだろ。ボーン用マテリアルかと思ったけど
Xファイルはボーンじゃなくてフレーム構造で動かしてるし。
LWのスケルゴンの成れの果てかと思ったけど、だとしたら
何でマテリアル数としてカウントされてないんだろ。

標準のXファイル読み込みはxof_defaultのマテリアルが
存在した場合は読み飛ばす処理をさせてるんだろか。

さらに、今回は別の問題も発見。
何と一度スタンバイモードにしてから元に戻すとXファイルで
読み込んだデータだけ表示されなくなってしまいました。

おそらくデバイスロストあたりの問題なんだろけど、デバイスロスト時の
関数も既に導入済みなので、よく分かりません。

デバイスロストはレンダリングループ毎だけにチェックさせてるのですが、
デバイスロストも定期点検が必要なんですかね。

2009.10.31 C++:入力はいりました

C++のプログラムにようやくキー入力操作が入りました。
やっぱり動かせると楽しいな。
それとプログラム終了時にキャラクターの座標をSave.txtに
保存できるようにしてみました。ファイルの読み書きというやつです。

といってもまだ読み込み関数を作ってないけどね。
Xファイルの自作読み込みに使用するトークン関数とか
そのまま使えそうなので利用しようかな。

そういえば、最近はちらほらWeb3Dのデバッグテストとして
ちらほら紹介して回ったりしてるんだけど、「動かせましたー」という
人がいまのところ一人もいないのです…。

むむ。自分が使ってみたPCは2台中2台使えたのに。
まぁ、いいか。O3Dは自分専用ということで笑。

2009.10.31 C++:ガッ!!

ファイル 197-1.jpg

C++のプログラムをほんの少し更新しました。
タイトルは特に、ぬるぽ的な意味はありませんよ。

変更点はというと、
・スプライトのαブレンディングが無事成功しました
・モデルがライティングされるようになりました

これくらいです。スプライトαテストの件はD3DRS_ALPHAREFと
D3DRS_ALPHAFUNCのレンダーステートを設定することで
無事解決しました。

ただ、それだけだとモデルとの半透明合成が行われなかったのですが。
なぜかスプライト描画前にD3DRS_ZWRITEENABLEを
OFFにすることでαブレンディングされました。

Zバッファに書き込むかどうかなんてスプライトに関係ないかと思って、
今まで設定してなかったのですが、スプライトはスクリーン座標系を
使用してるからなのか、どうもOFFにするのが無難なようです。

…ええ、詳しくは分かりませんでした。

それとモデルのアンビエントがなぜかうまく設定されなかったので
描画時のマテリアルループ毎にアンビエントの設定をかませることで
解決させたんですが、これも謎。謎だらけだなあ。


そういえば、ぬるぽって何なんでしょうね?
今まであまり興味なかったけど、C++扱うのなら少しくらい調べてみるかな。

それと、今日はひさしぶりにニコニコ生放送を見ていたのですが。
といっても、(名前を出してしまうと)Land-Yさんの動画の
最後だけチラ見しただけなのですが。
今回はICEでUVを設定するということをやっていて、
行列関係の話で盛り上がっていたのですが。そのなかで
「テクニカルディレクター向きな話だな」
というコメント(だったかな?)があって。はじめてそんな役職があることを知りました。

正直なんだかいいなと思いました。てくにかるでぃれくたー。

10年後くらいにはなれるといいな。
けど、10年後も平のデザイナーとかやってそうですが…。。
先の目標ができた分見れてよかったなと思いました。

2009.10.30 C++:とりあえずXファイルを読み込み完了!

ファイル 196-1.jpg

とりあえずC++のプログラムはスプライトとスキンメッシュ無しの
Xファイルの読み込みを実装させてみました。

長かったー。

個人的にはスクリプトを記述するよりも、クラスを組むときに
どうやったら後々効率がよくなるか考えてる方が時間かかってしまいます。

スプライトの方はタイル番号を変更することでテクスチャに格納されている
フォント群に合わせてUVを変更できるようにしました。
けど、今のままだと1文字ずつ描画する度にDrawPrimitive()を
呼び出していて、複数文字を扱うと処理が重くなりそうなので、
文字部分のスプライトの頂点バッファは1つにまとめて
扱うように変更しようかなと、ただいま検討中。

Xファイルの読み込みも実は標準命令で読み込んでるし…。
前まで自作でやろうとしてましたが、時間がかかるので後回しということで。

それとXファイルを読み込んで気がつきましたが、なぜかスプライトの
アルファテストがうまくいってません。(画像参照)
カラーキーでアルファ抜きをしていて、アルファ抜きはできているのに
モデルの上に被さると透明部分が背景色になる。なぜ?

2009.10.27 C++:ひさしぶりのVisual C++

今日はひさしぶりにC++の方のプログラムを制作していました。

スクリプトを組んでいると、いつの間にか触ってもいない部分でエラーが
大量に発生してしまい、原因を探すのにかなり時間がかかってしまいましたが。

どうやらクラスの定義の最後に;を付け忘れたり、#defineの最後に
;を付けたりすると、全く別の部分でエラーが発生するということが分かりました。

普通気づかんよ。こんなバグ。
え?慣れてる人はそもそもこんなミスしないって?
それをいっちゃあお仕舞いだ。

2009.10.25 O3D:今回は画像つき

ファイル 194-1.jpg

現在O3Dのスクリプトを着々と更新しております。

前回からの変更点
・シーンの切り替えがフェード処理で行われるようになりました。
・ヒットポイントが追加されました。
・COMプレイヤーが追加されました。けれど、壁にばかり
 突進してしまう駄目AIです(画像右上参照)。

これくらいかな。けど面倒なので今回はWeb上のものは
更新しておりません。
あまり、定期的にWebで公開すると向こうの会社から
差し止めがくるかもしれませんからね…苦笑。
そのかわりに日記に画像を載せておきます。


そういえば、つい最近ニュースで脅迫の容疑で逮捕された人が
「これは表現だから脅迫じゃない!」っていっていたけど、
ものづくりする立場の人から見ればすごく身勝手だなあと感じた。

表現をすることは他者を喜ばせることもあれば、悲しませることもあると思う。
形がある無しにせよ、自分が表現することで生み出したものを
自分が責任をとらないで誰が責任をとるんだと思いました。

言葉だけの表現者は自分で責任をとらなくていい、そんなことはないはずだ。

そう。僕もHTMLマ○オやら色々あやしいものを制作したり
しているわけですが、やはりそれなりの覚悟で制作してるのである苦笑。

2009.10.23 O3D:丸影って…なんだ?

O3Dスクリプトにさっそく丸影が入りました。
しかし、正確にいうとWeb上で表示できるようになりましたが、レンダー
ステートを使用せずに表示させているので半透明のソートができておりません。

まぁ表示できただけでも僕ぁ嬉しいですよ。

ちなみに解決方法は丸影のマテリアルと描画リストのソート指定を
パフォーマンスからZオーダーに変えただけなのですが。

パフォーマンスによるソートって何なのでしょう?
コストの高いオブジェクトから先に描画するとか、そういうこと?

今までパフォーマンスで表示させているとなぜかテクスチャが
表示されなかったのが、Zオーダーを使用することで、もれなく解決。
けれど、パーティクルと同じように木のZ値と同じ距離にいると
半透明処理がなぜかアルファテストに切り替わってますね。

かといってレンダーステートを使用すると謎のエラーがでるし…。謎だ。

あ、それとどうやらO3Dはバウンディングボックス取得できるようです。
当たり判定できない駄目な奴だと思って…正直すまんかった。


[PR]OZFCカ߂:Õی̂ēƎ͂炩