「スパキンオモスレー」という内容のメールが来た。
大ダメージ。
「スパキンオモスレー」という内容のメールが来た。
大ダメージ。
(昨日の続き)
MMXやアセンブラで検索すると、参考になるサイトがありましたので、そのサイトと睨めっこしつつアセンブラコードを書いてみました。
C言語の時は、アルファブレンド計算結果をあらかじめ配列(ルックアップテーブル?)につっこんでおいて、画像1と画像2のRGB値毎に、そのテーブルを参照して結果を求めるだけだったのですが、 MMXを使う場合は、そうしたルックアップテーブルを使う事が出来ず、毎回その場で計算しないといけなさそうだっため、本当に速くなるのか疑問でしたが、実際にやってみたところ、2倍以上の速度アップになりました!
test.LZH (718KB)
(今回から60FPSリミッターを外しています)
mmx pentium2 233MHz (昔のvaioノート)で、
2枚画像のアルファブレンド処理部分のFPSは、
C言語版:8~9FPS
MMX版:20FPS
・・・という結果になりました。
もちろん開発マシン(pentium4)では60FPSを超えています。
MMXを使うといくつかのデータに対して同じ処理を一度に出来るのですが、今回は掛け算なども使用する制限上、4つの数値を同時処理しています。
C言語の時に使ったルックアップテーブルは使えなくなったものの、この4つ同時処理が効いて、最終的に2倍程度になったようですね。
まだ改良の余地は多々有ると思いますが、とりあえずこの程度動けば、アドベンチャーゲームとしては成立するんじゃないかなぁと思いたいです。
(全画面アルファブレンドが出てくるシーンなんてあんまり無いでしょうから^^;)
実際にはBGM処理なども入るでしょうから、もうちょっとFPSは落ちると思いますので、動作環境はpentium2か3の500MHz以上(MMX必須)って所でしょうかね。
#ちょっと寄り道しすぎたので、EDGE2開発に戻ります。
ノベルゲーム実験の方ですが、VC++6.0でC++言語のコードを実行速度優先で最適化しているだけでしたが、 MMX命令を使えば、もうちょっと高速化出来そうな気はします。↓
http://www.atmarkit.co.jp/icd/root/65/390991665.html
昔256色限定でゲームエンジンに挑戦した際にインラインアセンブラをちょろっと実験したことがあるのですが、もうちょっとアセンブラ自体の知識と経験が欲しい所です。8086の勉強からしようかなぁ^^;
昨日に引き続き、ハイカラー版で実験してみました。
test.LZH (718KB)
640×480 16ビット(と言っても5:5:5)で処理しています。
一応2枚画像のフェード部分でも60FPS出ましたが、画像が汚いですね。
てか、そもそもハイカラー表示が基本動作のノベルゲームってのも嫌か^^;
(グラフィッカー泣かせ?)
DirectX9 & 3Dアクセラレータを操ってテクスチャをアルファブレンドすれば速度なんて出まくるとは思いますが、市販のノベルゲームでそんな動作環境見たこと無い(T_T)
(・・・なんて書くと、「このノベルゲームは3Dボード必須ですよ!」なんて情報が来そうですが、要らないですので送ってこないで!)
あとはAPIのAlphaBlendかなぁ、これも内部でどうやって処理されてるかわかんないし、グラフィックカードとかにも依存しまくりそう。(このAPI、Win2000以降ってだけで、なんとなく駄目な気がする・・・Win98ユーザーがかわいそう)
うーん、640×480 24bitでアルファブレンドはしない、とか_| ̄|○
その道に詳しい方アドバイスお願いします(´・ω・`)ショボーン
◇
英文メールがまた来たのですが、意味不明なので英語得意な方力を貸してくださいorz
◇
EDGE2の方は、来週・再来週中には次バージョンをアップ出来ると思います。
もうしばらくお待ちください。
掲示板の方でノベルゲーム製作(システム部分)のお誘いを受けたのですが、私の未熟な技術力で出来るのかどうか_| ̄|○
昔DTNというノベル作成ツールを作った事があるのですが、
作成当時、いろいろ実験しまして、
640×480 24bitでフェードアウトやらフェードインなどをやってみたところ、その実験結果が散々(Pentium2 266MHzで20FPSだったかな?)だったために、フルカラーを止めて256色にした・・・そんな苦い(?)経験があったりします。
そんなわけで今回も試作↓
test.LZH (637KB)
黒 → 画像1 → 白 → 画像1 → 画像2 → 画像1 → 画像2 → 画像1 → 黒
です。
画像は、「僕の見た秩序。」の写真素材を使わせていただきました。
ヨシナガさん有難うございました!
640×480 24bitで処理しています(DirectXなどは使っていません)。
私のPC(P4 2.4GHz)では、ただのフェードは60FPS(これ以上増えないように抑えています)、画像1と画像2のフェード部分は、52~53FPS程度でした。
2.4GHzで60FPS行かないのは駄目な気がします_| ̄|○
次回はハイカラーで実験してみようかな・・・
市販ソフトとかどうやってるのかなぁ(´・ω・`)