見出し画像

[visionOS] Spatial Computingの用語・基礎概念の整理 #WWDC23

visionOSのサンプルをシミュレーターで動かしてみたり新規プロジェクトを作成してみたりすると、結構新しい概念や用語がいろいろと登場していることに気付く。

基礎概念や用語は早めに理解しておいた方が良いだろうということで、WWDC23のセッション "Get started with building apps for spatial computing" の冒頭と後半にあった解説を整理した。

なお、引用表記と画像は基本的に"Get started with building apps for spatial computing"より。

Elements

ウィンドウ

各アプリは、1つまたは複数のウィンドウを持つことができる。

SwiftUIでSceneを用いて構築でき、

2Dと3Dコンテンツを混在させることができる。

ユーザーが自由に拡大縮小や再配置を行える。 

ボリューム

ボリュームは3Dコンテンツに最適化したウィンドウ。

2Dまたは3Dコンテンツを含む複数のSwiftUIビューをホストすることができる。基本的にはShared Space向けのもの。

Although volumes can be used in a Full Space, they are really built for the Shared Space, therefore content must remain within the bounds of the volume.
ボリュームはフルスペースで使用することができますが、それらは本当に共有スペースのために構築され、したがって、コンテンツはボリュームの境界内にとどまる必要があります。

ボリュームは、アプリが定義された範囲に3Dコンテンツを表示し、他のアプリとスペースを共有することを可能にする。

シーンにボリュームを追加するコード例は以下:

  • 新しいWindowGroupを作成

  • そのwindowStyleをvolumetricに設定

  • width、height、depthのプロパティを持つdefaultSizeを与える

    • ボリュームの単位は、ポイントまたはメートルで指定

シミュレータでの実行例:

このボリュームには、指定した寸法があり、プラットフォームコントロールとして、アプリ名を表示し、このボリュームがどのアプリに属するかを簡単に識別できるようにするアプリケーションタイトルバー、ボリュームを配置できるウィンドウバー、タップするとアプリを中断し、ボリュームを閉じるクローズボタンがある。

その他ボリュームについて:

Volumes are great for showcasing 3D content, for example, a chess board. People can reposition volumes in space, and they can be viewed from different angles. Volumes are SwiftUI scenes, allowing you to do layout in familiar ways, and they use the power of RealityKit to display your 3D content.
ボリュームは、例えばチェス盤のような3Dコンテンツを表示するのに適しています。人々は、空間内でボリュームを再配置することができ、それらは異なる角度から見ることができます。ボリュームはSwiftUIのシーンなので、使い慣れた方法でレイアウトを行うことができ、RealityKitの力を使って3Dコンテンツを表示することができます。

スペース

Elementsの3つめのSpace(スペース)については、次項にて詳細にまとめる。

Shared Space と Full Space

スペースにはShared SpaceとFull Spaceがある。

Shared Space

macOSのデスクトップやiOSのホーム画面のように、複数のアプリが並んで存在する場所。

ユーザーは、パススルー(後述)によって周囲とつながっている。

Full Space(フルスペース)

アプリのウィンドウ、ボリューム、3Dオブジェクトだけが表示される専用のスペース。

フルスペースでは、アプリのウィンドウ、ボリューム、コンテンツを、周囲のどこにでも配置できる。

フルスペースでは、ARKitのAPIを活用することもできる。

For example, in addition to system-provided gestures, you can get more detailed Skeletal Hand Tracking to really incorporate the structure of people's hands into your experience.
たとえば、システムが提供するジェスチャーに加えて、より詳細なスケルトン ハンド トラッキングを使用して、人の手の構造を実際に体験に取り込むことができます。

Thanks to ARKit and RealityKit, your virtual content can even interact with your surroundings. You could throw a virtual ball into the room and watch as it bounces off of the wall and then rolls on the floor. And with the addition of hand tracking, you can build custom gestures and interactions or place the content relative to people's hands. Many of these capabilities are coming from ARKit.
ARKitとRealityKitのおかげで、あなたのバーチャルコンテンツは、周囲の環境と相互作用することもできます。 バーチャルなボールを部屋の中に投げ入れると、それが壁に当たって跳ね返り、床の上を転がる様子を見ることができます。 また、ハンドトラッキングを追加すれば、カスタムジェスチャーやインタラクションを構築したり、コンテンツを人の手と相対的に配置することができます。 これらの機能の多くは、ARKitから提供されるものです。

Full Spaceと没入感

Full Spaceには、Immersion Styleという没入感に関するパラメータを渡すことができる。それについては後述。

Passthrough と Fully Immersive

Shared Spaceのところでちらっと "Passthrough"(パススルー)という用語が出てきたが、これと対になる用語が"Fully Immersive" で、これらは周囲の環境との結びつきを表す。

Passthrough

You can use passthrough to ground content in the real world and keep people connected with their surroundings.
And when you play Spatial Audio and render 3D through RealityKit you will automatically take advantage of the fact that the device will continually update understanding of the room to blend visuals and sound into people's surroundings, making them feel that these virtual objects really belong in their room.
パススルーを使ってコンテンツを現実の世界に置き、人々を周囲の環境と結びつけておくことができます。また、空間オーディオを再生してRealityKitで3Dレンダリングすると、デバイスが部屋の理解を継続的に更新することを自動的に利用して、ビジュアルとサウンドを人々の周囲に溶け込ませ、仮想オブジェクトが本当に自分の部屋にあるかのように感じさせることができます。

Fully Immersive

You can also choose to render to a fully-immersive space to fill up the entire field of view.
This allows your app flexibility to deliver on creative intent of your app by customizing the lighting of virtual objects, as well as the ability to choose audio characteristics.
また、視界全体を埋め尽くすような没入感のある空間へのレンダリングを選択することも可能です。これにより、仮想オブジェクトの照明をカスタマイズしたり、オーディオ特性を選択したりすることで、アプリのクリエイティブな意図を実現するための柔軟性が生まれます。

Immersion Style

Immersion Styleは、Full Spaceで渡すことができるパラメータ。

.mixed と .full

.mixedと.fullという2つの基本スタイルがある。

  • .mixed スタイルは、パススルーの上にアプリのコンテンツを重ねるスタイル

  • .full スタイルはパススルーを隠し、あなたのコンテンツのみを表示する

.progressive

.progressiveを選択することで、これら2つを組み合わせることもできる。このスタイルでは、最初はパススルーが可能だが、デバイスの上部にあるデジタルクラウンを回すことで、没入感のレベルをフルまで変更することができる。

ここから先は

0字

文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/