読者です 読者をやめる 読者になる 読者になる

コガネブログ

平日更新を目標にUnityやC#などのゲーム開発アレコレを書いていきます

【第3回クラウドゲーム開発者会議 2015 東京】「シンラテクノロジー 1:N アーキテクチャ」メモ

※メモが正確ではない可能性があります。ご了承ください

自己紹介

  • ファビアン・ニノルズ
  • シンラ・テクノロジー
  • パートナーシップ技術チーム主任

新たな体験

  • シンラテクノロジーの一つの目的として新たな知見を提供したい
    • 1:1
      • シンプルな開発で行える
    • N:N
      • 大人数のプレイヤー
      • 非常に高速なネットワーク環境で大人数のプレイをサポートできるモデル
    • 1:N
      • 双方の中間に位置するモデル
      • 両方の良いとこどり
      • マルチプレイヤー
      • 接続できる人数には上限がある
      • 同期処理が一切いらない
      • 非常に開発が簡単

どれを選ぶか?

  • 1:1
    • 利点: シンプル
    • 欠点: 体験の共有ができない
  • 1:N
    • 利点: 体験の共有が可能
    • 欠点: プレイヤー人数に限界がある
  • N:N
    • 利点: 大人数のプレイヤー
    • 欠点: 同期が複雑

1:N アーキテクチャ

  • 1つのスーパー・ゲームマシーン
    • マルチプレイヤーが一緒にシミュレーション
    • 同一の環境にプレイヤーが存在できる
  • マルチレンディングマシーン
    • それぞれがマルチプレイヤーをレンダリング可能
    • プレイヤーがほぼすべてのデータとコミュニケーションを共有
  • 2015年夏頃にCCDKで使用可能になる予定
    • AI/ゲームプレイ/物理シミュレーションすべてが共有できるモデル

リモートレンダリング

  • ゲームマシンがDirectX11を持つ必要がある
  • 最終的にレンダリングマシンで動画圧縮が行われて配信される
  • この技術を使用することで下記のシェアが可能になる
    • 静的リソース
      • テクスチャ
      • ジオメトリ
    • 動的リソース
      • 地形の変形
      • ナビゲーション・メッシュ
    • 計算
      • スケルタル・アニメーション
      • 粒子の更新

1:N ゲーム用開発

  • お持ちのゲームはすでにリモートレンダリングで動作可能
    • 現在N = 1のゲームでも可能
  • シミュレーションにマルチプレイヤーを追加するだけ
    • マルチ入力コントローラを使用
    • マルチレンダリング・ビューポートに出力
    • サウンドをマルチ・オーディオ機器で再生
  • あとはシンラ・テクノロジーにお任せください

シンラ・テクノロジーAPI

C インターフェイス

namespace Shinra
{
    Event* GetNextEvent();
    DWORD GetPlayerGamepadId(PlayerId);
    IMMDevice* GetPlayerAudioDevice(PlayerId)
    ID3D11DeviceContext* GetPlayerRenderingContext(PlayerId)
}

イベントループのシーケンス

  1. ゲームスタート
  2. 必要なリソースを作成
  3. 新イベントをチェック
    • 新しいプレイヤーが接続されたら
      • ゲームループにプレイヤーを追加
      • プレイヤーのコンテキストにシーンをレンダリング
    • プレイヤーが切断されたら
      • ゲームループからプレイヤーを削除
      • プレイヤーのコンテキストをリリース
  4. いつでも終了またはWM_QUIT

リソースの共有

  • グラフィック・リソース
    • 全リソースはD3Dで作成
    • デバイスを全コンテキストで共有
  • オーディオ・リソース
    • Audio Default Deviceへの出力は全プレイヤーに放送される
    • ブロードキャストが行われる

サード・パーティサポート(近日スタート)

  • AudioKinetic's Wwise
  • EPIC's Unreal Engine
  • その他のサード・パーティサポートは近日発表予定

質疑応答

  • レンダリングマシンが分かれている理由は負荷分散のため?
    • 負荷分散が大きな理由
  • レンダリングマシンが複数あるがリソースの共有はどのように行っている?
  • デザイナーが作成するリソースの最大容量などは何を参考にすればよい?
    • 目安としては弊社で出しているトゥームレイダーなどが参考になる
    • それ以上使いたいときは相談していただければ
    • もしくは検証環境が用意されているのでそちらで確認していただければ
  • 仮想化は使っている?
    • 使っていない
    • プロセスを複数置くイメージ

1:N 実演

デモ

その他のメモ