visionOSアプリが作りたい！(準備)

# はじめに
Apple社のVisionProを見て面白そう！と思い、SwiftやSwiftUIを使ったことがあるためもしかしてアプリを作成できるのでは？と思っています。
ARKitやRealityKitで何ができるかなどわからないことが多いので、まず調査をすることにしました。

# visionOSの空間コンピューティングの構成要素
<img width="800" alt="CBC_encryption" src="https://developer.apple.com/visionos/images/figure_2x.webp"> https://developer.apple.com/jp/visionos/
### Window

 iOSやiPadOSの画面のように2Dの内容を表示するもので、奥行きを持った3Dオブジェクトを表示させることも可能です。
 Windowの位置やサイズはユーザが自由に調整することができたり、どの距離からでも見やすいようにユーザーからの距離に応じて動的にスケールします。

 <img width="150" alt="CBC_encryption" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2871987/4080ce34-fca5-9790-ef47-8cb8408d9716.png"> https://developer.apple.com/jp/visionos/
 
### Volume
RealitykitやUnityを使用して3Dコンテンツを表示できるSwiftUIのシーンのことで、3Dコンテンツを表示するための固定サイズの領域を提供します。
Windowと異なり、ユーザーとの距離が離れると小さくなったように見えるため、より現実の世界のオブジェクトのように見せることができます。
 <img width="150" alt="CBC_encryption" src="https://developer.apple.com/visionos/images/volumes-256x256_2x.png"> https://developer.apple.com/jp/visionos/

### Space
ユーザーの周囲にアプリ専用の空間を開き、様々なコンテンツを表示できる無制限の領域を提供します。
Macのデスクトップ表示のように複数のアプリが並んで表示され、ユーザーはそれらを自由に移動できます。
 <img width="150" alt="CBC_encryption" src="https://developer.apple.com/visionos/images/spaces-256x256_2x.png"> https://developer.apple.com/jp/visionos/

# フレームワークについて

- ARKit
 iOS向けのAR(拡張現実)用フレームワークのことで、iOS 11.0+、Mac Catalyst 14.0+に対応しています。
 特別な機材を必要とせず、iPhone/iPad単体でARアプリを開発することができます。
  2024年9月現在の最新はARKit6で4Kビデオ対応、Depth API、ビデオとキャプチャの機能などが拡張され、アプリ開発の幅が広がっています。
<img width="500" alt="ARKit" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2871987/30a75064-c565-5b19-5cfa-ef9cd5f9425e.png"> https://developer.apple.com/jp/augmented-reality/arkit/


- RealityKit
 写実的レンダリング、カメラエフェクト、アニメーション、物理シミュレーションなどが備わった、拡張現実用に一から開発されたフレームワークのことです。
 3DCGレンダリングとAR補助機能を持ち、ARKitと使用することで手軽にARアプリを使用することができます。
 RealityKitにはReality Composerというツールがあり、iOSまたはMacOSで3D空間を手軽に実装できるようになっています。visionOS用にReality Composer Proというアプリがあり、これを使用してvisionOS向けのアプリを作成することができます。
Reality Composer ProはXcode15 beta2以降のバージョンで使用可能です。
 <img width="500" alt="RealityKit" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2871987/161f9e9a-1ac1-a364-5ece-991c9a31b6de.png">　https://developer.apple.com/jp/augmented-reality/realitykit/

## visionOS 2.0

visionOS2.0では新しく3つの開発者向けツールが提供されています。

- Volumetric API
 他のアプリと並行して表示をすることが可能になります。
Volumeはユーザーとの距離が離れると小さくなったように見せることしかできませんでしたが、SwiftUIの修飾子『windowResizability』を使用することにより、Volumeのサイズを変更できるようになりました。
 このAPIを使用することで、3Dオブジェクトがユーザーから離れたとき一定の大きさを保つか、小さくなるかを選択することができます。
<img width="800" alt="Volumetric API" src="https://mspoweruser.com/wp-content/uploads/2024/04/Microsoft-OneNote-Apple-Vision-Pro-700x391.jpg"> https://mspoweruser.com/microsoft-unveils-volumetric-apis-to-extend-windows-apps-into-3d-space/

- TabletopKit API
 カードゲームやボードゲームなどをマルチプレイヤー機能を使って、複数人が参加するテーブル上の体験アプリを構築するために用意されたフレームワークです。
 ゲームの設計、ルールの実装、エフェクトのレンダリングおよび複数人が参加するゲームの状態の同期をサポートしてくれます。
 プレイヤーのジェスチャーを処理してインタラクションとして表現します。
 <img width="800" alt="TabletopKit API" src="https://docs-assets.developer.apple.com/published/57db470ae11aa75bdce3aba0477c2520/tabletopkit-framework-hero@2x.png"> https://developer.apple.com/documentation/TabletopKit

- Enterprise API
 企業向けのAPIで、使用するためにはAppleへの申請をして承認され、送られてくるライセンスファイルをプロジェクト内に含めてビルドする必要があります。
Apple Developer Program または Apple Developer Enterprise Program のアカウント所有者のみが申請でき、ビジネス環境のみでの使用、各APIの使用に関連する特定の基準を満たすという条件を満たす必要があります。
visionOSのEnterpriseAPIは以下の二つの異なるカテゴリで構成されています。


#### 強化されたセンサーアクセス

- メインカメラアクセス
    Apple Vision Proのメインカメラにアクセスし、入力データを取得
- スクリーンキャプチャのパススルー
    Apple Vision Proの装着者が見ている現実の世界とデジタル情報の複合フィードにアクセス
- 空間バーコードとQRコードスキャン
    バーコードや QR コードをスキャンして、内容をデコードし、空間位置を特定
    
#### visionOSを最大限に活用できるようにするためのプラットフォーム制御

- Apple Neural Engineへのアクセス
    機械学習タスク向けに Apple Neural Engine (ANE)にアクセス
- オブジェクト追跡パラメータの調整
    設定可能なパラメータを使用して、既知のオブジェクトの検出と追跡を最適化
- パフォーマンスの余裕が増加
    発熱量の増加とバッテリー寿命の低下を代償として、CPUとGPUのパワーを増強して高い計算能力を取得

# 感想

APIから調べ始めたらVolumeってなんだ？となって調べなおすことになりましたが、おかげでより理解が深まったので良かったです。
去年からちょっと興味があってみて暇なときに見ていたのですが、1年で3つ開発者用ツールが増えていたので、興味があったらすぐに調べたり実際に作成したリしたいと思いました。

# 参考にしたサイト

https://developer.apple.com/jp/visionos/
https://www.techpit.jp/courses/80/curriculums/83/sections/628/parts/2183
https://developer.apple.com/jp/augmented-reality/arkit/
https://1planet.co.jp/tech-blog/applevisionpro-oneplanet-visionos2-tabletopkit
https://future-architect.github.io/articles/20240906a/
https://developer.apple.com/documentation/visionOS/building-spatial-experiences-for-business-apps-with-enterprise-apis