Apple Vision Pro のリリースが迫っており、開発者がヘッドセット用のアプリを構築する際に考慮すべきことがたくさんあります。ここでは、visionOS アプリを作成するときに考慮すべきことを説明します。
Apple Vision Pro は、Apple にとってインタラクティブ性の出発点です。ユーザーが平面上で操作することと、確立されたユーザー インターフェイス言語に大きく依存する Mac や iOS 用のアプリとは異なり、visionOS はそれをすべて捨てて、開発者はユーザーがアプリを操作するための新しい方法を採用する必要があります。
Apple は、空間コンピューティングの設計に関する広範なドキュメントとチュートリアルを提供しています。次に、visionOS 用のアプリを設計する際に留意すべき重要なポイントをいくつか示します。
パススルー モードとイマーシブ モード
visionOS では、パススルー モードまたはイマーシブ モードでアプリを作成できます。
パススルー モードでは、ユーザーは内蔵の外部カメラを使用して Apple Vision Pro ヘッドセットを通して周囲を見ますが、アプリやウィンドウは空間に浮いて表示されます。
このモードでは、ユーザーはジェスチャーと目の動きを使用してユーザー インターフェイスを操作できます。
イマーシブ モードでは、ユーザーは、3D オブジェクトを含む 3D 生成されたシーンに囲まれた完全な 3D 世界に入ります。イマーシブ モード アプリは、ユーザーがゲーム環境空間自体に入るゲームにすることもできます。
ほとんどのvisionOSアプリでは、Appleはユーザーをパススルーモードで開始し、グラウンドプレーンまたは向きを確立し、必要に応じて後で完全イマーシブモードに移行することを推奨しています。
これは、一部のユーザーは、アプリの起動時に 3D 空間に即座に没入することに不快感を感じる可能性があるためです。
パススルーモード。
ジェスチャー
Apple Vision Pro (AVP) は、iOS や iPadOS よりもジェスチャに大きく依存しています。
AVP は、入力デバイスを使用せずに手と目だけを使用してインターフェイスを制御および操作できる初の主流コンピュータです。ジェスチャーを使用して空間内で手を動かし、ユーザー インターフェイスを制御します。
visionOS で入力を受け取ることができるオブジェクトは、実在物。エンティティは実際には RealityKit フレームワークの一部です。
visionOS アプリにジェスチャを実装するには、次の 3 つのことが必要です。
- エンティティにはInputTargetComponentが必要です
- エンティティにはシェイプを含む CollisionComponent が必要です
- ジェスチャは、対話したいエンティティを対象とする必要があります
visionOS のオブジェクトは次のように定義されます。コンポーネント入力、ワールド、ビュー、ビュー アタッチメント、ホバー効果、衝突検出、テキスト コンポーネントなど、さまざまなタイプがあります。
各コンポーネントは、visionOS のインターフェイスとコントロールのさまざまな側面を制御します。 Apple はそれぞれに Swift 構造体を定義しています。
InputTargetComponent は、どのオブジェクトがジェスチャの形式で入力を受信できるかをvisionOSに伝える構造体です。
InputTargetComponent を追加しない場合、visionOS のオブジェクトは入力をまったく受け取ることができません。
オブジェクトが直接入力を受信できるか間接入力を受信できるかを設定することもできます。
スウィフトの場合:
myEntity.components.set(InputTargetComponent()
エンティティのどの部分が入力を受信できるかを定義するには、CollisionComponent
。衝突コンポーネントには、エンティティ上のヒット テスト領域を定義する形状があります。
変えることでCollisionComponent
形状を変更すると、エンティティのどの部分がジェスチャ入力を受け入れるか無視するかを変更できます。
エンティティに対する物理ベースの処理を無効にするには、エンティティの衝突検出を無効にします。CollisionComponent
を使用してCollisionFilter
。
InputTargetComponents
階層内で動作するため、子孫エンティティを持つエンティティにそれらを追加すると、InputTargetComponents
無効にしない限り、子エンティティは入力を処理します。
入力の種類を設定できます。InputTargetComponent
を設定することで受信できます.allowedInputTypes
財産。
子孫InputTargetComponent's
.allowedInputTypes
プロパティは.allowedInputTypes
先祖の性質。
を設定することもできます.allowedInputTypes
最初に構造体を初期化するとき、init()
方法。
かどうかを切り替えることができます。InputTargetComponent
を設定することで入力を受け入れることができます.isEnabled
財産。
ジェスチャは、特定のエンティティまたは任意のエンティティを対象とするように設定できます。
ジェスチャでどのエンティティが入力を受け取ったかを確認できます。.onEnded
このような方法:
let tappedEntity = gestureValue.entity
ほとんどの場合、ウィンドウ、アイコン、3D オブジェクト、RealityKit シーン、ARKit オブジェクトが混在するパススルー モードでエンティティを使用します。
ウィンドウと 3D オブジェクトを使用したパススルー モード。
ホバーエフェクトコンポーネント
エンティティが対話型エンティティである場合 (つまり、入力が有効になっている場合)、HoverEffectComponent
ユーザーを驚かせ、喜ばせるために。
HoverEffectComponent は、おそらくユーザー インターフェイスの歴史の中で最もクールなものです。
HoverEffectComponent をインタラクティブなエンティティに追加すると、visionOS はユーザーがエンティティに表示するたびに目に見えるハイライトを追加します。それを見て。
ユーザーがエンティティから目をそらすと、ハイライトが削除されます。
これはコンピューターによる完全なマインドコントロールまであと一歩です。
macOS デスクトップでのシングルクリックや iOS でのテキストのハイライトと同様、視覚的なハイライトはエンティティが選択可能であることをユーザーに伝えますが、目の動き以外の物理的な操作は必要ありません。
ユーザーがvisionOSの視野の周りで目を動かすと、HoverEffectComponentがある限り、見ているエンティティが強調表示されます。
これは、Apple にとっても、まさに魔法です。信じられない。
の目空間コンピューティングにおける新しい入力デバイスとなるでしょう。
これは確かに非常にエキサイティングな見通しです。目でコンピュータを制御する能力は、手で手動で入力するよりもはるかに速く、より正確になります。
また、障害のある人にとって、まったく新しいコンピューター制御の世界が開かれることになります。
visionOS には、数種類のオブジェクトを含むスペース、または完全にレンダリングされた 3D シーンを含めることができます。
バーチャルハンド
空間コンピューティングの新しい側面の 1 つは、次のような考え方です。仮想の手:visionOS アプリでは、手を挙げて AVP の視野内のオブジェクトを制御できるようになります。
これについては以前の記事で説明しましたビジョンOSのサンプルコード。 Apple はすでに、これが動作するデモ プログラムをいくつか提供しています。
仮想手を使用すると、AVP 内のビュー内のオブジェクトに触れて制御できるようになります。これにより、物理的な入力デバイスを使用せずに直接操作するという古典的な UI コンセプトが得られます。
仮想手は、多くの最新のビデオ ゲームで使用される画面上の手と似ています。実際、このアイデアは数十年前に、画期的なゲームなどのいくつかのゲームですでに使用されていました。レッドファクションPlayStation 2 の場合は、やはり物理的な入力デバイスが必要でした。
AVP を使用すると、ハードウェアを介さずにオブジェクトに直接触れているかのように見えるため、エクスペリエンスがより直接的かつ直感的になります。
仮想の手とジェスチャを使用すると、visionOS の空間内でオブジェクトをタップしたり、移動したりすることができます。
没入型ゲームでも使用できます。
ジェスチャー制御に関する追加の考慮事項
ジェスチャー、コントロール、空間インタラクションについては、他にも考慮すべきことがいくつかあります。
遠くのオブジェクトに対する近くのコントロールについて考える必要があります。 AVR の 3D 空間内の一部のオブジェクトは他のオブジェクトよりも遠くに表示される場合があるため、ユーザーが両方を操作できるようにする方法も検討する必要があります。
Apple は 3D 空間と奥行きを考慮するようアドバイスしています。 AVP 向けの開発は、従来の画面に限定されたデバイスよりも複雑になります。
快適さと 360 度の眺め
Apple は快適さが重要であることを念頭に置くよう何度も強調しています。 AVP を使用するときは、体全体、特に頭が使用されることに注意してください。
ユーザーは頭を任意の方向に旋回および回転させてビューを変更できます。また、立ったり、回転したり、かがんだり、しゃがんだり、座ったりすることもできるようになります。
ユーザーに過度の動きや不快に感じる可能性のある動きを強制したくないため、アプリを設計する際にはこの点に留意する必要があります。
また、反復的な動作が多すぎるとユーザーが疲れてしまう可能性があるという問題もあります。ユーザーによっては可動域が制限される場合があります。
ユーザーによっては、一部の動作は実行できるが、他の動作は実行できない場合があります。アプリを設計するときは、次の考慮事項に留意してください。
また、AVP 自体の重量により、ユーザーの頭に追加の重量がかかることにも注意してください。首の疲労を引き起こす可能性のある、ユーザーに頭を長時間保持することを強制することは望ましくありません。
AVP の後の反復が軽くなるにつれ、時間の経過とともに、これが問題でなくなることは間違いありません。
Apple はまた、360 度ビューやラップアラウンド ビューの使用を推奨していません。
ユーザーはさまざまな方向を見ることでビュー全体をパンすることができますが、Apple は開発者が全周にわたるアプリを作成することを望んでいません。
その他の豆知識
Apple は、visionOS の開発に役立つものを他にもいくつか挙げています。
アップルが推奨するないアプリの起動時にユーザーを没入型シーンに配置します。もちろんそうすることもできますが、アプリが没入型ゲームでない限り、Apple はそれをお勧めしません。
没入型ゲームの場合でも、ユーザーがゲームを開始する前に気分を変えたり、他のアプリにアクセスしたりできるように、ユーザーをウィンドウで開始することができます。
Apple が定義するのは、重要な瞬間これは、visionOS の独自の機能を活用する機能またはインタラクションとして機能します。
ARKit は、オープンな没入型スペースがある場合にのみ、アプリにデータを配信します。
[デバッグ ビジュアライゼーション] メニューの衝突形状デバッグ ビジュアライゼーションを使用して、エンティティ上のヒット検出領域がどこにあるかを確認します。
RealityView アタッチメントを使用して SwiftUI ビューを ViewAttachmentEntity として作成することで、SwiftUI ビューをvisionOS アプリに追加できます。これらのエンティティは、visionOS 内の他のエンティティと同様に機能します。
また、Xcode ドキュメントの次のセクションも必ず参照してください。没入型空間内のオブジェクト間の関係を理解します。
現在、visionOS では、ウィンドウの作成後にオンスクリーン コントロールを使用してウィンドウのサイズ変更や移動を行うことができますが、プログラムで行うことはできません。
したがって、ウィンドウを作成するときは、ウィンドウの初期サイズについて慎重に検討する必要があります。 visionOS が新しいウィンドウを作成すると、ユーザーがその瞬間を見ている画面上のどこにでもウィンドウが配置されます。
アプリにビデオを表示するステレオ ビューが含まれている場合は、AVFoundation の AVAsset クラスを使用してビデオを MV-HEVC 形式に変換する必要があります。
visionOS の RealityKit シーンに照明を提供するには、システムに照明を提供させるか、ImageBasedLightComponent を使用してシーンを照明することができます。
CustomMaterial クラスは、visionOS では使用できません。シーンのカスタム マテリアルを作成する必要がある場合は、代わりにマテリアルを ShaderGraphmaterial 構造体として利用できる Reality Composer Pro ツールを使用してください。
Apple は、RCP でのマテリアルの使用に関する WWDC 23 ビデオ セッションを開催します。見るビデオWWDC の空間コンピューティングのためのレンダリングを探索します。
WWDC 23もぜひご覧ください。ビデオ 空間デザインの原則として同様に 視覚と動作に関する設計上の考慮事項。
AVP の現在の方向を取得するには、queryDeviceAnchor(atTimestamp:)
方法。
空間オーディオとサウンドデザイン 101
AVP エクスペリエンスのもう 1 つの空間部分は、イマーシブ オーディオです。
完全環境オーディオはソフトウェア、特にゲームにおいて何十年も前から存在しており、ヘッドフォンやサラウンド サウンドのホーム シアター システムを使用することで、ユーザーは長年にわたって没入型サウンド体験を楽しむことができました。
しかし、AVP はそのエクスペリエンスを新たなレベルに引き上げます。
まず、イマーシブ オーディオをイマーシブ リアリティまたはミックス リアリティの視覚環境に接続すると、これまでコンピューティングで可能であったものよりもまったく新しい次元のリアリズムが生み出されます。
サウンドとビジュアル体験の両方を連携させることで、可能なことの新しい標準が生まれます。
あなたの脳は、目で見たものと耳で聞いたものを複雑に解釈して機能します。人間の知覚における空間的手がかりの多くは聴覚に基づいています。
たとえば、片方の耳に音が届くのがわずかに遅れ、もう片方の耳に届くのはほんの数秒前で、頭が音の一部を隠すことと組み合わせることで、音がどの方向から発生しているかを脳が認識できるようになります。これらはと呼ばれます両耳間の時差そして両耳レベルの違い。
ピッチ、音色、質感、音量、持続時間も、人間が音を知覚する方法に影響を与えます。反射音も知覚に影響を与えます。
人間は通常、低音域の 20Hz から高音域の 20Khz までの範囲の音の周波数を聞くことができますが、この範囲は年齢とともに低下し、一部の人はこれらの範囲を超えた音を聞くことができます。
古典的なコンパクト ディスク オーディオ フォーマットは、人間の聴覚の最大周波数の 2 倍である 44.1KHz でサウンドをサンプリングします。これは、ナイキスト限界- 録音されたサンプリングによってサウンドを正確にキャプチャするには、サンプル周波数が最大サウンド周波数の 2 倍である必要があると述べています。
人間の聴覚の奇妙な点の 1 つは、円錐形の表面から発生した音、または円錐形の表面で反射した音の位置を特定するのが難しいことです。これらの形状は自然界ではめったに発生しないため、これは驚くべきことではありません。
直接音と反射音。レゾナンスオーディオ提供。
視覚と音声の入力が適切に組み合わされて同期すると、考えることなく脳が自動的に接続と判断を行います。
あなたの通常の認識のほとんどは、これらの複雑な解釈と感覚入力に基づいています。空間における自分の方向に対する脳の認識も同様です(バランスに影響を与える内耳からの入力と組み合わされます)。
AVP は、視覚と没入型サウンドの両方を同期して入力できるため、新しいレベルの体験を提供します。アプリを設計するときは、このことにも留意してください。
ユーザーに可能な限り最も現実的な体験をしてもらいたいと考えていますが、これを最もよく実現するには、音と視覚の両方を注意深く使用する必要があります。
非没入型アプリの場合は、音声キューを使用してインタラクションをよりリアルにします。
たとえば、ユーザーがボタンをタップしたときに微妙な音声応答を使用したり、ユーザーが見ているオブジェクトから直接聞こえてくるような音声を再生したりすることができます。
イマーシブ アプリを作成している場合は、ユーザーが見ているものと適切に一致するようにオーディオを慎重に調整する必要があります。ゲームの場合、3D オーディオ キューを使用して、ゲームプレイ イベントや環境と正確に一致させることが重要です。
ADSR
すべての音には、いわゆる「音」があります。ADSR- アタック、ディレイ、サステイン、リリース。
アタックは、サウンドのボリュームがゼロから最大まで変化する速度または傾きです。完全に垂直なアタックとは、サウンドが無音から瞬時に最大値に達することを意味します。
遅延とは、サウンドがその最大値またはピークから標準音量に低下または落ち着くまでの時間であり、これはサウンドの最終段階であるリリースまで続きます。
サステインは、遅延期間の後にサウンドが標準の音量に保たれる時間です。これは、ほとんどの人が音を知覚するレベルです。
リリースとは、音がフェードアウトし始めてから音量がゼロになるか、無音になるまでの時間です。リリースフェーズは、サステイン期間の終わりから始まり、無音になるまで続きます。
完全に垂直なリリースカーブは、サウンドが標準音量から瞬時に無音になることを意味します。非常に長く浅いリリースカーブは、時間の経過とともにサウンドが非常にゆっくりとフェードアウトすることを意味します。
Apple Music アプリでクロスフェード エフェクトを使用したことがある場合は、浅いアタック カーブとリリース カーブを聞いたことがあるでしょう。
完全に垂直なアタックまたはリリースを持つサウンドは、ゲート付き音が鳴る。
サウンドの 4 つの ADSR 値をまとめると、封筒。
ほとんどのプロフェッショナルなサウンド編集ソフトウェアでは、サウンドの ADSR グラフ上の 4 つのポイントすべてを調整できます。 ADSR を変更すると、ユーザーが音を知覚する方法に影響します。
ADSR を使用すると、サウンドに非常に興味深く微妙なエフェクトを作成できます。
ADSR はもともと合成された音楽にのみ使用されていましたが、今日のプロ サウンド ソフトウェアを使用すると、ADSR をサンプリング (録音) サウンドにも適用できます。
PlayStation 2 サウンドエディターでの ADSR 調整。
効果音
visionOS 用の没入型ゲームを作成している場合は、音響効果について慎重に考える必要があります。
たとえば、ゲームに遠くで爆発や銃撃音が含まれているとします。各サウンドの相対的な音量がエフェクトの距離と強さに一致するように、サウンドの時間を調整し、ミキシングする必要があります。
イマーシブ ゲームにおけるサウンドのリアリズムは、材料環境の中で。
ゲーム内に爆発や銃撃が起こる巨大な岩の峡谷はありますか?その場合、音が渓谷の壁で反射するときに、複数のリアルなエコー エフェクトを含める必要があります。
また、ユーザーを基準にして 3D 空間内で各サウンドを、ユーザーの前、後ろ、横、さらには上または下から配置する必要もあります。現実の生活では、特定の音は一度に全方向から聞こえてくるように見えることがあります。
実生活における他の種類の音では、参加者は一時的に聴覚障害が生じたり、しばらく耳鳴りだけが残ることがあります (手榴弾による脳震盪が思い浮かびます)。
ゲームの設定では何マイルも離れた場所で爆発が起きても、現実世界では視聴者は実際には爆発しないだろうと考えてみましょう。聞く爆発はそれを見てから数秒後まで続きます。
このようなちょっとした工夫で、アプリにさらなるリアルさが加わります。
これらすべてに加えて、ユーザーが頭を動かして視点や視野が変わる可能性があることに留意してください。その間音が鳴っています。ユーザーの視点の変化に応じて、3D 空間内の一部のサウンドの空間キューをリアルタイムで調整する必要がある場合があります。
これに役立つ音声ライブラリがあります。共鳴オーディオ、OpenAL などがありますが、空間オーディオが AVP でどのように進化するかを待つ必要があります。
ゲームのサウンド デザインは、それ自体が完全な専門分野です。
現実世界でサウンドがどのように機能するかについて詳しく知りたい場合は、優れた書籍をチェックしてください。音の物理学Richard Berg と David Stork によるものですが、多少の数学が必要です。
AppleのvisionOS Q&A
WWDC 23 と最近の開発者ラボで、Apple はvisionOS 専門家とのセッションを数回開催し、その結果、Apple はビジョンOS Q&Aさらに多くのトピックをカバーしています。
あなたのvisionOSアプリが可能な限り優れたものであることを確認するために、これをチェックしてください。