Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

VisionOSTC_2025_ja

Avatar for Graffity Graffity
December 06, 2025

 VisionOSTC_2025_ja

Avatar for Graffity

Graffity

December 06, 2025
Tweet

More Decks by Graffity

Other Decks in Programming

Transcript

  1. 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」
  2. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

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

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

    国リリースに向けて制作されました 7 Ninja Gaze Typing の場合
  5. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

    Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  6. 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版   にてリリース
  7. 新規デバイスでの開発は様々な 面 で 非 常に苦労します 開発中に発 生 した課題 • 実機がない・実機固有のエラー・SimulationMode

    だとうまくいく • どうにかして調達する • Unity/Apple それぞれに問い合わせする • バグなのか仕様なのかの切り分けが難しい • Unity/Apple それぞれに問い合わせする • 先 行 事例がない 10 未発売のデバイスでアプリを開発する上での注意点 • がんばる • めげない • 英語で調査する
  8. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

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

    Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  10. Unity で開発する場合、XRHand のボーン定義と visionOS のボーン定義に差があります 15 ハンドトラッキングをゲームに組み込む時の注意点 XRHand visionOS •

    PalmはXRHand に定義はあるが visionOS にはない • XRHandには visionOS の 25 .handForearmWrist, 26 .handForearmArm の定義はない • XRHandを拡張したPolySpatialのVisionOSHand.JointID に 定義がある • Palm の定義がないので 手 のひらの法線 方 向などは他の情報から 推測が必要
  11. 16 認識しやすいパターン 認識しやすい速度 認識しづらいパターン • トラッキングする点がなるべく カメラから 見 て被らないパターン •

    手 裏剣でいうと 60cm/s 程度の速度 • 秒間2~3回程度の発射頻度 • トラッキングする点がカメラから 見 て 被りが多い • 同じポーズでも画 角 によってはNG • 指のねじり   のような特殊な指の使い 方 • 極端に遅い/速すぎる動作 • 一 般的な 手 を振る動作はかなり速い ハンドトラッキング・ハンドジェスチャーを 行 うにあたって、推定精度を 高 くキープするためには 様々な 工 夫が必要になります ハンドトラッキングをゲームに組み込む時の注意点
  12. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

    Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  13. 18 Original Mesh • 取得したMeshごとに 色 分けしています • 複数に区分されてMeshの情報を取得可能です •

    反射しやすい材質は検知に時間がかかったりします visionOS ではかなり 高 精度に現実のMeshを複数Objectに分割して取得可能です リアルタイムで現実のMeshと経路探索システムの連携 方 法 • WxHxD = 3.5m x 2.5m x 4.8m
  14. ゲーム (Unity ) 開発では経路探索ではNavigationMesh を使うことが 一 般的です • 実際のMeshから軽量な経路探索 用

    NavMeshを作成 (Bake)することが可能 • 右図のようにBakeしたら移動可能範囲( 水色 の エリア)を 示 すMeshデータが 生 成されます • この移動可能エリアを最短経路探索アルゴリズム を元に Agent が移動するという仕組みです 19 リアルタイムで現実のMeshと経路探索システムの連携 方 法 特徴 引 用 : https://docs.unity3d.com/ja/2019.4/Manual/nav- NavigationSystem.html より
  15. NavMeshを 一 定間隔でBakeしなおす + 平 面 検知を使うことで以下のような 現実を認識しながら移動する仕組みが構築可能です 20 リアルタイムで現実のMeshと経路探索システムの連携

    方 法 空間Meshを利 用 した当たり判定 平 面 検知+NavMeshで障害物検知・回避 引 用 : https://www.gizmodo.jp/2024/07/shuriken-survivor.html より
  16. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

    Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  17. 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状態のチェック • 表 示 ポリゴン数などの描画に関する数値の確認
  18. 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
  19. • ボーンの動きに合わせてメッシュ をどう変形させるか?を計算する 処理のこと • ウェイトペイントによって 動き 方 は設定される 24

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

    Animation Textureの使 用 など) 25 スキニング対策 Apple Vision Pro はスキニング処理が 非 常に苦 手 です。 そのため 大 量のスケルタルアニメーションは避けないと90FPSの維持は厳しいです アプリのパフォーマンス計測とチューニング 方 法
  21. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

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

    Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  23. 「空間にモノを配置する」「空間を 魚 が泳ぐ」ということに、なにも制約をかけないと 見 た 目 上の問題が 生 じやすいです 30

    Objectを空間に配置するときの注意点 NGパターン① NGパターン② • 置物と 魚 がめり込んでしまう • 描画範囲外にいってしまう • 魚 が半 身 になってしまう • 置物が切れてしまう
  24. 空間Grid を導 入 することで様々な問題が解決されました 31 Objectを空間に配置するときの注意点 Grid 上を移動することで配置には制限 ハンドジェスチャーによる操作が実装しやすく! •

    描画範囲外に置かれることを防 止 • Grid でSnapされるので細かい 手 のブレによる 位置ズレがしづらい • 右図の 水色 の点がGridの格 子 点 移動 回転 拡 大 ・縮 小
  25. Agenda 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

    Survivor の場合 A. ハンドトラッキングをゲームに組み込む時の注意点 B. リアルタイムで現実のMeshと経路探索システムの連携 方 法 C. アプリのパフォーマンス計測とチューニング 方 法 3. Craftrium の場合 A. Objectを空間に配置するときの注意点 B. 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  26. 33 一 般的なA* • いわゆるグラフ理論の教科書等で紹介されるもの • 説明が簡易なので平 面 グラフを想定 Shuriken

    Survivor 同様NavMeshを使うにもMeshがないと移動できません。 そこで、空間Gridの格 子 点を利 用 してA*アルゴリズムを3D空間版に拡張を考えました。 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム 引 用 :https://www.nc.ii.konan-u.ac.jp/projects/algo/page/shortestpath/
  27. 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/
  28. Shuriken Survivor 同様NavMeshを使うにもMeshがないと移動できません。 そこで、空間Gridの格 子 点を利 用 してA*アルゴリズムを3D空間版に拡張を考えました。 • 通

    行 許可Gridを明 示 できるようになった • 水色 →OK • 赤色 →NG • 完全ランダムだと前後180度ターンや 上下に垂直に移動など不可解な挙動が多かった • 魚 の前 方 半球 面 内のGridを参照させる →変なターンが低減した 35 魚 を空間で 自 由に泳がせる為の経路移動アルゴリズム
  29. まとめ 1. Ninja Gaze Typing の場合 A. 未発売のデバイスでアプリを開発する上での注意点 2. Shuriken

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