専門基礎科目 非想天則 補講

前回:
id:yappy_t:20100725


Iくんが非想天則入れたはいいけどノートだと重くてネット対戦もしてみたけど無理ゲーとかなんとか。ちょっとついでにディレイとかそういう話があったので。


ゲームが重い場合、まず「描画周期」を「通常」から「1/2」にしてください。ゲームは「ゲーム状態の更新→描画→」のループを行っており、通常特に時間がかかるのは描画の方です。このループでの描画を2回に1回カットすることで品質は劣化しますが(コマ数が落ちる)、PC(特にビデオカード)の性能による重さは改善します。「更新→描画→更新→描画→」のループを「更新→更新→描画→」にするってことですな。さらにカットすればさらに負荷を抑えられますが、もはや動画と呼べるものではなくなってきます。フレームスキップとも呼ばれます。
この辺を自動で判別して重いときだけ描画を飛ばしてゲームの進行速度を一定に保つアルゴリズムがあって、実はそれほど難しくないので実装したことがあったけど忘れたので詳しく説明できない。


fpsの表示」を有効にしてください。すると対戦中、右下に(理想ならば)60程度の数値が表示されます。これが低下したらPCの描画が間に合っていないと判断できます。また、これをONにするとネット対戦中、左下に1ケタの数値が表示されます。これがディレイで、入力の遅延フレームを表します。


ディレイ(入力遅延)
ゲームがあるフレームを処理したいと思っています。1Pの入力はこのPCのキーボードやゲームパッドです。これの入力状態はすぐに取得できます。しかし2Pの入力はインターネットを介した向こう側で、届くまでには時間がかかります。インターネットの速度はmsオーダです。ゲームは1sに60回描画を行いますから1Fは16.7msです。描画でこれを思いっきり使うのでネットワークを待っていたらゲームになりません。
そこでディレイです。お互いに1フレームにその時の入力状態(ボタンを押しているか、等)を相手に送信します。到着するのは何フレームか後になりますから、Nフレーム目において、ある程度の大きさのKを用意すれば、お互いのマシンにN-Kフレーム目までのお互いのデータが揃うことになります。このKがディレイ(遅延フレーム)です。つまり、現在のフレームを処理するために、お互いの現在からKフレーム前の入力データを使うわけです。
非想天則はこのディレイを自動的に調整します。fps表示を有効にすると画面の左下に表示されるようになります。私の環境では、通常が3で、回線が良好だと2で、ちょっと重いと4という感じです。1や2しか出ないという好環境もあるらしい?
で、だいたい3F遅延でやってるわけですが、やはりオフラインを続けた後では結構来ることが多いです。距離感命のキャラを使ってることもあるかもしれないが…。あと DA > ディレイ帰巣 の間に暴れが入ってクソ萎えすることが多いです。5〜8F程度の目押し*1なんだよなあ。でも6F暴れに対して3Fシフトしても共通でうまくいくフレームは2Fある(キリッ。ラオウの目押しは2Fですからね。
天子はコンボ精度に激しく響くのでがんばってください。プラクティスとかには入力遅延をかける機能とかないんでね…。つけろって言われたらそんなに難しいことはない気もするけど。こればかりは実戦あるのみです。
なお、お互いに(オフラインと比べて)何フレームか前の入力で操作することになるので、お互いの反射神経というか反応がそのフレーム分遅くなると考えることができます。増長が通りやすくなるというか、そういうことも頭に入れておくといいかもしれません。


黄昏の日記で記述されたことがあったのですが、特にVista以上で3Fの遅延が起こる問題があるそうです。
http://www.ouma.jp/ootake/delay-win7vista-j.html
まあここはプログラマ向けの関数紹介もあるわけですが。上海アリスの方はダブルスポイラーから対策されてるみたいです。というわけなのでダブルスポイラー以外のゲームはすべて.exeのプロパティの互換性でデスクトップコンポジションを無効にするにチェックを入れましょう。ネット対戦でもないのに3Fは大きすぎる(北斗のやり過ぎか…)。


まあ…、あんまり気にしすぎてくそ高いモニタとか買っても仕方ないと思うよ。ネット対戦するとどうしてもディレイかかるしね…。


ああ、実例を挙げつつゲーム作成の注意点を説明するなんて、なんという優良部員なのでしょう。そういやこのネット対戦での入力遅延ってやつの仕組みを知った(というよりは推測した感じかな。直接書いてあるサイト少ないし…。)とき、ロックマンエグゼの通信対戦でサーチマンSPとかの目押し追加入力がやけにずれて、通信対戦専用のタイミングをつかまないといけなかった理由がよく分かった。東方も、ゲームにはまるのも、悪くないかな、と思ったものだった。GBAの通信ケーブルってそんなに伝送速度なかったのかなあ。いや、無線が有線より遅いっていうのは気のせいだって教わったっけ…。流星になった今でもDS無線対戦でもwifi対戦でも普通にそういうのあるんでね。

*1:0Fの隙間があいたら連ガ、相手の6〜9Fの最速暴れより早く出さないと駄目。チルノは5Fだけどね。同時だと相打ちでこれはだめ。