Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メタバースにおけるリアルタイム通信入門
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
gree_tech
PRO
October 25, 2022
Technology
1
2.3k
メタバースにおけるリアルタイム通信入門
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
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
3.7k
マネジメントに役立つ Google Cloud
gree_tech
PRO
0
43
今この時代に技術とどう向き合うべきか
gree_tech
PRO
3
2.6k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
300
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
300
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
1
1.7k
あうもんと学ぶGenAIOps
gree_tech
PRO
0
430
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
450
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
320
Other Decks in Technology
See All in Technology
FastMCP OAuth Proxy with Cognito
hironobuiga
3
200
Phase08_クイックウィン実装
overflowinc
0
1.8k
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.4k
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
250
モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction
nazonohito51
6
3.4k
事例から紐解くSHIFT流QA支援 ~大規模プロジェクトの品質管理支援、QA組織立ち上げ~ / 20260320 Nozomu Koketsu
shift_evolve
PRO
0
140
「捨てる」を設計する
kubell_hr
0
250
OpenClawでPM業務を自動化
knishioka
0
110
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
130
BFCacheを活用して無限スクロールのUX を改善した話
apple_yagi
0
120
新規事業×QAの挑戦:不確実性を乗りこなす!フェーズごとに求められるQAの役割変革
hacomono
PRO
0
180
Datadog で実現するセキュリティ対策 ~オブザーバビリティとセキュリティを 一緒にやると何がいいのか~
a2ush
0
140
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
950
Producing Creativity
orderedlist
PRO
348
40k
[SF Ruby Conf 2025] Rails X
palkan
2
860
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Ethics towards AI in product and experience design
skipperchong
2
240
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
780
My Coaching Mixtape
mlcsv
0
86
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
160
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