26
オンラインゲーム技術入門 2013515中嶋 謙互 http://github.com/kengonakajima

Onlinegame entrylevel 201305

Embed Size (px)

Citation preview

Page 1: Onlinegame entrylevel 201305

オンラインゲーム技術入門2013年5月15日中嶋 謙互

http://github.com/kengonakajima

Page 2: Onlinegame entrylevel 201305

• https://github.com/kengonakajima/profile

• 1996年ごろから

• 商用オンラインゲーム x 8以上

• オンラインゲームミドルウェア x N

• 書籍 x 2

• 最近: DQXサーバ / ホリキング(Flash mmo)

自己紹介

Page 3: Onlinegame entrylevel 201305

「オンラインゲームの開発は、あまり怖くないかも」

と思えるようになる、はず

今日の話の効果

Page 4: Onlinegame entrylevel 201305

今日の話

「狭義のオンラインゲーム」

Page 5: Onlinegame entrylevel 201305

狭義のオンラインゲームとは?

• リアルタイム

• リモート

• マルチプレイ

Page 6: Onlinegame entrylevel 201305

ジャンル

• RTS : StarCraftシリーズ、AoE

• ARPG : ディアブロシリーズ

• MOBA(RTS) : League of Legends, ヒーローズ of order & chaos

• TPS : FEZやコズミックブレイクなど

• FPS : unrealエンジンの実績のほとんど、CS, halo, Cod, minecraft, L4D, ...

• レーシング : マリオカートシリーズ、ほとんどのメジャーなレースゲーム

• 対戦格闘 : ストリートファイターシリーズ、スマブラ

• スポーツ : サッカーのオンラインゲーム化はよくされるが。。

• MMO : wow, ff11/14, など大手以外にもrunescapeなども

• スクロールアクション: テラリア,KAG, ラテールなど

• バーチャルワールド: ピグやhabboなど(テーブルゲームなど含む)

Page 7: Onlinegame entrylevel 201305

skipped: 20枚にわたって写真と動画でゲーム紹介

Page 8: Onlinegame entrylevel 201305

だいぶ異なる2つの技術体系

• HTTPが使える体系

• HTTPが使えない体系

※クラウドゲーミングは定着していないので入門からは省略

Page 9: Onlinegame entrylevel 201305

HTTPが使えない理由

• プッシュ

• 遅延 (LOL ping 64.7.194.1 / google.co.jp, 地球、光)

• 効率 (ネットワークで4~10倍/CPUで10~100倍)

Page 10: Onlinegame entrylevel 201305

HTTPを使うゲームとも共通する課題

• 描画/UI設計

• DB負荷

• サーバのI/O負荷(ファイル、ネットワーク)

• ログ解析

• サーバデプロイ/up/down

• クライアントアップデート

• バージョン管理

• クライアント/サーバでのコード共有

※省略

←最初のトラブルはほぼこれ

Page 11: Onlinegame entrylevel 201305

HTTPの体系にはない課題

1. 状態のあるサーバをどうスケールするか2. 通信が遅いとプレイ感が劇的に悪くなる3. サーバで、速いゲーム処理をどう書くか

ほぼ使えない: Ruby, Python, PHP, Perl軽め: JavaScript, Lua重め: C#, Java, C++, C (省略)

4. 他C10K、 JSON重すぎ、 UDP、 NATトラバーサル、 etc (省略)

Page 12: Onlinegame entrylevel 201305

1. 状態のあるサーバをどうスケールするか

Page 13: Onlinegame entrylevel 201305

状態のあるサーバとは

• オンメモリ

• シミュレータ

• 特定のクライアントとの接続を持ち続ける

• 数千~数万 Qps/core

• 非同期

• だいたい「ゲームサーバ」と呼んでいる

Page 14: Onlinegame entrylevel 201305

game 0 Net

game 1

game 2

・・

User A

User B

User C

User D

User E

User F

web 0

web 1

状態ありの「ゲームサーバ」こまかく制御されたロードバランスが必要

状態なしweb等サーバ

backend

Page 15: Onlinegame entrylevel 201305

• 起動

• prefork / on-demand fork

• ホモ?ヘテロ?

• コア(Thread)あたり何ゲームをホストするか

• ゲームタイプ(人数が違う、設定が違う)

• ゲームデータ(地形など)が大きくて全部は読めない

• 発見

• プレイ相手はどのサーバにいるのか

1. ゲームサーバのロードバランス

←運営開始時に必ずトラブルDBまわりの次に多い

←なかなか満足いく結果を出せない

Page 16: Onlinegame entrylevel 201305

2. 通信が遅いと、プレイ感が劇的に悪くなる

Page 17: Onlinegame entrylevel 201305

通信の遅れ = RTT × 2

gameserver

User

時間

操作

座標変更

操作を通知

Net

結果を通知

描画

時間

Page 18: Onlinegame entrylevel 201305

• 光速 = 30万km/秒

• 直線1000kmあたり 3.3msec

• 光ファイバの屈折率だと4~5msec

• 途中のルータや無線LAN, OSを経由して +2~3msec

• 意図がある場合の人間の反射速度 : 10~30msec

地球の大きさと光速

Page 19: Onlinegame entrylevel 201305

人間の操作よりネットが遅いgameserver

User

時間

操作 : 左へ行け

座標変更

Net

描画 : 左に進む

操作 : 左へ行け操作 : 左へ行け操作 : 右へ行け操作 : 右へ行け操作 : 右へ行け

描画 : 左に進む描画 : 左に進む描画 : 右に進む描画 : 右に進む描画 : 右に進む

Page 20: Onlinegame entrylevel 201305

プレイ感覚の悪化(デモ)

• 遅れ無し

• 一定の遅れ

• スパイクのある遅れ

http://kengonakajima.github.io/delay/game/index.html

http://goo.gl/7ZnWY

Page 21: Onlinegame entrylevel 201305

さまざまな工夫

• 自己操作の特別扱い (デモの自機)

• 操作そのものではなく欲しい結果の送信(デモの”goal”)

• 決定論的挙動 (デモの宝石)

• クライアント状態の条件付き採用 (デモの自動同期)

• 他にも様々な工夫が、ゲーム内容ごとに

• ホーミング(追いかけることでヒット)

• 可変アニメーション時間で調整

←やりすぎて、チートの温床に!!

Page 22: Onlinegame entrylevel 201305

• 見てみる

• 自己操作の特別扱い

• 決定論的挙動(矢)

• 自動同期(他PCのジャンプ開始位置)

• 考えられるチート

• 矢

• 自動同期

KAGでの実際https://www.youtube.com/watch?v=bB2167x9Uog

Page 23: Onlinegame entrylevel 201305

1. ジャンルを決める

2. 同じジャンルの参考にするゲームの、ゲームサーバスケールと遅延対策について多くプレイして当たりをつける

3. 最も単純な「対策なし」で実装する

• ゲームサーバは固定数プレフォーク

• 遅延対策はしない

4. 人数・内容を増やしてプレイを重ね、どうしても直さなければならないところに一つづつ対策を入れていく

オンラインゲーム開発の手順

オンラインゲームだからといって、高度なアルゴリズムや工夫を最初から入れようとがんばらないこと!! 時間が足りなくなります。

Page 24: Onlinegame entrylevel 201305

1. 狭義のオンラインゲームの開発では、

2. 独特の問題として、ゲームサーバのスケールと、

3. 遅延によるプレイ感覚の悪化という問題があるが、

4. それはあくまでも問題全体の一部なので、

5. 優先順位を上げ過ぎないように取り組みましょう。

まとめ

Page 25: Onlinegame entrylevel 201305

より詳しくは

「オンラインゲームを支える技術」 We+DB Press, 3024円

http://www.amazon.co.jp/dp/4774145807

Page 26: Onlinegame entrylevel 201305

(おまけ)「同時にプレイできない問題」

• 「マッチング」の問題と呼んでいる

• 一緒にプレイして楽しいかは相手による

• 楽しめる相手を、楽しめるタイミングでマッチさせる方法が未開拓

• ゲームなら、時間帯、性別、年齢、言語、所属するグループを超えたマッチングができるはず。新しいアイデアが待たれている。