
ダジャレを思いつきました
Q. 竜騎士が喜ぶときのセリフはなんでしょう?
A. 槍ィ!
MMORPGに、ラグは付き物だということは分かるのですが
どこまでが防げるラグで
どこからが当たり前のラグなのか
が分かりません
漆黒までは10~30fpsの環境で遊んでたので
むちゃくちゃ難度が高かったのだけど
その経験のおかげで
ラグには、通信のラグと描画のラグがあるってことに気づけました
通信部分は、光回線とIEEE 802.11axのまま変わってないのに
ゲーミングPCに変えるだけで、ラグが0.5秒まで短くなったからです
それまでがどれくらいの難度だったかというと
リヴァイアサン戦で、ぶしゃーって水柱が見える前に、船が傾いてた
(リヴァイアサンが特別重いだけで、軽いボスでは30fps出てた)
全員の動きの座標を
サーバーに集めて、それをほか全員に配布して
という処理を工夫なくやると
お互いに、数秒前の姿が見える結果になるので
ラグをごまかす処理が入ってるはずですが
スプラトゥーンの場合は
人間はたぶん、直後にこう動いてこの位置にいるはずだろう
という予想の座標で、お互いを表示してて
もし人間が予想外の動きをした場合は
後付けでそれを補正してたはず
(補正の瞬間に、瞬間移動してる様子が見える)
その予想にすぎない姿を、敵に撃たれた場合
当たった扱いになるのか、当たってない扱いになるのか
実験したことないので、よく知らない……
FF14での戦闘中も、仲間が瞬間移動することがあるし
回線が今日悪いよー、って言ってるプレイヤーは
固まって、瞬間移動してを繰り返してたので
動きの予想と補正、みたいな仕組みは
FF14にも入ってそう
仲間の動き以外は、どんな処理なのだろう……?
一瞬後に、どのアクションを使うか
は予想できないので、単純に遅れて表示されてると思う
バフ、デバフの情報も
発生してから表示されてるはずで
それが付いた本人だけが、先に知り
仲間は遅れて知るのかな……?
それとも、本人も含めて、全員が同時に知るのかな……?
敵のAoE表示は、ローカルでの計算だけで表示してるのかもしれない
FF14ではボスの行動は、戦闘終了まで決まってるのだし……
ただ、インタラプトできるし
道中のザコの行動には、固定と言えるようなタイムラインはないかもしれない
そうなると、やっぱり敵の行動も
仲間の行動と同じく、毎回サーバーから教えてもらって
クライアントに描画してるのかもしれない
その場合、AoEは表示開始が遅いだけで
画面で赤色が見える前から、サーバー上はAoEを発生させ始めてた扱いになる
FF14を始めた最初に、すごく違和感あったのに
今では慣れてしまってるのは
AoEの当たり判定の、出現する瞬間、消える瞬間が
画面表示とぜんぜん一致してないこと
AoEによる被ダメージが確定するのは
AoEの消える瞬間に、赤い場所に立ってたら
という条件ならば、すごくわかりやすいし
実際に、そう説明されてる
けど、実際に確定する瞬間は
AoEが消える0.5~1秒くらい前!
すべり撃ちでは、この猶予まで踏まえた上で
AoEが消える1秒前くらいまでは、AoEを踏みっぱなしで詠唱を継続するし
キャストバーが100%になるまで移動しないのでなく
80%くらいでもう移動しちゃっても、バーは100%まで伸びて完了する
つまり、AoEから移動するタイミングについては、ラグを損方向に考慮してるし
キャストする総時間については、ラグを得方向に利用してて
意外と複雑な処理を、脳はおこなってるけど
慣れで解決しちゃってる感じ
AoEが表示される長さを、あらかじめ知ってて
AoEの端までの移動時間を含めて
キャストバーが80%まで行って、AoEが消える1秒前までにAoEを脱出できそうならば
詠唱を継続し
行きそうになければ、詠唱を中断する
という判断を、無意識にしてる感じ
この、0.5~1秒というラグが
いろんな所に登場するみたい
すべり撃ちの猶予時間や
AoE脱出時に、とらなければならない時間の余裕以外には
敵のふっとばし攻撃で
パーティ8人が散らばる時の、自分と仲間7人の描画のズレも
0.5秒くらいある
たぶん、このときが1番分かりやすいってだけで
仲間は常に、0.5秒前の姿なのだろう
パッと一瞬しか表示されないタイプのAoEを
見てから避けられないのは
たぶん見えた時点で、被ダメージが確定してるから!
AoEが消える0.5秒前に確定してるなら
AoEの表示自体が0.5秒しかない場合
すでに確定したことを、事後表示してるだけってことになるので
それを踏みそうな仲間を助けるには
見える前に「救出」しないと意味がない
仲間へのピクミンも
0.5秒前の姿を参考に移動することなので
0.5秒前~現在までに
さらに状況が変化してる場合には、対応できない
それって、具体的には
自分の画面ではどう見ても危険な場所に、なぜか仲間が移動してるように見える
なぜなら、自分の画面でのAoE描画のラグのほうが、仲間位置のラグより小さいので
そこはすでに危険地帯になったように見えるが
仲間はそこを、0.5秒前にすでに通り過ぎており
その時はまだ安全だったので、食らわなかった
いまから自分がその真似をしても、すでに危険地帯になってるので
自分だけが食らってしまう
ボズヤとかの弾幕系で
一気にデスが10人くらい出るのは
ピクミンすることで、むしろデスが確定する
という、絶妙なズレでAoEが表示されてるからだと思う
ぜんぶ青で通過できるはずの信号機に
スタートで遅れて、どこかで赤に引っかかる感じ
1回経験しないと、知りようがないもの……
ラグで、ほかに
どんな場面で得をし
どんな場面で損をしてるのだろう……?
画面上に表示される、AoE以外の予兆の情報
例えば、剣やマントのマークが、戦闘舞台に表示されてるとか
敵の周りに、赤いモヤが出てるとか
たいていは、その予兆が消えた直後に
一瞬だけのAoEが発生する
あれらも、予兆を観測してから安置に移動するまでの猶予時間が
0.5秒短かったはず
でも、開発者はそれも加味して
0.5秒長めに表示してくれてたかもしれない
仲間と互いのマークを重ねて相殺する系のギミックや
塔に入るギミックも
ギリギリ間に合ってたように見えるケースは
いつも間に合ってない判定だった
それらも実際は、0.5秒前が本当の締め切りなのだろう
GCDが完全に回る前の、時計の10くらいの位置で
もう次のアクションを先行入力できるのは、アレもラグのおかげなのだろうか……?
ルーシッドとかのアビリティは
10の位置よりもっと早めでも先行入力が効くので、ややこしいけど
GCDアクションの先行入力は
やっぱり0.5秒くらい前からになってる気がする
これは、すべり撃ちと同じく
得する方向のラグなのだろう
10時の時点で、もうGCDが12時まで回った、とみなしてくれてるわけ
その理由として
サーバー上の時間では、本当に12時まで回ってるのか
クライアントのコードが
10時の時点で実行したアクションは12時になった後で実行する、と予約してるのか
といえば
たぶん、前者だと思う
サーバーは、スプラトゥーンと同じく
ある程度の先読みをした世界で動作してて
そこでは、いまから0.5秒未来の時計になってるのかも
なので、クライアントからサーバーに対する入力は
0.5秒先までの予約が効く説
(予約した行動を、訂正はできないけど)
描画に必要な情報を、クライアントから0.5秒前に集め終わってるので
クライアントへの計算結果の配布開始も、0.5秒早められる
そうやって工夫した結果、本来は1秒遅れになるはずだった
仲間の描画を、0.5秒遅れ程度で済ませることができてる
という順序な気がする
プレイヤーにとって、描画遅れで損するラグが0.5秒くらい
ってまず決まり
それを相殺するくらい、得もさせたい
って設計した結果
得する方向のラグも、似た数字になるよう調整しただけで
両方向のラグの原理に、直接の関係はない気もする
興味あるのは
この0.5~1秒というラグが
固定なのか、環境によるのか、という点
いや、不利方向は、環境によるに決まってるのだけど
有利方向は、全ユーザーで固定にしてるのではないか……?
って予想する
だって、通信速度の世界一速いプレイヤーがいたとして
一瞬で通信できるならば
ほかの仲間より速く、仲間の位置を受信でき
仲間の座標は0.5秒前の位置でなく、ほぼ現在の位置かもしれない
けど、一瞬でサーバーに届くからといって
すべり撃ちがまったく効かなくなったり
GCDアクションの先行入力が、まったくできなくなったりすると
回線速度を上げることは、むしろ損になっちゃう
なので、これらプレイヤーの得する方向は
通信速度によらず固定にしてるのでは、という予想
いっぽう、プレイヤーの損する方向のラグは
高速回線のユーザーほど、現在に近い仲間の位置を知れるが
その位置を仲間がアップロードする速度が遅ければ
いくら自分のダウンロード速度が速くても意味がなく
結局、0.5秒前の姿が見える
全プレイヤーの平均回線速度が
日々上がったり下がったりしても、スクエニがいちいち微調整しなくて良いように
自然にまかせる、青天井な設定になってるのではないか
と予想
AoEをよける猶予が
AoEの消える2秒前でないと間に合ってないとか
AoEの消える瞬間によけても当たってない
というプレイヤーはいますか?