おもちゃバコ

中身スカスカ♡

「オンラインゲームを支える技術-壮大なプレイ空間の舞台裏-」を読んだ

こんにちはちみつ

「オンラインゲームを支える技術-壮大なプレイ空間の舞台裏-」を読んだ感想です.


Amazon


内容

オンラインゲーム開発の技術について,ネットワークの歴史や次世代プラットフォーム,ソケット通信などを一通り解説してます.

技術だけでなく,チート業者の目的やその対策,ハードウェアの歴史を踏まえたネットワークプログラミングについてなど,ネットワークを扱うゲームについて色々な視点から解説されているため,ネットワーク関連の業務に携わる人なら楽しく読み進められると思います.

対象

・オンラインゲーム開発を行う新人さん
・ネットワークプログラミングに興味のある人
ゲームプログラマ

個人的な感想ですが,ネットワーク関連について結構深いところに踏み込んでいるため,ネットワーク関連の書籍としては入門書と専門書の間ぐらいの内容だと思います.

ネットワークについてそこそこの知識が必要になると感じました.


要約

第0章 [速習]オンラインゲームプログラミング

ネットワークプログラミングの基礎

・インターネットプログラミングの歴史について
 TCPRFCなど.
TCPUDP
 送受信の順番・正確性を保証: TCP
 ↑が必要ないとき: UDP
・オンラインゲームではUDP
 基本はUDPで必要な時にTCP
・レイヤ5(OSI)以上はゲームごとに実装
・「UNIXネットワークプログラミング」はイイゾ
・オンラインゲームではコネクション指向のTCPを使用

ソケットプログラミング入門

・ソケットAPI
 ECHOサーバ
・同期的な呼び出しにはスレッドを使用
・オンラインゲームではC/C++が主流
 次いでJavaなど
 軽量言語としてlua, squirrelなどがある
・サーバの効率化
 C/C++は開発コストが高いのでGCがるC#Javaが使いたい.
 -> 開発サイクルは改善するが性能を犠牲に...
JavaC言語
 100MBのファイルを読むとき,Javaシステムコール前後で例外処理などを行う.
 Cのほうが約10倍ぐらい早い.

RPCの攻略

RPC: 通信に関する細かい面倒をラップし,通常の関数呼び出しと同様にホストと通信できる仕組み.
UDPの使用目的
 到達速度>信頼性の時
  FPSなど
 NATトラバーサル機能を実装する

ゲームプログラミングの基礎

・インベーダゲーム
 初期化,無限ループ,Sprite,描画
・タスクシステム
 「ミサイル1つを1フレーム進める」など,細かい単位の処理を1つの関数として定義し,ミサイル数だけ1フレーム内に順番に全て呼び出す.
・ゲームプログラミングとネットワークプログラミングの違い
 ネットワーク:全ソケットに対してselect()でポーリングし,コールバック関数を呼び出して少しずつ動作.
 ゲーム:すべての可動物に対して舞フレームポーリングし,コールバック関数を呼び出して少しずつ動作.

開発効率とプラットフォーム間の移植性の確保

・要望
 本番サーバはLinux,開発環境はWindows(VS)で開発
 サーバとクライアントで衝突判定など,同じ処理コードを使用したい
  ・C/C++/Javaの選択.
  ・ラッパでソースレベルで互換性を保つ
・ラッパの仕事
 メモリ管理:mallocは全システムで使用可能なので比較的簡単.
 ソケットAPI:WindowとUNIXではAPI仕様が違うので一通りラップする.
 スレッド:pthreadなど
 シグナル:移植性の低い方法なのでお勧めしない.
 イベント・タイマ:libeventで楽にラップ可能.
POSIX標準に近いインタフェースになるようラップすると全体の作業量が減り,楽.

オンラインゲームの歴史と進化

オンラインゲームの技術史

・1983年
 P2Pタイプのネットワーク対戦ゲームSnipesが登場
 NESのマリオやゼルダが出たころ
・1989年
 CERNにおいて,HTMLと世界初のブラウザWorldWideWebが開発される.
 1989年後半でインターネット接続ホストは約30万台.
・1990年
 SNESメガドライブ用に電話回線を使用するネットワーク対戦ゲームXBANDが登場.
  帯域速度・パケット遅延の影響で失敗に終わる.
 MMORPGでは「Meridian50」が成功.
・2000年代前半
 FF,信長の野望など,有名タイトルがオンライン化.
 NTTドコモiアプリ以降,携帯電話でもオンラインゲームが普及したがパケット代金が社会問題化した.
・2000年後半
 WebブラウザベースのMMOGの成功.
 World of Warcraftが1人用ゲームデザインで約1200万人以上の大ヒット.
 マシン性能向上によるトランザクション処理の高速化などにより課金モデルが進化.
 WiiPS3, Xbox360など,LAN接続機能が標準搭載される.

技術遍歴から見えてくるゲーム文化/経済圏

・文化圏
 ハッカー,コンソル・アーケードビジネス,Microsoftの3つの文化圏が生まれる.
 日本の会社は,自身の知識やソースコードを公開することに消極的でないため,技術レベルが衰退してしまいそう.
  CEDECの誕生.

Column

・売れるオンラインゲームプログラマの条件
 1.ゲームが好き
 2.プログラミング・実作業が好き

オンラインゲームとは何か?

「オンラインゲーム」の用語の定義

・物理的な側面
 コンピュータ
  クライアント機器:PC,家庭用ゲーム機,携帯電話,PDAなど
  サーバ機器:データセンタにあるサーバ
  ロードバランサ
 ネットワーク
  インターネットプロトコル
  ローカルエリアの物理ネットワーク:RS-232,MIDI,USBなど

オンラインゲームの概念的な側面

・概念的な側面
 ゲームプレイの基本
  認知・判断・操作の繰り返し.
 ゲームの進行
  同じゲーム進行を共有する.

オンラインゲームのビジネスとしての側面

・ビジネス的な側面
 おもしろくしたい,素早く・安く完成したい,長く・安く運営したいなど
 テストプレイヤを効果的に集めたい
  オフラインゲームよりデバッグが難しい.
  オープンベータテスト
 頻繁に更新したい
  定期パッチ,大規模パッチ,緊急メンテなど
 攻撃者を安く・素早く・確実に排除したい
  RMT業者,botの排除など
・オンラインゲームを支える技術の大区分
 C/S型とP2P
 MMO型とMO型
・ゲーム本体を支える3つの軸
 データ形式,通信形式,反応速度(レイテンシ)

開発コストを左右する技術的ポイント

データ形式
 disposable: ゲーム内容を毎回初期化して捨てる
  MO型
 persistent: ゲーム内容が永続的にサーバ側に存在
  MMO型
・通信形式
 P2P: 中央サーバが存在しない端末間直接通信方式
 C/S: クライアント・サーバ間のみ通信するスター型通信方式
・反応速度
 ゲームサイクルに大きくかかわる.
 特に,認知と認知の間の時間0.0167秒(1フレーム)を意識すること.
・ネットワーク遅延の3パターン
 25m: 格ゲーなど
 100m: FPSやストラテジーなど
 300m: MMORPGなど

オンラインゲームのアーキテクチャ

ゲームプログラムの特性

NESとCPUサイクル
PS3とCPUサイクル

オンラインゲーム特有の要素

・避けられない遅延
・通信帯域
 C/S MMO: 10kbps~100kbps
 P2P MO: 30kbps~300kbps
・チートはなぜ行われるのか
 RMTで儲かるから
 利益=チートの価値ーチート開発のコスト
・チートの内訳
 メモリハック,パケットハック,データファイルハック,DLLハック,タイマハック,UIハックなど
 チートでないがダメなもの:規約違反,バグの不正利用,サーバに過負荷など
ノイマン型コンピュータの宿命
 チートと対策のいたちごっこノイマン型(プログラム内蔵方式)のコンピュータである限り永遠に続く.

[実践]C/S MMOゲーム開発

実際のゲームを題材としたゲーム開発について.

[実践]P2P MOゲーム開発

実際のゲームを題材としたゲーム開発について.

オンラインゲームの補助的システム

負荷テストなど.

オンラインゲームの開発体制

ソースコードの規模
・プロジェクトの保守

感想

読み始める前はオンラインゲームの技術について簡単に解説されているぐらいの認識でしたが,読んでみると結構ガッツリと技術解説されていて面白かったです.

まだ薄っすらとしか理解できていないので,ネットワークプログラミングについて勉強してからもう一度読みたいと思います.