とりあえずDirectX7からDirectX8へ移行が完了したので、公開していこうかい。<だじゃれ。
3/7に修正版を用意しました。
修正個所:32ビットテクスチャの使えないビデオカードに対応していなかったのを直した。16ビットテクスチャを生成します。
DirectX8 TEST Program
2001/3/7 update
2001/3/3 release
●スクリーンショット
こちらにもっとあります。
●動作に必要な条件
・Windows95/98/Me/2000
・DirectX8
・16ビット以上の画面の色モード(16ビット以外の色モードでは起動できないビデオカードがあります。その場合は画面の色を16ビットに変更してから起動して下さい。)
・サウンドカードは不必要。(まだ音はでない)
・必要なメインメモリ量はそんなに多くないはず。64MBでも動くと思われる。
・必要なビデオRAM容量もそんなに多くないと思っている。16MBで動くといいなあ。追記:4MBのIntel810で動きました。
●動作確認した環境
・PentiumIII 800MHz/MEMORY 256MB/Windows2000/GeForcePro 32MB
・PentiumIII 500MHz/MEMORY 256MB/Windows2000/RADEON 64MB
・PentiumIII 733MHz/MEMORY 256MB/Windows2000/GeForce2GTS 32MB
・PentiumIII 866MHz/MEMORY 256MB/Windows98SE/Intel810 4MB
ちなみに、これらのマシンではだいたい20fpsぐらい。アウトラインとコンソールをoffにすると25fpsぐらい。
●DirectX8ランタイムのインストール
現在の最新バージョンはDirectX8.0aのようです。雑誌付録のCD−ROMからインストールする方法の他、マイクロソフトのサイトからダウンロードしてインストールすることができます。
以下のサイトから、 DX80jpn.exe または DX80NTjpn.exe をダウンロードして実行します。
http://www.microsoft.com/japan/directx/homeuser/downloads/default.asp
DirectX8ランタイムがインストールされていない場合、起動時に
「ダイナミック リンク ライブラリ d3d8.dll が指定されたパス〜に見つかりませんでした。」
などのメッセージが表示されて終了します。
●ダウンロード
dx8test_3_7.lzh(545,713 バイト)をダウンロードします。
ファイルを適当なディレクトリに解凍すると、
dx8test.exe
ydata/system.ybm
ydata/system.ysn
ydata/toon.bmp
が生成されます。
●使用方法
dx8test.exeを起動します。
一応、操作のキー対応表を表示できるようにしてあります。
シーン数は3つ、「stand」「walk」「motion test」をスペースキーで切り替えます。
リターンキーでカメラモードを切り替えます。manualモード時にマウスでカメラを移動できます。
その他、O/W/C/D/F/Hキーで各表示状態を切り替えられます。
F3キーで表示デバイスを変更できます。
ALT+ENTERでウィンドウ表示とフルスクリーン表示を切り替えます。
ESCキーで終了します。
既知の不具合:
RADEONではALT+ENTERでのフルスクリーン切り替えがうまくいかない様なのでF3キーで直接指定して下さい。
●内容解説
DirectX8での人体モデル表示のテストプログラムです。視点の移動も可能。
以下、やっていることいろいろ。
・LightWaveでモデリング
これが一番時間がかかるぞなもし
・LightWaveのシーン及びオブジェクトデータを解析、DirectX8用に変換
LightWave5.6からLightWave6になったのに合せて書き直し。特にオブジェクトファイルの方は構造がややこしさ炸裂。
・ボーン変形
再現性の観点からボーンウェイトマップのみ対応。筋肉の盛り上がりとか変に勘で再現するより確実で簡単で高速っす。ただウェイトを設定するのが面倒なのよねー。そーだ、指にも骨入れたんだけど動かすの忘れてた。
・モーフ変形
ターゲットモーフはやめて、全面的にモーフミキサーを使うことにした。昔のモーフギズモですな。変化する頂点のみを処理するようにしたので部分的な変形でも無駄に重いことはない。目パチ口パチで使っている。
・クロスシミュレーター
通称ひらひら。今回スカート、服のすそ、髪の毛で使用。ひらひらの自由度を頂点マップで指定できるようにした。ヒットは円柱に半球を二つくっつけたもので取っている。ヒットの位置とサイズもLightWaveで指定できるようにした。ただし、確認用のヒット表示は回転楕円体で近似している(手抜き)。などなど。で、いままでより格段に使いやすくなった。あとはシミュレーション部分のアルゴリズムの強化が必要かな。崩壊しないようにするのが最初の課題。このプログラムでは崩壊しないはずだが、風を強くしたり、激しい動きにすると簡単に崩壊するのだ。あと、スカートのメッシュは縦に割りすぎたな、とか髪の毛もそんなビロビロしないようにとか反省点は多々ありますな。
・テクスチャーマッピング
UVマップに対応。対応したのに使ってない。プラナーとかシリンドリカルばかり。やっぱこれも面倒なのなー。
・セルシェーディング
今回これが肝なわけですよ。ポリゴンモデルでリアルにレンダリングしようとすると不気味で怖くなることこの上なしなわけですよ。よって、目指すのはアニメ画。
・アウトライン
アニメ画なら当然必要でしょってなわけでアウトライン。これはいろいろ問題発生。まず線の太さをどうするか。普通に書くとモデルがカメラから遠くに行って小さくなると線の太さも細くなる。逆にアップでは太くなる。セルに書いた絵だったら線の太さはそんなに変らないよな。そんなわけで線の太さ一定になるようにすると今度は小さくなった時、線ばっかり、つまり真っ黒になってしまうのであった。よってリミッタを付けてある程度以上遠くは細くなっていくようにした。現状はこれ。それでもかっこよくない太さってのもあって、まだまだ研究の余地あり。もうひとつの問題はジャギ。特にアウトラインで色の変化が大きいので目立つ。解像度を上げれば多少改善されるのだが。よって、ここでアンチエイリアスの登場なのだが、まだまだ実験段階。
・法線の生成
通常はデータコンバート時に生成しておく場合が多いのだが、ボーン、モーフ、ひらひら、と変形するので後から生成している。各ポリゴンの法線を生成し、続いて各頂点の法線を決定している。重い。ここはマルチスレッド化を画策している。
できなかったこともいろいろ
・目
眼球を(球じゃないけど)動かすの忘れてました。ボーンで動かすのがいいのかな?あと目のテクスチャーも今後いろいろ試していきたい。
・髪の毛
まず、かなりすかすかっす。ズラ疑惑炸裂っす。ひらひらの関係もありますが、もちっと工夫していきたい。髪型も含めて。あと髪の毛の色はいろいろ試してみましたが、結局は好みの問題ですかな。原色系は違和感あるなあと。
・服
コスチュームは大事だよな。とりあえず靴を履かしたかったのだが。服を沢山作っただけでも、アプリケーションとしては成立しそうだもんな。とりあえずセーラー服とか作るか?
感想
アウトラインのあるものとないものや、セルシェーディングと通常シェーディングが、混ざって出ててもあまり違和感がないのは新しい発見。ここまではあくまでも実験なわけで、これから何を作るかが結構問題なのだな。ゲームを作りたいが、ゲームにこだわる必要もない気もし始めてるし。せっかくリアルタイムレンダリングしてるのだから単なるムービーとは差別化したいし。はたまた、すっごいくだらないゲームとかも惹かれる。最先端技術の無駄遣いってフレーズで。