テック・トーク #1 - 乱数・攻撃時の内部計算・Unityアセット・動作パフォーマンスについて

テック・トーク#1


SotAのリードテクニカルディレクター、クリス・スピアー氏とコミュニティメンバーのDuke Violation氏のハングアウト動画の要約です。
主にSotAのプログラム的な仕様がテーマとなっています。

  • SotAの乱数生成にはバグが?
    • SotA内の疑似乱数生成(pseudorandom numbers generator)にバグがあることに気付いている方は、200人くらいはいるかもしれません。同じクリーチャーを狩り続けて、数時間に1個のペースであるアーティファクトをドロップすることもあれば、それの3~4倍の時間狩り続けても1個しかドロップしなかった、という経験をした方もいるでしょう。しかし、このバグ(註: おそらく主観的な偏りの体感)を修正する予定はありません。
      要はいくら偏っていたとしても、時間当たりにサーバー全体でドロップする総数が想定通りであるならば、何も問題はないからです。
    • アーティファクトのドロップについては、敵のTierによって指数関数的なドロップ率の変動があります。例えばShield of the Wicked Kingのドロップ率は、Tier5の敵からのドロップは0.000001%ですが、敵のTierによっては最大1%にまで上昇します(註: Tierが上がるごとにドロップ率のケタが上がる仕様。Tier10で1%)
  • 近接攻撃と防御スキルの計算について(ドッジ・パリィ・ブロック・グランシングブロウ)
    ※この項目はかなり自分の理解があやしいです。多分というかかなり間違ってる気がします。誰か助けて。
    • あるキャラクターが回避率20%、シールドブロック成功率10%、グランシングブロウ成功率10%という防御性能をもっていたとします。そしてそれに対する攻撃側のヒット率は100%でクリティカルヒット率が10%であると仮定します。
      この場合、結果的に攻撃側が相手に攻撃をヒットさせることができる期待値としての確率は20%になります(?)。
      これは例え100%のヒット率であっても、一撃ごとにダイスロールが行われ、0-100の範囲で攻撃がどう防御されるかが決定するからです。
    • クリティカルヒットはノーマルヒット判定時にクリティカルヒット%で発動。ノーマルヒットが外れた場合、クリティカルヒットチャンスは最低ノーマルヒット率として適用されます(相手がハイレベルすぎてこちらの攻撃が100%回避される状況であっても、クリティカルヒットチャンスの%がそのまま最低ノーマルヒット率になる)
    • 上記のステータスを例にした時の、ダイスロールの目とその結果
      • ダイスの目が0-10の場合: クリティカルヒット%の確率でノーマルヒット(最低ノーマルヒット率の保証)
      • ダイスの目が11-20の場合: 相手のドッジにより完全に回避される。
      • ダイスの目が21-30の場合: 相手のブロックにより確実にダメージの減衰を受ける
      • ダイスの目が31-40の場合: 相手のパリィにより確実にダメージの減衰を受ける
      • ダイスの目が41-50の場合: グランシングブロウにより確実にダメージが1/3カットされる
      • ダイスの目が51-60の場合: クリティカルヒット
      • ダイスの目が61以上の場合: ノーマルヒット
    • 以上、なんだかよくわかりませんが、攻撃側のダイス目によって100パターンの結果が存在し、
      100 - (防御側のドッジ・パリィ・ブロック・グランシングブロウの合計%) = クリーンヒットの確率
      という感じになりそうです。
    • また、防御側のドッジ・パリィ・シールドブロック・グランシングブロウはどれか1つだけが作用する(=例えばパリィとシールドブロックが同時発生して2重にダメージ減衰効果が発生することはない)仕様のようです。
    • まとめると、接近戦ではクリティカルヒット率とアクティブな防御スキルは超大事、ということらしいです(劇終)
  • Unityのアセットについて
    • ユーザーからフリー素材のUnityアセットをアドオンストアで有料アイテムとして販売している、との指摘がありますが、非商用利用の場合はフリーでも、このゲームのように商用利用をするときにはライセンス料の支払いが発生します。(問題提起の起こったフォーラムのスレッドはこちら
    • たとえばハウスモデルひとつを新しく作るのに、ハウスビルドを担当しているボブに一ヶ月間の時間が必要になります。また、アセットの価格はこういった1人あたりの作業時間とサラリーを元にして設定されています。
    • 既存のアセットをSotAにインポートする際にも、様々な最適化やSotAの仕様に合わせたパラメータ設定の作業とそのため時間が必要になります。
    • SotAのゲームエンジンにUnityを選択した理由は、少人数で大規模なゲームを作るのにベストな選択だからです。マルチプラットフォームのコンパイルが容易であったり、アセットストアの市場が大きい(多様なゲーム素材の調達が容易である)ことが主な理由としてあげられます。
  • ゲームの最適化については?現在のところ、改善余地はどのくらい残されていますか?
    • まず、使用メモリの削減については次のリリースで大幅な削減が実現しそうです(R40)
    • 最適化が必要な箇所はまだまだ死ぬ程沢山残されています(tons and tons and tons of opposition)
    • フレームレートの低下とゲームの動作の安定性は密接に関係していて、1秒あたりの描画フレーム数が低い、すなわち1フレームあたりの表示時間が長い(カクカクの状態であればあるほど)とそれだけ1フレームあたりのネットワークパケットの送受信量が増加します。そして1フレーム当たりのネットワークパケット密度が高ければ高いほど、より次のフレームで処理すべきパケットを沢山受け取ることになります。
      • 極端な例をあげれば、画面内に多人数での乱戦が起こると(カクつきの原因その1)、1フレームあたりのネットワークパケットの処理量は上昇し(カクつきの原因その2)、次のフレーム描画はより高負荷なものとなり(カクつきの原因2によりカクつきの原因その1がパワーアップ)、それが原因でさらに描画は重くなり、1フレームあたりに発生するネットワークパケットの送受信量はさらに増える、という負のスパイラルが発生します。
    • Q2ではこれらの問題の解決も含めた、動作パフォーマンスの最適化が予定されています。
    • 近日予定しているUnity 5.5への以降により(現在R40で実装ずみ)、大ざっぱにいって最大で25%ほどの動作パフォーマンスの恩恵があると見込んでいます。

0 件のコメント:

コメントを投稿

■過去記事アーカイブ