ぎゃっはっはっは!
笑いが止まらん!
ドラクエ8で・・・ドラクエ8で!!
新たなレシピ発見!!
なんとなくふざけていろんなもの放り込んだらできてしまった!!!
とりあえずレシピ表風味に表すと次のような感じ。
究極のチーズ=チーズ+カビ+うんこ!!
そういえば今日は読売テレビの見学に行きました。
滞りなく終わったことだけ言っておきます。
うぷぷぷ・・・トーポ可哀想やわ。
笑いが止まらん!
ドラクエ8で・・・ドラクエ8で!!
新たなレシピ発見!!
なんとなくふざけていろんなもの放り込んだらできてしまった!!!
とりあえずレシピ表風味に表すと次のような感じ。
究極のチーズ=チーズ+カビ+うんこ!!
そういえば今日は読売テレビの見学に行きました。
滞りなく終わったことだけ言っておきます。
うぷぷぷ・・・トーポ可哀想やわ。
どないしよー。
それでDirectDrawとDirect3Dでやってみようと思ったんだけど3D部分にドット絵を置いたらやっぱりドット抜けが起こって元の木阿弥なのです。
じゃあそもそも3Dでやりたかったことって何だったのか。
まずマップの前後関係のためのZバッファはZソートによって完全に無意味になっています。
エレコやギャモンは、正直、ポリゴンでさえあればなんだっていいし、アクセラレータを使わずとも自前の計算で充分何とかなるポリゴン数に収まるはずなのでこの点でもあまり意味はないわけです。
そしてDirectDrawだけではできないこと、半透明処理…やねさん、またライブラリ貸してもらいます。
えっとですね、描画エンジン、マップ表示の段階が出来上がりました。
結果はというと・・・・
・・・・
・・・・
惨憺たる結果でした。全くお話にもなりません。
ハードウェア的な相性もあるのでしょうが、これではドット絵など使えたものではありません。
とにかく今わかったことは、DirectX8はドット絵の描画にはとても使えたものじゃないということ。
おそらくDirectX9でも10でも同じことでしょう。
将来この問題が改善されるとしても私はもうそんなものに興味はありません。
逆にバージョンを下げてDirectX7を使えばDirectDrawというドット絵に特化したコンポーネントがあります。
そしてDirectDrawはDirect3Dの描画先として使うこともできます。
バージョンを落として不自由なことはありません。
プレイできる層が増え、更に表現力まで高まるのなら、それを使わない手はないでしょう。
ちなみに画像はDirect3D8で小さなドット絵を貼り付けたポリゴンを等倍でレンダリングした結果を拡大表示させたものです。
小さくレンダリングした時点でドットが潰れ、更に拡大表示する段階で画像が大きく歪んでしまっています。
もう言ったと思いますが、Bomber丸Worldのグラフィックは2Dに見せかけた3Dにしています。
そして今日作ったのはテクスチャ管理システム。
今回はRPGである都合上、画像をふんだんに使いますので、その画像を効率よく処理する仕組みが必要というわけです。
3Dで作るということで画像の表示はポリゴンにテクスチャを貼って表示させるわけですが、RPGのマップだと同じマップチップをいろんなところで表示したり、戦闘画面では同じ種類の敵が複数登場したりと、同じ画像が複数の場所で使われるケースが多いため、使う数だけ同じ画像のテクスチャを作っていては無駄であり、特にマップチップだと同じテクスチャ(それも結構でかいやつ)が何百枚と作られて、まともに動かせる状態ではなくなってしまいます。
だから、同じ画像のテクスチャを作ろうとしたときは前に作ったテクスチャを代わりに使うようにするわけですが、RPGでは場面の切り替わりと共にさっきまで沢山使われていた画像が今度は全く使われなくなるというケースもあり、逆にもう使われなくなった画像はどんどん破棄していく仕組みが必要なわけです。
ちなみにふにゃさんでは画像再利用をマップキャラ(ふにゃやギヤバネなど)に使っていたのですが、画像のサイズは高が知れているし、どのキャラもその後近いうちに再び使われる可能性が高いということで、読み込み時間を減らすため、破棄するのは絶対に使われなくなってから、つまり、ゲーム全体の終了時のみになっていたりします。
話を戻しますと、幸いにしてDirectXの全てのインターフェースはそのための参照カウントシステムを持っているため、ファイル名とテクスチャを関連付けてリスト(実際にはSTLのmap)に記憶しておき、あるファイルのテクスチャを使うときはリストからファイル名に対応するテクスチャを探し出し、見つかったらテクスチャの参照カウントを1増やしてからそのポインタを確保しておき、見つからなかったらテクスチャを作成した上でリストに追加、逆に使い終わったときは必ずリストにあるはずのテクスチャを探し出して参照カウントを1減らし、0になったらテクスチャを破棄(これは自動で行われる)した上で、リストからもテクスチャの情報を削除。
これで、常に必要な分のテクスチャだけがメモリ上に置いてあるということになります。
もしかしたらこういうことはDirectXが勝手にやってくれてて自分は無駄なことをやっているだけという可能性もありますが、まあそれにしても無駄はリスクに比べればそう大きなものでもないのでよしとしましょう。
以前の日記に書いたドットを潰さないレンダリング方法、あれ別に3Dでなくとも2Dでも高さ成分を真正面から見た高さの8割になるように、奥行きを真上から見た奥行きの6割になるようにドット絵で描けば縦・横・高さの比率が正しいドット絵として立派に成立するじゃないですか!
というわけでそういう描き方をしたマップチップでマップを描くプログラムを作ろうとしていたのですが何をどう間違えたのかマップチップを作っているうちにマップ上に配置する人物キャラを描きだしてしまいました。
元々人物のデッサンなんて小学校以来やってはいないしましてや37度から直立姿勢の人を描くなんてことは一度もなかったので、とりあえず理論的に正しい人物を描こうと身長別-男女のボディサイズ平均を見て数値を見ながら描いていったのですがどうにも日本人の体は細長すぎるようだったので、今度はメタセコイアに入っていた人物の3Dモデルを37度の角度から見下ろした画像から輪郭抽出してそれを参考にしながら描いてみたら結構自然な感じになりました。
しかし謎の男のつもりで描いていたのですが、暗いね。
というわけで。はい。以前のプロジェクトは完全に破棄しました。
Bomber丸Worldはまた最初から作り直しですが今度こそは最後まで行きますよ。
何とか今までのゲーム作りなどで、ずぼらで面倒くさがり屋の私にでも完成させることができるプログラミング手法はある程度修得したつもりです。
だけどDirectXの講座サイト見ながらやってたら早くも挫折気味だぜい!
とりあえず紹介ページも更新してます。描画手順など。
そういえばマップチップの大きさなんかも決めたりしたです。
今回決めた描画手順に適合してなおかつグラフィックが破綻しない大きさを考えると幅25x奥行き15x高さ20というマップチップのサイズが計算されたデス。
見下ろし角度およそ37度でございます。
そうそう、ミディビに関するアンケート作りました。
ミディビの「実際に使ってみる(テスト中)」から動作確認アンケートに答えてください。
ほんとこれ切実です。実態を把握できないと進めるに進められません。
ミディビさっぱりうまくいきませんよ。
どうして全てが正常の値を示しているのに音だけが鳴らないんでしょう。
同じことを別の方法で実現するコードで書いてみても結局はやっていることは同じなので結果も同じだし、よもやと思ってこれを作り始めた頃に参考にしたアプレットを開いてみたら今はならないんですよ。
ということはブラウザ側の問題、Javaのアップデートがいけなかったのでしょうか。
しかしだからといってJavaをダウングレードしろとユーザーに求めるわけにもいかないし、ここまで来て開発を中止する気もさらさらないし、どうすればよいのでしょうか。
一応、演奏機能を使えば音は鳴る、つまり、Sequencerは正常に音を出してくれるので、最悪一音出すだけのSequenceを作ってSequencerに渡せばよいのですがこれはあくまで最後の手段として取っておきたいのです。
もっとも、過去の経験からするとあっけなく最後の手段に打って出ることになりそうですが。
どうにもふにゃさんのエディタが使いにくいようだったのでまずちらつきをなくす方面で改良を加えてみました。
それとやっぱり、ゲーム内のキャラの中には、ギヤバネのようにあたれば吹っ飛ぶというわかりやすいものだけでなく温度変化ゾーンなどの特殊なものもあったり、キャラ同士の相性などもあったりと、必ずしも感覚的にわかりやすいものばかりではないので、ヘルプがある程度必要そうな気がしてきました。
Bomber丸Worldのグラフィック、要するに3Dに見えなきゃいいんだ、ってことで、ドットを潰さない3Dのレンダリング方法を考えています。