Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
メタバースにおけるリアルタイム通信入門
gree_tech
PRO
October 25, 2022
Technology
0
400
メタバースにおけるリアルタイム通信入門
GREE Tech Conference 2022で発表された資料です。
https://techcon.gree.jp/2022/session/TrackC-2
gree_tech
PRO
October 25, 2022
Tweet
Share
More Decks by gree_tech
See All by gree_tech
基調講演-サステナブルなチームであるために-
gree_tech
PRO
0
290
クリエイターツール「QUANT」の開発の話 & クライアントに寄り添ったデータ分析基盤の構築
gree_tech
PRO
0
220
爆速で成長するおでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
gree_tech
PRO
0
360
グリーの新卒1年目が半年間働いて感じたグリーのカルチャー 〜新卒でもこんなに任せて貰えるんですか!?〜
gree_tech
PRO
0
360
クラウド - オンプレ間の通信品質向上作戦!〜ネットワーク編〜
gree_tech
PRO
0
200
よくわかる!「データアナリスト」の作り方 〜とある新卒の成長物語〜
gree_tech
PRO
0
420
事業環境の変化に対応するインフラ組織 その取り組みと現状
gree_tech
PRO
0
280
簡単!Slack+GAS+GCPでIT棚卸自動化
gree_tech
PRO
0
260
GREE VR Studio Laboratory - UXDev R&D Summary 2022
gree_tech
PRO
0
680
Other Decks in Technology
See All in Technology
MLOps Workshopでの学びと弥生の研究開発基盤 / takeaways from MLOps workshop and YAYOI's research and development infrastructure
yayoi_dd
0
160
KyvernoとRed Hat ACMを用いたマルチクラスターの一元的なポリシー制御
ry
0
240
Bill One 開発エンジニア 紹介資料
sansantech
PRO
0
130
re:Invent2022 前後の Amazon EventBridge のアップデートを踏まえつつ、情シスの仕事をより楽しくしたい話。 / EventBridge for Information Systems Department
_kensh
2
800
Oracle Cloud Infrastructure:2023年1月度サービス・アップデート
oracle4engineer
PRO
0
180
OPENLOGI Company Profile
hr01
0
13k
スクラムマスターの悩みどころを赤裸々に告白します
nagata03
0
200
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
3
16k
立ち止まっても、寄り道しても / even if I stop, even if I take a detour
katoaz
0
1.1k
re:Inventの完全招待制イベント Building a Roadmap to SaaSについて / Building a Roadmap to SaaS an invitation only event at reinvent
yayoi_dd
0
160
初めてのデータ移行プロジェクトから得た学び
tjmtmmnk
0
420
OCI技術資料 : ロード・バランサー 詳細 / Load Balancer 200
ocise
2
7.2k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
22
43k
Become a Pro
speakerdeck
PRO
6
3.2k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
13
5.4k
BBQ
matthewcrist
75
8.1k
Stop Working from a Prison Cell
hatefulcrawdad
263
18k
Building Flexible Design Systems
yeseniaperezcruz
314
35k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
What's new in Ruby 2.0
geeforr
336
30k
How GitHub (no longer) Works
holman
298
140k
Writing Fast Ruby
sferik
613
58k
A designer walks into a library…
pauljervisheath
199
16k
Transcript
REALITY株式会社 エンジニアマネージャー 髙橋 悠 メタバースにおける リアルタイム通信入門 REALITY株式会社 ソフトウェアエンジニア 古屋 研太
• 所属 • REALITY株式会社 • 担当 • エンジニアマネージャー • 経歴
• 2006年 モバイルゲーム会社、新卒入社 • 2018年 グリー株式会社、中途入社 • 2018年 株式会社Wright Flyer Live Entertainment (現REALITY株式会社)出向 自己紹介 2 髙橋 悠(たかはし ゆたか)
• 所属 • REALITY株式会社 • 担当 • ソフトウェアエンジニア • 経歴
• ゲーム会社に新卒入社 VRチームに所属 • フリーランス (VRアプリやVtuber向けシステム開発など) • 2022年5月にREALITYに入社 自己紹介 3 古屋 研太(ふるや けんた)
XR cloud 事業部について https://reality.inc/products/realityxrcloud/ 4 • REALITY XR cloudとは •
あらゆる仮想空間内で行われる バーチャルイベントを実現するためのクラウドソリューションです 有識者によるコンサルティング、累計1,000万DLのプラットフォーム活用、複雑にカスタ マイズが可能な開発エンジン利用、各社とのパートナーシップ等を活かして、法人様向け のメタバースを実現可能にします REALITY World REALITY Spaces
昨年公開したメタバースのトレーラー動画 https://youtu.be/ktMNqFuW6uQ 5
最初に採用したソリューション 6 • Photon(PUN2) ◦ https://www.photonengine.com/ja-JP/PUN ◦ ドイツのExit Games GmbHが開発・運営している世界中で利用されて
いるネットワークエンジン • 採用理由 ◦ メジャーなマルチプレイヤーエンジンで採用実績も開発情報も豊富にある
最初に採用したソリューション 7 • Vivox ◦ https://unity.com/ja/products/vivox ◦ Unityから提供されているチャットSDK ▪ テキストチャット、ボイスチャットが行える
• 採用理由 ◦ 数多くの大型タイトルで採用されている ◦ 2019年にUnityが買収し、公式が提供するソリューションとなった
Photon(PUN2)で直面した課題 8 • メッセージ数の制約 ◦ 1秒当たり500メッセージまでが推奨されており、やり取りできる情報量が 比較的少ない ◦ ただし、補間をすることはできるのである程度カバーできる •
世代交代 ◦ 2022年3月にPhoton Fusionという新しいソリューションがリリースされ、 PUN2自身はメンテナンスモード(新機能が追加されない)となった Photon Fusionへの切り替えが推奨されている 同時接続数を増やすことが難しい
Vivox で直面した課題 9 • ネットワーク環境 ◦ オフィスなどの堅実なネットワーク環境では使用できないケースがある ◦ バーチャルオフィスを開発する際、個人宅で問題なく動作するがオフィスや VPNに接続した状態では動かなくなるということがあった
◦ ※Photonでも同様の現象は発生するが、使用するプロトコルやポートを 変更することが出来たので比較的容易に対応することが出来る
10 何とかしたい!
11 • 同時接続数 ◦ もっと沢山の人がルームに入れるようにしたい ◦ でもボイスチャットも必要 • VPN等の特殊な接続環境の問題 ◦
Vivoxは別サーバーで設定できることが少ない 最初に採用したソリューションの課題
12 Tickレートを15, 100人同時接続, 座標と回転を※20byte程度として試算 受信 座標 : 15 x 100人
= 0.24Mbps 送信 座標 : 15 x 100人 x 99人 = 24Mbps サーバー側でパケットを理想的に結合したら送信は1/50のパケットにできるが… 移動だけでこれだけ使ってしまっては他になにもできないのでは? 大規模の接続時のデータ試算 アバター座標の同期 100人 24 M bps 200人 (x2) 96 M bps 400人 (x4) 384 M bps ※座標をfloat x 3, 回転を6bitにQuaternionを圧縮
13 従量課金のAWSやGCPの場合 平均100Mbps を24時間 動かす => 約1TB AWSであれば 1日1.5万以上…? 200人程度を捌くコストとして高すぎる…? 転送量制限のあるVPSの場合
低コストでルームサーバーを動かすのであれば検討したい 多くのVPSでは 月の転送量上限が数TB の料金プランが多い 数日動いたら転送量上限に引っかかってしまう… 大規模の接続時のデータ試算 転送量制限や従量課金への影響 単純なデータ送信の仕組みではコスト的にも厳しい
14 PUN2 での限界 • 座標の同期ですらTickレート15でも6人程度で5x6x15=450になってしまう Broadcast処理では結合してくれるかもしれないがそれでも少なすぎる • 更新頻度を落とせば人数を増やせるものの、アクション要素をワールドに入れたくても できなかったり、VRだと低いTickレートでは体験の質がかなり落ちる 秒間パケット数上限
(1ルームあたり約500packet/秒を推奨 ) サーバー側の制御を実装できない • 前述の見積から考えても、サーバー側で送るデータを工夫する必要がある • サーバー側でアバター間の距離に応じてデータを節約するような処理を実装したいが、単純な リレーサーバーやP2P接続では困難 • チート対策とかもやりにくい
15 PUN2 での限界 • ホストに様々な処理が集中してしまう 物理演算、 整合性を取らないといけない判定処理 etc… ホストへの負荷の集中 •
上記のようにホストが正として管理しないといけない実装がある場合、切断時の引継ぎなどは工夫 しないといけない • たとえ引継ぎができたとしても、全員が退出してしまうとルーム内の情報を保持することができない ホストの切断時の対応 / ルーム情報の保持の難しさ
16 単純なリレーサーバーでは限界 独自実装のサーバーが必要そうだがハードルが… • サーバー側の実装が難しそう • 送信データを減らす仕組みが難しそう
17 手軽に使えるネットワークライブラリ FishNet そこで
18 FishNetのメリット • [ServerRpc]などの属性をつけるだけでリモートのメソッドを実行できる • Mono.cecilでC#の中間言語を操作するのでGCやboxingを避けつつパケットを作成できる • uNETと比べて設定できる引数が豊富 コード生成で簡単かつ高速なリモートプロシージャルコールができる •
Linux向けにHeadlessビルドをすればGCPやAWS上でも動かすことができる • C#でサーバー側の実装をそのまま記述したり、sceneのオブジェクト情報をそのまま持てるので物 理演算や当たり判定をサーバー側で簡単に処理できる HeadlessサーバービルドでUnity C#でサーバー実装できる
19 FishNetのメリット • 通信をUDPだけではなくWebsocketなど他のプロトコルに差し替えることができる Transport レイヤーを自由に変更できる • オブジェクトの変数を自動で同期する仕組み • 値の変更時だけでなく、途中接続のクライアントにも自動で同期してくれる
再接続 / 途中接続時の同期が比較的容易 • オブジェクトの距離やsceneを元に送信するデータを制限できる AOI(関心領域システムがある) 詳しくは後述
20 おまけ 手軽なサーバーホスティングサービス • 無料で30分だけ動かせるサーバーをお試しで使える • StoreでダウンロードしEditorWindowからビルドして サーバーにHeadlessビルドをデプロイ可能 • VPSをレンタルするのとそこまで変わらない月額費用で 30分制限なしにサーバーを1台利用できる
GCPやAWSはちょっと分からない人でも サーバークライアント型の通信ゲームを作成できる! PlayFlowCloud https://playflowcloud.com/
21 新しい手法で解決できたこと • AOI機能で離れているプレイヤーやオブジェクトの データ量を大幅に削減できる • 近くの人のアバターは問題なく同期するので コミュニケーションに支障がない 大規模接続時の通信量削減 ワールド全体
パケットを受け 取る範囲 • 設定はNetworkObjectに対して NetworkObserverコンポーネントを設定するのみ (DistanceConditionクラスを参考にカスタマイズするのがお勧め ) [注意点] • 範囲外にいる際にはRPCが呼ばれないので、範囲内に入ったときに状態 を同期できるようにSyncVarなどを活用すること
22 新しい手法で解決できたこと • 音声はDissonance Voice Chatを使用 • FishNet対応するサンプルもあるので対応可能 (一部不具合があるので修正依頼中) •
独自の修正を加えて一定距離離れたクライアントには送信しないことでパケットを節約 • サーバー側で音声の合成はしていない (コミュニケーション目的とする場合、近くの人が同時に喋る というシチュエーションがあまりないためあまり恩恵がない) • FishNetの通信経路をそのまま使用するので、セキュリティの 設定を行いやすい ボイスチャットも可能な大規模接続可能なワールド
23 新しい手法で解決できたこと 全員が切断してもデータを残すことができる仮想空間 • サーバーが情報を保持しているので、適切に実装すれば 全員が退出した後でも空間の情報を同期することができる。 例) 家具の配置, 作成したアイテム etc…
FishNetが ◦ スポーンしたNetworkObject ◦ SyncVar属性をつけた変数 ◦ BufferLast=trueにしたRPCメソッド を接続時に自動で同期してくれるので、容易にワールドの情報を復元することができる
24 デモ • Tickレート 30 • 80クライアント接続 アバター+両手の座標を同期 • 16クライアントが常時発話
25 FishNetのデメリット よくも悪くもサーバーの準備が必要 • メリットがそこまでないならサーバーの準備や管理が必要ないPUN2とかの方が圧倒的に楽 ソースコードの変更があればサーバービルドをデプロイしなおす必要がある • コード生成でRPCを実現しているので、クライアントのRPCで使うメソッドの引数などに変更した場合 はサーバー側のビルドしなおさないと正常に動かない •
そこまでサーバー側の処理が必要ではないクライアント同士の通信部分の変更でもサーバービル ドの作り直しが必要になる • sceneに配置したNetworkObjectがサーバーとクライアントで違うとエラーになる Addressableなどでsceneを更新できるようにするなどの工夫が必要
26 それぞれの通信方式のまとめ リレーサーバー (PUN2 etc…) • 開発段階は無料で手軽に始められる • 基本的にはサーバー実装できない (通信量の削減の工夫に限界がある)
低TickRateで 多くて10~20人 Headless ビルドサーバー (FishNet etc…) • サーバー実装を工夫して より大人数の接続に耐えることができる • 物理演算や当たり判定をサーバーで行える • サーバーの運用が難しい 大規模なワールド向け (ワールド毎に様々な 仕組みを作るのは大変)
27 今後の展望 • 送る/送らないの2段階のAOIではなく、距離に応じて 高TickRate / 低TickRate / 送らない の3段階の送信制御を実装する
• サーバービルドを頻繁にしなくてもいいワークフローの構築 ◦ ワールドの背景はAddressableなどで後で変更可能にする ◦ 簡単な制御はC#コードを書かないで実装可能にする
28