Slide 1

Slide 1 text

様々なジャンルの Apple Vision Pro 専 用 ゲームタイトル制作で直 面 した技術的 課題と解決 方 法の紹介 visionOS TC 2025 English version of this slides

Slide 2

Slide 2 text

登壇者情報 Graf fi ty(ג) ॴଐUnityΤϯδχΞɹCova
 ઐ໳ྖҬɿα΢ϯυϓϩάϥϛϯά UnityΛத৺ͱͨ͠৘ใൃ৴ͳͲΛߦ͍ͬͯ·͢ɻ ஶॻ&ࠪಡڠྗ 2 はじめに @8bitdots https://qiita.com/Cova8bitdot @cova8bit.bsky.social

Slide 3

Slide 3 text

Graffityは、「ARで、リアルを遊べ。」をミッションに、 現実世界とデジタルを融合させた体験を創造する空間エンタメ企業です。 3 Graffity会社概要 Gra ffi tyは、 一 貫して空間エンターテイメントを実現 • スマホARゲーム2タイトル、Apple Vision Pro 向け空間ゲーム2タイトルリリース • 直近では、Apple Vision Pro向け空間ゲーム 「Shuriken Survivor」をリリース • 2C向けのARを活 用 した新規事業を 支 援する 「Gra ffi ty AR Studio」を展開しており、 大手 のクライアントとの実績多数 • NTTコノキュー様とスマホ向けARゲーム 「LOST ANIMAL PLANET」を企画・開発 • Apple Vision Pro向けアプリの企画・開発を 支 援する「Gra ffi ty Spatial Lab」を運営 • JT様が主幹として運営するPloom Shopに空間 映像体験「Ploom Dive」を企画・開発 • その他累計10作品以上の空間アプリケーション 開発を 手 掛ける 空間ゲーム事業 AR技術を活 用 した新規事業・施策の 支 援 「Gra ff i ty AR Studio」 Apple Vision Proアプリ開発 支 援 「Gra ff i ty Spatial Lab」

Slide 4

Slide 4 text

Gra ffi ty では様々なApple Vision Pro 向けのアプリをリリースしております 4 はじめに Craftrium Ninja Gaze Typing Shuriken Survivor

Slide 5

Slide 5 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 6

Slide 6 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 7

Slide 7 text

Ninja Gaze Typing は2024年2 月 のApple Vision Pro の 米 国リリースに向けて制作されました 7 Ninja Gaze Typing の場合

Slide 8

Slide 8 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 9

Slide 9 text

Ninja Gaze Typing は2024年2 月 のApple Vision Pro の 米 国リリースに向けて制作されました Gaze が重要と考えたのでプロトタイプは視線追従機能がある Meta Quest Pro を 用 いました 9 未発売のデバイスでアプリを開発する上での注意点 2023 Jun WWDC ’23 にて AppleVisionPro の発表 2023 Sep ・MetaQuestPro で   プロトタイプ版を制作 ・GazeのUXを確認 2023 Oct AVP向けに制作開始 引き続きUnityを利 用 2024 Feb ・ 米 国でAVPリリース ・Ninja Gaze Typing をUnity版   にてリリース

Slide 10

Slide 10 text

新規デバイスでの開発は様々な 面 で 非 常に苦労します 開発中に発 生 した課題 • 実機がない・実機固有のエラー・SimulationMode だとうまくいく • どうにかして調達する • Unity/Apple それぞれに問い合わせする • バグなのか仕様なのかの切り分けが難しい • Unity/Apple それぞれに問い合わせする • 先 行 事例がない 10 未発売のデバイスでアプリを開発する上での注意点 • がんばる • めげない • 英語で調査する

Slide 11

Slide 11 text

11 デバイスリリースと同時にコンテンツをリリースする為に必要な点について WWDC2024 にて Apple Vision Pro の基調講演でリリース済みアプリの紹介で掲載されました ココ!

Slide 12

Slide 12 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 13

Slide 13 text

Shuriken Survivor は2024年6 月 末の国内リリースに合わせて制作した タワーディフェンスシューティングゲームです 13 Shuriken Survivor の場合

Slide 14

Slide 14 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 15

Slide 15 text

Unity で開発する場合、XRHand のボーン定義と visionOS のボーン定義に差があります 15 ハンドトラッキングをゲームに組み込む時の注意点 XRHand visionOS • PalmはXRHand に定義はあるが visionOS にはない • XRHandには visionOS の 25 .handForearmWrist, 26 .handForearmArm の定義はない • XRHandを拡張したPolySpatialのVisionOSHand.JointID に 定義がある • Palm の定義がないので 手 のひらの法線 方 向などは他の情報から 推測が必要

Slide 16

Slide 16 text

16 認識しやすいパターン 認識しやすい速度 認識しづらいパターン • トラッキングする点がなるべく カメラから 見 て被らないパターン • 手 裏剣でいうと 60cm/s 程度の速度 • 秒間2~3回程度の発射頻度 • トラッキングする点がカメラから 見 て 被りが多い • 同じポーズでも画 角 によってはNG • 指のねじり   のような特殊な指の使い 方 • 極端に遅い/速すぎる動作 • 一 般的な 手 を振る動作はかなり速い ハンドトラッキング・ハンドジェスチャーを 行 うにあたって、推定精度を 高 くキープするためには 様々な 工 夫が必要になります ハンドトラッキングをゲームに組み込む時の注意点

Slide 17

Slide 17 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 18

Slide 18 text

18 Original Mesh • 取得したMeshごとに 色 分けしています • 複数に区分されてMeshの情報を取得可能です • 反射しやすい材質は検知に時間がかかったりします visionOS ではかなり 高 精度に現実のMeshを複数Objectに分割して取得可能です リアルタイムで現実のMeshと経路探索システムの連携 方 法 • WxHxD = 3.5m x 2.5m x 4.8m

Slide 19

Slide 19 text

ゲーム (Unity ) 開発では経路探索ではNavigationMesh を使うことが 一 般的です • 実際のMeshから軽量な経路探索 用 NavMeshを作成 (Bake)することが可能 • 右図のようにBakeしたら移動可能範囲( 水色 の エリア)を 示 すMeshデータが 生 成されます • この移動可能エリアを最短経路探索アルゴリズム を元に Agent が移動するという仕組みです 19 リアルタイムで現実のMeshと経路探索システムの連携 方 法 特徴 引 用 : https://docs.unity3d.com/ja/2019.4/Manual/nav- NavigationSystem.html より

Slide 20

Slide 20 text

NavMeshを 一 定間隔でBakeしなおす + 平 面 検知を使うことで以下のような 現実を認識しながら移動する仕組みが構築可能です 20 リアルタイムで現実のMeshと経路探索システムの連携 方 法 空間Meshを利 用 した当たり判定 平 面 検知+NavMeshで障害物検知・回避 引 用 : https://www.gizmodo.jp/2024/07/shuriken-survivor.html より

Slide 21

Slide 21 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 22

Slide 22 text

Unity上でのパフォーマンスチェック: Unity Profiler Apple Vision Pro 実機でのパフォーマンスチェック: RealityKit Trace 22 アプリのパフォーマンス計測とチューニング 方 法 Unity Pro fi ler RealityKit Trace • Unity 上のCPU/Memory 周りのパフォーマンスチェック • UIなどの描画コストのチェック • Apple Vision Pro 実機の動作チェック • CPU/GPU の負荷(フレーム落ちの箇所)の確認 • Busy状態のチェック • 表 示 ポリゴン数などの描画に関する数値の確認

Slide 23

Slide 23 text

RealityKit Traceで 見 るべき部分は5種類程度に絞ることができます 1. RealityKit Frames 2. RealityKit Metrics 3. Run Loops 4. Time Pro fi ler 5. Hangs 23 アプリのパフォーマンス計測とチューニング 方 法 https://qiita.com/Cova8bitdot/items/eb7ad7ab6706bb4e8029

Slide 24

Slide 24 text

• ボーンの動きに合わせてメッシュ をどう変形させるか?を計算する 処理のこと • ウェイトペイントによって 動き 方 は設定される 24 スキニングとは Apple Vision Pro はスキニング処理が 非 常に苦 手 です。 そのため 大 量のスケルタルアニメーションは避けないと90FPSの維持は厳しいです アプリのパフォーマンス計測とチューニング 方 法

Slide 25

Slide 25 text

1. スキニングする対象を減らす 2. スキニングする対象のポリゴン数を減らす 3. UnityのAnimatorをやめて別の 方 法で表現する ( Vertex Animation Textureの使 用 など) 25 スキニング対策 Apple Vision Pro はスキニング処理が 非 常に苦 手 です。 そのため 大 量のスケルタルアニメーションは避けないと90FPSの維持は厳しいです アプリのパフォーマンス計測とチューニング 方 法

Slide 26

Slide 26 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 27

Slide 27 text

Craftrium は松 竹 さんと共同開発したアクアリウムシミュレーターゲームです 27 Craftrium の場合

Slide 28

Slide 28 text

Craftrium は松 竹 さんと共同開発したアクアリウムシミュレーターゲームです 28 Craftrium の場合

Slide 29

Slide 29 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 30

Slide 30 text

「空間にモノを配置する」「空間を 魚 が泳ぐ」ということに、なにも制約をかけないと 見 た 目 上の問題が 生 じやすいです 30 Objectを空間に配置するときの注意点 NGパターン① NGパターン② • 置物と 魚 がめり込んでしまう • 描画範囲外にいってしまう • 魚 が半 身 になってしまう • 置物が切れてしまう

Slide 31

Slide 31 text

空間Grid を導 入 することで様々な問題が解決されました 31 Objectを空間に配置するときの注意点 Grid 上を移動することで配置には制限 ハンドジェスチャーによる操作が実装しやすく! • 描画範囲外に置かれることを防 止 • Grid でSnapされるので細かい 手 のブレによる 位置ズレがしづらい • 右図の 水色 の点がGridの格 子 点 移動 回転 拡 大 ・縮 小

Slide 32

Slide 32 text

Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 33

Slide 33 text

33 一 般的なA* • いわゆるグラフ理論の教科書等で紹介されるもの • 説明が簡易なので平 面 グラフを想定 Shuriken Survivor 同様NavMeshを使うにもMeshがないと移動できません。 そこで、空間Gridの格 子 点を利 用 してA*アルゴリズムを3D空間版に拡張を考えました。 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム 引 用 :https://www.nc.ii.konan-u.ac.jp/projects/algo/page/shortestpath/

Slide 34

Slide 34 text

34 一 般的なA* アルゴリズム 空間拡張 • いわゆるグラフ理論の教科書等で紹介されるもの • 説明が簡易なので平 面 グラフを想定 • 見 た 目 と接続Node数が増えたバージョン • 隣接Node 数がかなり増える • 単純な上下左右前後→ 6 node • 斜めも含む→ 9 + 8 + 9 = 26 node • 探索コストは 一 気に増加 • 本質的には平 面 のグラフと同じ Shuriken Survivor 同様NavMeshを使うにもMeshがないと移動できません。 そこで、空間Gridの格 子 点を利 用 してA*アルゴリズムを3D空間版に拡張を考えました。 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム 引 用 :https://www.nc.ii.konan-u.ac.jp/projects/algo/page/shortestpath/

Slide 35

Slide 35 text

Shuriken Survivor 同様NavMeshを使うにもMeshがないと移動できません。 そこで、空間Gridの格 子 点を利 用 してA*アルゴリズムを3D空間版に拡張を考えました。 • 通 行 許可Gridを明 示 できるようになった • 水色 →OK • 赤色 →NG • 完全ランダムだと前後180度ターンや 上下に垂直に移動など不可解な挙動が多かった • 魚 の前 方 半球 面 内のGridを参照させる →変なターンが低減した 35 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 36

Slide 36 text

社内のR&Dチームと技術調査を 行 った結果、 魚 群シミュレーションも 空間Gridを使うことで実機で動かすことができました 36 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 37

Slide 37 text

まとめ 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム

Slide 38

Slide 38 text

Thank you for listening