2011年02月16日

週間わたしの坊主ちゃん41



ガラリとゲームエンジンが2.04〜2.06に変わったので、
開発秘話というか、今回の仕様変更箇所についてまとめてみようと思います。
技術的な事なので、ゲームそのものの話は一切ありません。


Windows7でメインメモリがどんどん増えていくというのはメモリリークだったようです。
苺坊主ではXPで開発を行っていたので、この現象を把握していませんでした。
最近ようやくWindows7のPCを導入したので、今後はWindows7ベースでの開発が出来そうです。
代わりにWindows7では落ちないのに、XPでは落ちる…という現象も起こったりしました。
しばらくは2つのOSでテストを行わないといけないので、プログラマには厳しい状況が続きそうです。
(98→XPのように一斉にWindows7が普及すれば良いのですが)


2.05から大きく変わった点は一部の画像キャッシュをメインメモリに残さずVRAMにのみ残すようにしています。
メインメモリ→VRAMの転送が実は非常に遅いので、メインメモリの使用を止めています。
(メインメモリはHDDに比べれば十分に早いのですが、CPUやVRAMに比べるとまだまだ遅いのです)
戦闘終了のリザルト画面が重い現象は、このメインメモリの遅さに原因があったようです。
この場面は2.04でスクリプトは改善されたので(描画方法を別のものに差し替えた)解決済みです。
メインメモリに置いておく利点としては、F5で画面の大きさを変えても画像が消えない点でした。
2.04以前ではステータス画面でF5を押しても文字が消えませんが、2.05以降では文字が消えます。
VRAMにしか画像データがないので、何処かに消えてしまうわけです…
こういう不利な点もありますが、メインメモリを使用しないことで2.05以降では画像表示が高速化されています。
(文字が消えても、画面を変えれば復活するので実用上無問題でしょう)


2.05ではメインメモリの制限を間違えて絞りすぎた状態でコンパイルしていたようです。
2.06ではメインメモリの使用量をConfig.exeで変更できるようにしてあります。
今時のPCならメインメモリは1〜2GB程度積んでいると思うので、メモリの使用量は「大」をお勧めします。
「中」以下に絞るとメインメモリの使用量は減りますが、頻繁にファイルの読み込みが発生するのでゲームが重くなります。
メインメモリをけちるメリットはないと思うので、512MBなど相当にメモリ搭載量が少ないPC以外では「大」にしておきましょう。メモリはアプリケーションの作業スペースです。
せっかく搭載したメモリを使用しないのは広大なスペースを無為に放置しているようなものでもったいないものです。


2.05まではVRAMの制御をプログラムでのみ行っていました。
簡単に説明すると、
 VRAMがどんどん増える→足りなくなる→解放する→以後繰り返し
という非常に単純ですが、VRAMが大量にある状況では効率の良い方法でした。
最近のグラフィックボードですと、ローエンド製品(3000円台の最安値)でも512MB〜1GBのVRAMを積んでいるので
この方法でも特に問題はありませんでした。
問題が出てくるのは256MB程度しか積んでいないものや、オンボードのものです。
苺坊主の作品は動作環境に書いてあるように
 オンボードでの動作は基本的に非サポートです
低スペックのPCで動くようなものよりは並のPCで快適に動く、を目指して制作しています。
近年のネットブックPC(Atom搭載機)に合わせて作成となると、蒼神縁起のようなグラフィックは難しくなります。
オンボードは足切りして、ローエンド以上のグラフィックボードを前提の設計になっています。
苺坊主内で主に動作確認しているグラフィックボードはRadeon4350やGeForce7300LEといった最低ランクのものです。
これらのグラフィクボードは劣悪な性能なので、ゲーマーからは見向きもされないモデル
なのですがオンボードとは雲泥の性能差があるようです。
カタログ上のスペックは近年のオンボードは良いのですが、
VRAMがメインメモリと共有型の為に致命的に遅いのが原因?とも考えています。
ともかくオンボードではカクカクのものもローエンドグラフィックボードでは快適、というのがこちらのテスト結果です。
オンボードグラフィックを騙し騙し使っている方は世界が変わるのでグラフィックボードの購入を激しくお勧めします。

2.06からはVRAMの制御の一部をスクリプトで出来るようになりました。
消したくなった場面で不要な画像をVRAM上から削除できるのです。
これのおかげで、当面使わないのにVRAM上に残り続けていた画像などが一掃できるようになりました。
不要な画像の削除はスクリプトで大半は出来ているので、Config.exeのVRAMの設定は「最大」をお勧めします。
無尽蔵にVRAMを消費するわけではないので512MB以上搭載しているグラフィックボードなら「最大」が良いでしょう。
VRAMを絞ってもメインメモリ同様にメリットはないと思います。
万一VRAMを使い切っても一気に解放するので、それが原因で落ちるなどということはありません。
(同時に複数のゲームを起動…などはさすがにこちらも想定していません)
VRAMが256MBなどのグラフィックボードの場合は一度に多数の大きな画像を読み込んだ際に
一部の画像が消えてしまう不具合が起こる可能性があります。
こういう場合は「大」や「小」を試してみてください。
2.06ではグラフィックそのものを大きく変更してVRAMに優しい仕様に変更してあります。
(パッチの量が大きいのはその為の新仕様画像を多数含んでいるため)
2.04以前ではVRAMに優しくない画像が多かったので2.06ではエコ化しています。
昔のファミコンのゲームが一枚の画像に色々なものを詰め込むような感じで2.06ではエコな画像になっています。


VRAMとメインメモリの説明はこれくらいで最後に「低画質モード」です。
これは本当に苦肉の策なので、基本的には使用しないでください。
内容は一言で言うと、
 VRAMの中身のビットマップ画像をJPG化する
といった代物です。正確にはJPGではないのですが不可逆圧縮で思いっきりVRAMをケチることができます。
その代償としては…
 不可逆圧縮なので画像の劣化が著しい。(PNGと低画質JPGを比べてみてください)
 VRAM内で圧縮作業を行うので、変換に時間がかかる。結果、ゲームが固まるような重さになる。
「低画質モード」は画質も悪く、重くなるという非常にマゾいモードです。
その代わり、オンボードグラフィックのPCでも動く可能性があります。
どのみち重すぎてゲームにならないとこちらのテスト結果では出ておりますが、
VRAMはほとんど消費しないので、画像が消えるなどの現象はまず発生しません。
いずれにしてもオンボードグラフィックを苺坊主では非サポートなので、
「低画質モード」もほぼ非サポートです。
その辺を踏まえてご利用ください。
画質が悪いが動作が軽いモードではないので、十分に注意して使ってください。


2.06では大きくエンジンが更新され、内部は別ゲームのようになっているので
どのように変わったかをまとめてみました。
VRAMを制御するスクリプトなど書いたこともなかった羊坊主がお送りしました。


posted by strawberrybose at 23:00| Comment(9) | 週間わたしの坊主ちゃん | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。