SlideShare a Scribd company logo
1 of 56
Download to read offline
オンラインゲームの仕組みと⼯工夫
@imai_̲factory
はじめに
•  さいきんゲーム関連の仕事をすることが
多くなったのでオンラインゲームについ
て調べてみた。
•  の、内容を社内勉強会で発表したスライ
ド。
Citations
•  きっかけはこのセガの節政さんのCEDEC
の発表。
– http://www.4gamer.net/games/105/
G010549/20100905002/
– オンラインゲームを4つのタイプにカテゴラ
イズしつつ、それぞれの実装コンセプトを紹
介してくれている。
オンラインゲームの種類
•  完全同期型/キー⼊入⼒力力同期⽅方式
–  格ゲーなど
•  完全同期型/コマンド⼊入⼒力力同期⽅方式
–  RTS(Age  of  Empiresとか)
•  ⾮非同期型/サーバー集中処理理型
–  FPSなど(QuakeとかCounterStrikeとか)
•  ⾮非同期型/クライアント分散処理理型
–  PSU
完全同期型/キー⼊入⼒力力同期⽅方式
•  格ゲーなど
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
PlayerA	
  
PlayerB	
  
完全同期型/キー⼊入⼒力力同期⽅方式
•  格ゲーなど
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
キー	
  
PlayerA	
  
PlayerB	
  
完全同期型/キー⼊入⼒力力同期⽅方式
•  格ゲーなど
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
キー	
  
PlayerA	
  
PlayerB	
  
キー	
  
完全同期型/キー⼊入⼒力力同期⽅方式
•  格ゲーなど
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
キー	
  
PlayerA	
  
PlayerB	
  
キー	
  
双方のデータが届いてからレンダーして次のフレームの処理へ	
  
レンダー	
  
完全同期型/キー⼊入⼒力力同期⽅方式
PlayerA	
  
PlayerB	
  
キー	
  
F1/T1	
   F2/T2	
   F3/T3	
   F4/T4	
   F5/T5	
   F6/T6	
  
•  格ゲーなど
ユーザーがお互いを待ち合わせする必要があるので、レイテンシの⾼高い
ユーザーに⾜足を引っ張られる。なので⼤大きくスケールさせるのは難しい
キー	
  
レンダー	
  
•  あとはこの繰り返し。
•  60fpsの場合、1フレームは16.6666...ms
完全同期型/コマンド⼊入⼒力力同期⽅方式
•  RTSやターンベースのゲーム
さきほどと同様、お互いを待ち合う必要があるが、格ゲーなどと較べて1フレー
ムや1ターンに掛けられる時間が長いケースが多い。特にターンベースなら数
十秒や数分ということも。	
  
PlayerA	
  
PlayerB	
  
コマンド	
  
F1/T1	
   F2/T2	
   F3/T3	
   F4/T4	
   F5/T5	
   F6/T6	
  
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
まずはサーバーからPlayerに世界の状態のSnapshotが配布
されて、それをもとにそれぞれのプレイヤーマシンで画⾯面レンダリング
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
State	
  
render	
  
render	
  
Snapshot	
  
サーバーは⾃自分のペースで次のフレームの世界のスナップショットを作り、
同じように配る
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
同時にプレイヤーも活動を始める。プレイヤーからはコマンドがサーバーに
送られてくる。
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
State	
  
render	
  
render	
  
Snapshot	
  
各プレイヤーのF2で送信されたコマンドは、サーバー上のF3のフレームで
処理理(当たり判定やアイテム取得判定)され、世界のスナップショットに反映され
ふたたびプレイヤーに配られる
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
あとはその繰り返し
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
•  Client、Serverはそれぞれ独立したクロックで動作する	
•  Clientはコマンド送信と画面描画のみを管理し、当たり判定などはサーバー側で行う。	
  
•  なので自分の発行したコマンドの結果はサーバーからの返事をまって見た目上の世界に適用
される。
⾮非同期型/サーバー集中処理理型
•  FPSなど
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
Snapshot	
  
Command	
  
render	
  
Snapshot	
  
render	
  
Snapshot	
  
render	
  
Snapshot	
  
Command	
   Command	
   Command	
  
•  実際には下記のようにレイテンシの高いユーザーがいることが多い。	
  
•  そういったユーザーのから見た世界は、サーバーよりも遅れている。(ラグ)	
State	
  
render	
  
State	
  
render	
  
State	
  
render	
  
State	
  
render	
  
Command	
   Command	
   Command	
   Command	
  
•  PSU
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Snapshot	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
•  Client、Serverはそれぞれ独立したクロックで動作する	
•  Client側でダメージやアイテム取得を判断して、Server側でValida@on	
  
•  サーバー側を待つ処理がより少ないので快適度があがる	
  
⾮非同期型/クライアント分散処理理型
参考 hAp://www.mmorpg.com/gamelist.cfm/game/215/view/forums/thread/104863/PSU-­‐netcode.html	
  
オンラインゲームとネットワーク
•  基本的にオンラインゲームではフレームやターンなど、そのゲーム
の単位時間ごとに各ユーザーの情報をスナップショットとして同期
している。
•  理理論論上、60fpsのゲームなら秒間60回の情報同期をすることに!
(実際にはこれを減らす様々な⼯工夫があることもわかった)
•  考えてみれば確かに当然なのだが、Web屋の⾃自分にとっては結構衝
撃的。
•  ということで、オンラインゲームはネットワークの品質や性能に⼤大
きく依存している。
オンラインゲームとレイテンシ
•  ⾮非同期型のゲームでは、クライアントは
お互いの待ち合わせを⾏行行わない
•  そのためサーバーとの通信レイテンシが
⼤大きいと⾃自分よりも世界のほうが速く進
んでしまう
•  結果として、右の絵のように、画⾯面上に
過去の世界の状態が表⽰示されてしまう
•  ⾒見見た⽬目上の位置に発砲しても実際の位置
は違うので当たらない
https://github.com/rase-‐‑‒/socket.io-‐‑‒workshop-‐‑‒full
レイテンシについての実際の調査
•  Unreal  Tournament  2003
– 3%  packet  loss  and  140ms  latency  at  
maximum
– 75ms以上だとユーザーがラギーに感じる
– 100msを超えると遊びづらくなる
T.	
  Beigbeder,	
  R.	
  Coughlan,	
  C.	
  Lusher,	
  J.	
  PlunkeA,	
  E.	
  Agu,	
  and	
  M.	
  Claypool,	
  “The	
  effects	
  of	
  loss	
  and	
  latency	
  on	
  user	
  performance	
  in	
  
unreal	
  tournament	
  2003,”	
  in	
  Proceedings	
  of	
  the	
  3rd	
  ACM	
  SIGCOMM	
  Workshop	
  on	
  Network	
  and	
  System	
  Support	
  for	
  Games,	
  ACM,	
  
Portland,	
  Ore,	
  USA,	
  2004.	
  
•  FIFA  soccer
– 150msを超えるとゲームが成り⽴立立たない
– 実際の平均レイテンシは118ms
レイテンシについての実際の調査
M.	
  Dick,	
  O.	
  Wellnitz,	
  and	
  L.	
  Wolf,	
  “Analysis	
  of	
  factors	
  affec@ng	
  players’	
  performance	
  and	
  percep@on	
  in	
  mul@player	
  games,”	
  in	
  
Proceedings	
  of	
  the	
  4th	
  ACM	
  SIGCOMM	
  Workshop	
  on	
  Network	
  and	
  System	
  Support	
  for	
  Games,	
  ACM,	
  Hawthorne,	
  NY,	
  USA,	
  2005.	
  	
  
	
  
•  Warcraft  III
– 平均RTTで100ms
– 500msくらいまでならゲーム可能
– 800msを超えるとゲームが成り⽴立立たない
レイテンシについての実際の調査
N.	
  Sheldon,	
  E.	
  Girard,	
  S.	
  Borg,	
  M.	
  Claypool,	
  and	
  E.	
  Agu,	
  “The	
  effect	
  of	
  latency	
  on	
  user	
  
performance	
  in	
  Warcrab	
  III,”	
  in	
  Proceedings	
  of	
  the	
  2nd	
  Workshop	
  on	
  Network	
  and	
  System	
  
Support	
  for	
  Games,	
  ACM,	
  Redwood	
  City,	
  Calif,	
  USA,	
  2003.	
  
•  A  racing  game
–  レイテンシが50msを超えるとラップタイムが落落ち
始める
–  だが上級者なら150msくらいまで影響を受けない
–  50ms以下のレイテンシはユーザーに気づかれない
–  200msを超えると明らかにラギーに感じる
–  500msになるとゲームが成り⽴立立たない
レイテンシについての実際の調査
L.	
  Pantel	
  and	
  L.	
  C.	
  Wolf,	
  “On	
  the	
  impact	
  of	
  delay	
  on	
  real-­‐@me	
  mul@player	
  games,”	
  in	
  Proceedings	
  of	
  the	
  12th	
  
Interna@onal	
  Workshop	
  on	
  Network	
  and	
  Opera@ng	
  Systems	
  Support	
  for	
  Digital	
  Audio	
  and	
  Video,	
  ACM,	
  
Miami,	
  Fla,	
  USA,	
  2002.	
  
•  Shen  Zhou  Online(MMORPG)
– 150ms以下のレイテンシにおける平均プレイ
時間は4時間  
– 250msだと平均1時間
レイテンシについての実際の調査
	
  
K.-­‐T.	
  Chen,	
  P.	
  Huang,	
  and	
  C.-­‐L.	
  Lei,	
  “How	
  sensi@ve	
  are	
  online	
  gamers	
  to	
  
network	
  quality?”	
  Communica@ons	
  of	
  the	
  ACM,	
  vol.	
  49,	
  no.	
  11,	
  pp.	
  
34–38,	
  2006.	
  
•  Half-‐‑‒Life(FPS)
– 50msを超えると結構つらい
レイテンシについての実際の調査
T.	
  Henderson	
  and	
  S.	
  Bhah,	
  “Networked	
  games—a	
  QoS-­‐	
  sensi@ve	
  applica@on	
  for	
  QoS-­‐insensi@ve	
  users?”	
  in	
  
Proceedings	
  of	
  the	
  ACM	
  SIGCOMM	
  Workshop	
  on	
  Revisi@ng	
  IP	
  QoS:	
  What	
  Have	
  We	
  Learned,	
  Why	
  Do	
  We	
  
Care?	
  pp.	
  141–147,	
  ACM,	
  Karlsruhe,	
  Germany,	
  2003.	
  
•  Madden  NFL  Football
– 500msくらいまでならユーザーは気づかない
– 750msになるとラギーだと思われ始める
レイテンシについての実際の調査
J.	
  Nichols	
  and	
  M.	
  Claypool,	
  “The	
  effects	
  of	
  latency	
  on	
  online	
  Madden	
  NFL	
  football,”	
  in	
  Proceedings	
  of	
  the	
  
14th	
  Interna@onal	
  Workshop	
  on	
  Network	
  and	
  Opera@ng	
  System	
  Support	
  for	
  Digital	
  Audio	
  and	
  Video,	
  pp.	
  
146–151,	
  ACM,	
  Cork,	
  Ireland,	
  2004.	
  
ここで⾒見見てきたように、ゲームのジャンル
や特性によって許容可能なレイテンシやラ
グは全く異異なる。
レイテンシについての実際の調査
レイテンシとパケットロス
•  もちろんレイテンシだけでなくパケットロス率率率も重要な要素。
•  しかし、レイテンシにシビアなゲームではTCPではなくUDP
が利利⽤用されることが多い。
•  TCPによる再送されたパケットが届いても既に古くて使い物
にならないため。
•  このあと解説するQUAKEでは、UDPを使いつつ、過去32フ
レーム分のデータを毎回送ることでパケットロスへの耐性を
上げている。
QUAKE
QUAKEについて
QUAKEがオープンソースになっていることを思い出し
たので調べてみた。コードを読む根性はなかったので、
QUAKE  3  SOURCE  CODE  REVIEW:  ARCHITECTURE
を参考に下記をまとめた。マジ感謝。
•  アーキテクチャと動作フロー
•  ネットワークについての⼯工夫
•  予測
Architecture  Overview
Client	
  A	
  
Client	
  B	
  
Server	
  
Command	
  
Command	
  
Game	
  status	
  for	
  A	
  
Game	
  status	
  for	
  B	
  
アーキテクチャ
サーバーはクライアントに毎フレーム下記の情報を送る
•  他のプレイヤーの位置と加速度度
•  再⽣生すべき⾳音声やエフェクト
•  これらをまとめてスナップショット(ゲーム世界のある瞬間
のスナップショット)と呼ぶ
クライアントも毎フレーム下記の情報をサーバーに送る
•  タイムスタンプ
•  ⾒見見ている⽅方向(ピッチ、ヨー、ロール)
•  押されているボタン
•  装備している武器のコード
•  加速度度
サーバーからクライアントに送信されるス
ナップショットのイメージ
{
time:  T
players:  [
{  player:  B,  position:  {..},  velocity:  {...},  
    life:...,},
{  player:  C,  position...},
...  
],
...
}
動作フロー
サーバーサイドの動作フロー
•  クライアントからコマンドを受け付けゲームエンジンに渡す
•  50msごとにフレームの描画命令令をゲームエンジンに発⾏行行。
•  そのフレームの情報をクライアントに送信する
クライアントサイドの動作フロー
•  アクティブなフレームの描画命令令を発⾏行行
•  サーバーからあたらしいスナップショットが届いていないかを確
認。届いていたらそのスナップショットを最新のものとして次に
処理理するように設定。
•  クライアントは最新のスナップショット、ローカルプレイヤーの
コマンド、そこから導きだされる必要な未来予測をもとに画⾯面を
描画。
動作フロー
Server	
  
Net	
  
Channel	
  
Render	
  
Engine	
  
Controller	
   Predic@on	
  
Net	
  
Channel	
  
Client	
  
Render!	
  
Snapshot	
   Snapshot	
  
Predic@on	
  from	
  
snapshot	
  
Command	
  
動作フロー
•  サーバーのスナップショット送信は50msごと
•  そのあいだの動きはクライアント側で予測(Prediction)して補完
PlayerA	
  
PlayerB	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
Server	
  
F1	
   F2	
   F3	
   F4	
   F5	
   F6	
  
F1	
  
State	
  
F2	
   F3	
   F4	
   F5	
   F6	
  
State	
  
render	
  
render	
  
Snapshot	
  
State	
  
render	
  
render	
  
Command	
  
Command	
  
render	
  
render	
  
State	
  
render	
  
render	
  
Snapshot	
  
render	
  
render	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
Command	
  
この間はクライアント側で予測補完	
  
ネットワークについての⼯工夫
[
{
time:  T
players:  [...]
},
{
time:  ...
players:  [...]
},
{
time:  T-‐‑‒31
players:  [...]
},
]
サーバーは最大で過去32フ
レーム分のスナップショットを
送信する
これによりパケットロス耐性を
実現している
Latest	
  
Latest	
  -­‐...	
  
Latest	
  -­‐31	
  
ネットワークについての⼯工夫
Server	
  
Player	
  A	
  
Master	
  snapshot	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
最初のスナップショットを送信	
  
ネットワークについての⼯工夫
Server	
  
Player	
  A	
  
Master	
  snapshot	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=E,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
Ack	
  
Player	
  AがAck	
  
Player	
  Bが移動	
  
ネットワークについての⼯工夫
Server	
  
Player	
  A	
  
Master	
  snapshot	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=H	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
Ack	
  
Snapshot2	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=E,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
?	
  
次のフレームのスナップショットを送るが、Ackされない	
  
マスターのSnapshotは	
  
常に進んで行く	
  
ネットワークについての⼯工夫
Server	
  
Player	
  A	
  
Master	
  snapshot	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=H	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
Ack	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
?	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=E,	
  
	
  pos[2]=C,	
  
	
  health=H	
  
次の送信時には、Ackされていないところから	
  
最新のフレームまで送信	
  
ネットワークについての⼯工夫
Server	
  
Player	
  A	
  
Master	
  snapshot	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=H	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
Ack	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=A,	
  	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  health=D	
  
?	
  
Snapshot1	
  
Player	
  B:	
  
	
  pos[0]=0,	
  	
  
	
  pos[1]=+2,	
  
	
  pos[2]=0,	
  
	
  health=-­‐2	
  
更にデータサイズを小さくするため、前のフレームから
の差分を取るデルタ圧縮方式を利用している	
  
Pre-‐‑‒fragmentation
•  UDPは65,507バイトのペイロードを伝送可能だ
が、QUAKEがのNet  Channelというプロトコルで
は1つの意味のあるやりとりを1400バイト以内で
伝えられるようにしている。
•  これは⼀一般的なMTUである1500バイト以内にパ
ケットサイズを抑えることでフラグメンテーショ
ンを回避し、意味のあるやりとりの完遂率率率をあげ
るための⼯工夫。
ネットワークへのゲーム仕様の依存?
•  ここまでのネットワーク周りの⼯工夫を⾒見見
る限り下記のことが⾔言える気がする。
•  「1パケットにどれだけのユーザーの情報
を詰め込めるのか?」というところに、
そのゲームのフレームレートや同時プレ
イ可能⼈人数が依存している・・!
さらにネットワーク依存を軽減する:  
Prediction
•  60fpsのゲームを実現しようとした場合、すべてのフレーム
を実データで描画しようとした場合、サーバーからクライア
ントに秒間60個のスナップショットを遅滞なく届ける必要が
ある。
•  しかしこれは膨⼤大なネットワークリソースを必要とするうえ、
パケットロスやレイテンシに⾮非常に脆弱になる。
•  これを解決するために、実際には秒間10個〜~20個のスナップ
ショットを送るにとどめ、残りはクライアント側でスナップ
ショットからの予測(Prediction)を使って画⾯面を描画すると
いう⼯工夫がなされている。
Player	
  B	
  
最新のスナップショット	
  
Player	
  B:	
  
	
  pos[0]=A,	
  
	
  pos[1]=B,	
  
	
  pos[2]=C,	
  
	
  velocity=...	
  
	
  
次のスナップショットの予測	
  
Player	
  B:	
  
	
  pos[0]=A’,	
  
	
  pos[1]=B’,	
  
	
  pos[2]=C’,	
  
	
  velocity=...	
  
Player	
  B	
  
Player	
  B	
  
次のスナップショットが
到着するまでの間の
Player  Bの予測はクライ
アント側で予測して描画
する
さらにネットワーク依存を軽減する:  
Prediction
•  予測が⼤大きく外れると、次のスナップショットが到着
したときにユーザーの位置が⼤大きく修正される。⾒見見た
⽬目上、当該ユーザーがワープしたように⾒見見える。
•  ⾼高速度度での移動中における急激な⽅方向転換などを⾏行行う
とこういうことが起きやすい。
•  ゲームによっては、急激な⽅方向転換を許容しない(た
とえば物理理法則にしたがった⽅方向転換を強制する)こ
とによってこういった事象を防ぐ⼯工夫をしている
さらにネットワーク依存を軽減する:  
Prediction
さらに
⼿手元でFPSを動かしてみる
•  node学園2014で、socket.ioでFPS
を動かすワークショップがあったの
で⼿手元で動かしてみた。
•  実装を⾒見見てみると、やはりQUAKE
と同じようにフレームごとのスナッ
プショットをクライアントに送信し、
それをもとにフレーム描画を⾏行行うよ
うになっていた。
•  WebGLとThree.js、すげー!
https://github.com/rase-‐‑‒/socket.io-‐‑‒workshop-‐‑‒full
⼿手元でFPSを動かしてみる
•  データストアとしてRedisを採⽤用し
ており、プレイヤーのライフなどを
格納している
•  データの更更新はダメージを受けた時
やライフを失ったときなど、⼤大きな
イベントが発⽣生したときのみ⾏行行われ
るようになっている。
•  FPSでのデータベースの利利⽤用の例例と
して⾮非常に参考になる。
https://github.com/rase-‐‑‒/socket.io-‐‑‒workshop-‐‑‒full
まとめ
まとめ
•  オンラインゲームでは、ユーザー間、クライアント間でゲー
ムのステータス(お互いの位置やライフなど)をいかに遅滞
なく同期してやるのか、というのが⾮非常に重要。
•  インターネットという信頼性の低いネットワーク上でこれを
実現するためにいろいろな⼯工夫がなされてきている。
•  FQUAKEがオープンソースになっているのが⾮非常にエポック
メイキングなできごとだったようで、それ以降降のアクション
系のゲームはみなこれを多かれ少なかれ参考にしている。
ここからさきは?
他にも
•  今回はおもにネットワークとレイテンシの話にフォーカスを
絞ったが・・・
•  Predictionの話は、それだけで多数論論⽂文が⾒見見つかる感じで、
オンラインゲームのなかでも⾮非常に重要で注⽬目度度の⾼高いト
ピックらしい。
•  分散システム好きとしては、多数のクライアントから⾶飛んで
きたコマンドの衝突の解決や⼀一貫性の保ち⽅方なども⾮非常に興
味深い分野だと思う。今回ちょっと⾒見見かけた感じだと、ベク
タークロックみたいな⽅方式を使ってひとつを取るパターンや、
平均値をとるパターンなど、いろいろやりかたがあるっぽい。

More Related Content

What's hot

Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnity Technologies Japan K.K.
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装Koji Morikawa
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~torisoup
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOGame Tools & Middleware Forum
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介torisoup
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解したtorisoup
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]DeNA
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 

What's hot (20)

Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 

Viewers also liked

[CEDEC2012]ネットワークゲームの不正行為と対策
[CEDEC2012]ネットワークゲームの不正行為と対策[CEDEC2012]ネットワークゲームの不正行為と対策
[CEDEC2012]ネットワークゲームの不正行為と対策gree_tech
 
究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”Ryosuke Otsuya
 
はじめてのWebRTC/ORTC
はじめてのWebRTC/ORTCはじめてのWebRTC/ORTC
はじめてのWebRTC/ORTCYusuke Naka
 
究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!Ryosuke Otsuya
 
わかりやすいパターン認識_3章
わかりやすいパターン認識_3章わかりやすいパターン認識_3章
わかりやすいパターン認識_3章weda654
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちはYoshio Hanawa
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏Yusuke Hirao
 
運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうかMasahito Zembutsu
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 Ken'ichi Matsui
 
MySQLテーブル設計入門
MySQLテーブル設計入門MySQLテーブル設計入門
MySQLテーブル設計入門yoku0825
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門Taketo Sano
 
ウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれからウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれからHiroshi Kawada
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門樽八 仲川
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側Takeshi HASEGAWA
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説Livesense Inc.
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術Noriaki Kadota
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向shigeki_ohtsu
 

Viewers also liked (20)

[CEDEC2012]ネットワークゲームの不正行為と対策
[CEDEC2012]ネットワークゲームの不正行為と対策[CEDEC2012]ネットワークゲームの不正行為と対策
[CEDEC2012]ネットワークゲームの不正行為と対策
 
究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”
 
はじめてのWebRTC/ORTC
はじめてのWebRTC/ORTCはじめてのWebRTC/ORTC
はじめてのWebRTC/ORTC
 
究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!究極のゲーム用通信プロトコルを探せ!
究極のゲーム用通信プロトコルを探せ!
 
わかりやすいパターン認識_3章
わかりやすいパターン認識_3章わかりやすいパターン認識_3章
わかりやすいパターン認識_3章
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
 
運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
MySQLテーブル設計入門
MySQLテーブル設計入門MySQLテーブル設計入門
MySQLテーブル設計入門
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門
 
ウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれからウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれから
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
 

Similar to オンラインゲームの仕組みと工夫

L4d2_serverside_analyze
L4d2_serverside_analyzeL4d2_serverside_analyze
L4d2_serverside_analyzehogemaru_
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議Shinra_Technologies
 
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!UnityTechnologiesJapan002
 
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!UnityTechnologiesJapan002
 
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろうサーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろうDaisuke Masubuchi
 
elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバHidetaka Kojo
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方dena_study
 
The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -kirin_gumi
 
OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向gree_tech
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...エピック・ゲームズ・ジャパン Epic Games Japan
 
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用Rescale Japan株式会社
 
Robovie Maker2éêàµê‡ñæèë
Robovie Maker2éêàµê‡ñæèëRobovie Maker2éêàµê‡ñæèë
Robovie Maker2éêàµê‡ñæèëguesta33ba0
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
iPhoneでリアルタイムマルチプレイを実現!Photon Network EngineiPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
iPhoneでリアルタイムマルチプレイを実現!Photon Network EngineGMO GlobalSign Holdings K.K.
 
さくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみたさくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみたSAKURA Internet Inc.
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 

Similar to オンラインゲームの仕組みと工夫 (20)

L4d2_serverside_analyze
L4d2_serverside_analyzeL4d2_serverside_analyze
L4d2_serverside_analyze
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
 
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
 
Photon Webhooks & IPv6対応の最新情報
Photon Webhooks & IPv6対応の最新情報Photon Webhooks & IPv6対応の最新情報
Photon Webhooks & IPv6対応の最新情報
 
Online MultiPlay Game Design
Online MultiPlay Game DesignOnline MultiPlay Game Design
Online MultiPlay Game Design
 
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
【Unite Tokyo 2019】「禍つヴァールハイト」Timelineだから可能だった!モバイルに最適化されたリアルタイム3D演出!
 
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろうサーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
 
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
 
elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバ
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方
 
The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -The Art of Network Protocols - RIP編 -
The Art of Network Protocols - RIP編 -
 
OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向
 
Cedec2013 photon network engine
Cedec2013 photon network engineCedec2013 photon network engine
Cedec2013 photon network engine
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
 
Robovie Maker2éêàµê‡ñæèë
Robovie Maker2éêàµê‡ñæèëRobovie Maker2éêàµê‡ñæèë
Robovie Maker2éêàµê‡ñæèë
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
iPhoneでリアルタイムマルチプレイを実現!Photon Network EngineiPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
 
さくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみたさくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみた
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 

More from Yuta Imai

Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no InternetNode-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no InternetYuta Imai
 
HDP2.5 Updates
HDP2.5 UpdatesHDP2.5 Updates
HDP2.5 UpdatesYuta Imai
 
Deep Learning On Apache Spark
Deep Learning On Apache SparkDeep Learning On Apache Spark
Deep Learning On Apache SparkYuta Imai
 
Hadoop in adtech
Hadoop in adtechHadoop in adtech
Hadoop in adtechYuta Imai
 
Hadoop/Spark セルフサービス系の事例まとめ
Hadoop/Spark セルフサービス系の事例まとめHadoop/Spark セルフサービス系の事例まとめ
Hadoop/Spark セルフサービス系の事例まとめYuta Imai
 
IoTアプリケーションで利用するApache NiFi
IoTアプリケーションで利用するApache NiFiIoTアプリケーションで利用するApache NiFi
IoTアプリケーションで利用するApache NiFiYuta Imai
 
OLAP options on Hadoop
OLAP options on HadoopOLAP options on Hadoop
OLAP options on HadoopYuta Imai
 
Apache ambari
Apache ambariApache ambari
Apache ambariYuta Imai
 
Spark at Scale
Spark at ScaleSpark at Scale
Spark at ScaleYuta Imai
 
Dynamic Resource Allocation in Apache Spark
Dynamic Resource Allocation in Apache SparkDynamic Resource Allocation in Apache Spark
Dynamic Resource Allocation in Apache SparkYuta Imai
 
Apache Hiveの今とこれから - 2016
Apache Hiveの今とこれから - 2016Apache Hiveの今とこれから - 2016
Apache Hiveの今とこれから - 2016Yuta Imai
 
Hadoop最新事情とHortonworks Data Platform
Hadoop最新事情とHortonworks Data PlatformHadoop最新事情とHortonworks Data Platform
Hadoop最新事情とHortonworks Data PlatformYuta Imai
 
Benchmark and Metrics
Benchmark and MetricsBenchmark and Metrics
Benchmark and MetricsYuta Imai
 
Hadoop and Kerberos
Hadoop and KerberosHadoop and Kerberos
Hadoop and KerberosYuta Imai
 
Spark Streaming + Amazon Kinesis
Spark Streaming + Amazon KinesisSpark Streaming + Amazon Kinesis
Spark Streaming + Amazon KinesisYuta Imai
 
Amazon Machine Learning
Amazon Machine LearningAmazon Machine Learning
Amazon Machine LearningYuta Imai
 
Global Gaming On AWS
Global Gaming On AWSGlobal Gaming On AWS
Global Gaming On AWSYuta Imai
 
Digital marketing on AWS
Digital marketing on AWSDigital marketing on AWS
Digital marketing on AWSYuta Imai
 
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-Yuta Imai
 
クラウドネイティブなアーキテクチャでサクサク解析
クラウドネイティブなアーキテクチャでサクサク解析クラウドネイティブなアーキテクチャでサクサク解析
クラウドネイティブなアーキテクチャでサクサク解析Yuta Imai
 

More from Yuta Imai (20)

Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no InternetNode-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
Node-RED on device to Apache NiFi on cloud, via SORACOM Canal, with no Internet
 
HDP2.5 Updates
HDP2.5 UpdatesHDP2.5 Updates
HDP2.5 Updates
 
Deep Learning On Apache Spark
Deep Learning On Apache SparkDeep Learning On Apache Spark
Deep Learning On Apache Spark
 
Hadoop in adtech
Hadoop in adtechHadoop in adtech
Hadoop in adtech
 
Hadoop/Spark セルフサービス系の事例まとめ
Hadoop/Spark セルフサービス系の事例まとめHadoop/Spark セルフサービス系の事例まとめ
Hadoop/Spark セルフサービス系の事例まとめ
 
IoTアプリケーションで利用するApache NiFi
IoTアプリケーションで利用するApache NiFiIoTアプリケーションで利用するApache NiFi
IoTアプリケーションで利用するApache NiFi
 
OLAP options on Hadoop
OLAP options on HadoopOLAP options on Hadoop
OLAP options on Hadoop
 
Apache ambari
Apache ambariApache ambari
Apache ambari
 
Spark at Scale
Spark at ScaleSpark at Scale
Spark at Scale
 
Dynamic Resource Allocation in Apache Spark
Dynamic Resource Allocation in Apache SparkDynamic Resource Allocation in Apache Spark
Dynamic Resource Allocation in Apache Spark
 
Apache Hiveの今とこれから - 2016
Apache Hiveの今とこれから - 2016Apache Hiveの今とこれから - 2016
Apache Hiveの今とこれから - 2016
 
Hadoop最新事情とHortonworks Data Platform
Hadoop最新事情とHortonworks Data PlatformHadoop最新事情とHortonworks Data Platform
Hadoop最新事情とHortonworks Data Platform
 
Benchmark and Metrics
Benchmark and MetricsBenchmark and Metrics
Benchmark and Metrics
 
Hadoop and Kerberos
Hadoop and KerberosHadoop and Kerberos
Hadoop and Kerberos
 
Spark Streaming + Amazon Kinesis
Spark Streaming + Amazon KinesisSpark Streaming + Amazon Kinesis
Spark Streaming + Amazon Kinesis
 
Amazon Machine Learning
Amazon Machine LearningAmazon Machine Learning
Amazon Machine Learning
 
Global Gaming On AWS
Global Gaming On AWSGlobal Gaming On AWS
Global Gaming On AWS
 
Digital marketing on AWS
Digital marketing on AWSDigital marketing on AWS
Digital marketing on AWS
 
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
 
クラウドネイティブなアーキテクチャでサクサク解析
クラウドネイティブなアーキテクチャでサクサク解析クラウドネイティブなアーキテクチャでサクサク解析
クラウドネイティブなアーキテクチャでサクサク解析
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

オンラインゲームの仕組みと工夫