Upgrade to Pro — share decks privately, control downloads, hide ads and more …

"人がいるメタバース" を実現するREALITYのワールド機能

gree_tech
October 25, 2022

"人がいるメタバース" を実現するREALITYのワールド機能

GREE Tech Conference 2022で発表された資料です。
https://techcon.gree.jp/2022/session/TrackC-4

gree_tech

October 25, 2022
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. その他機能 • テーマ機能 ◦ 同じワールドで見た目が変わる • アニメーション同期機能 ◦ オブジェクトのアニメーション再生時間を同期する •

    オブジェクト状態同期機能 ◦ オブジェクトの任意のデータを同期する • SE再生機能 ◦ 特定のタイミングでSEを再生する機能 18

  2. ワールドの登場人物(ロール) • オーナー ◦ ワールドを起動した配信者 • コラボゲスト ◦ 配信にコラボゲストとして参加しているユーザー •

    ビジター ◦ 視聴者の内、ワールドに参加しているユーザー ◦ 早い者勝ちで視聴者がワールド内視聴者になる • 視聴者 ◦ ワールドには参加せず視聴だけしているユーザー 26

  3. ワールドの登場人物(ロール) • オーナー • コラボゲスト • ビジター • 視聴者 27


    ワールド内にアバターが出現して 動き回れるユーザー 全てをまとめてメンバーと呼ぶ 合計で8人まで
  4. ワールドの登場人物(ロール) • オーナー • コラボゲスト • ビジター • 視聴者 28


    配信を見ているだけのユーザー ワールドにアバターが登場せず オーナーと同じ視点になる
  5. ステート更新パターン ワールドのメッセージング • オーナーのアプリが落ちた場 合 ◦ サーバーに再接続時にサー バーからステートが送信される 45
 オーナー

    ステート:B メンバー ステート:B MultiGameServer ステート:B メンバー ステート:B メンバーリスト 消失の危機回避
  6. ブロードキャストパターン ワールドのメッセージング • メンバーBのアプリが落ちた場 合 59
 オーナー メンバーB MultiGameServer メンバーA

    視聴者C メンバーBは アイテムA装着し ている メンバーBは なにも装着 していない データ不整合?
  7. 位置同期 • ブロードキャストパターン ◦ オーナーが状態を管理しない • 定期的に現在の位置、入力の情報をブロードキャストする ◦ 変更がなければ送らない ◦

    現在は100ms毎に送信する設定 • データが2つ溜まった時点で位置を予測する ◦ 他のユーザーからは少し遅れて見える 64

  8. メッセージのシリアライズ/デシリアライズ 66
 message WorldAvatarSyncData { int32 timestamp = 1; Habanero.ProtobufVector3

    position = 2; Habanero.ProtobufVector3 rotationEuler = 3; Habanero.ProtobufVector2 velocity = 4; int32 motionState = 5; bool startEntryMotion = 6; bool startExitMotion = 7; } サンプル
  9. Protocol buffersのメリットデメリット メッセージのシリアライズ/デシリアライズ • メリット ◦ テキスト形式のJSONよりサイズが小さくなる ◦ 互換性を保ったまま拡張できる ◦

    Dictionary(Map)が使える • デメリット ◦ 定義が面倒 ◦ ヒューマンリーダブルではない 68
 キー名などの情報が ない 値がバイナリ
  10. Protocol buffersのメリットデメリット メッセージのシリアライズ/デシリアライズ • メリット ◦ テキスト形式のJSONよりサイズが小さくなる ◦ 互換性を保ったまま拡張できる ◦

    Dictionary(Map)が使える • デメリット ◦ 定義が面倒 ◦ ヒューマンリーダブルではない 70
 Unity標準のJSONシ リアライザでは使えな い
  11. Protocol buffersのメリットデメリット メッセージのシリアライズ/デシリアライズ • メリット ◦ テキスト形式のJSONよりサイズが小さくなる ◦ 互換性を保ったまま拡張できる ◦

    Dictionary(Map)が使える • デメリット ◦ 定義が面倒 ◦ ヒューマンリーダブルではない 71
 IDLを書いてコード生 成しないといけないの で少し手間 開発初期はJSONを 使う、生成のフロー整 備でましになる
  12. Protocol buffersのメリットデメリット メッセージのシリアライズ/デシリアライズ • メリット ◦ テキスト形式のJSONよりサイズが小さくなる ◦ 互換性を保ったまま拡張できる ◦

    Dictionary(Map)が使える • デメリット ◦ 定義が面倒 ◦ ヒューマンリーダブルではない 72
 データがテキストでは ないのでどんな値か 分かりにくい
  13. Protocol buffersの互換性 メッセージのシリアライズ/デシリアライズ • field名の変更ができる 78
 message SampleMessage { int32

    hoge = 1; } { "hoga": 999 } Protobuf JSON データにはフィールド名が含まれず、 フィールド番号のみ含まれるので変更が可能
  14. Protocol buffersの互換性 メッセージのシリアライズ/デシリアライズ • field名の変更ができる 79
 message SampleMessage { int32

    hoge = 1; } { "hoga": 999 } Protobuf JSON フィールド名がデータに含まれるので変更すると 古いバージョンのアプリで読み込めなくなる
  15. Protocol buffersの互換性 メッセージのシリアライズ/デシリアライズ • fieldの追加ができる 82
 message SampleMessage { int32

    hoga = 1; int32 fuga = 2; } Protobuf fieldを追加できる 古いバージョンのアプリでは無 視される
  16. Protocol buffersの互換性 メッセージのシリアライズ/デシリアライズ • fieldの追加ができる 83
 message SampleMessage { int32

    hoga = 1; int32 fuga = 2; } Protobuf 独自バイナリフォーマットを採 用するとこれができない可能性 がある