ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
RealityKitとReality Composerの紹介
ARのために設計されたRealityKitを使用すると、デベロッパはワールドクラスのレンダリング、アニメーション、物理エンジン、スペーシャルオーディオの機能を利用できます。このセッションでは、従来の3Dエンジンを刷新するRealityKitを活用して、これまでになく迅速かつ簡単にARを開発する方法を紹介します。RealityKitベースのAppやゲームの開発の基本、およびReality ComposerでAR体験のコンテンツのプロトタイピングと作成を行う方法についてご確認ください。
リソース
関連ビデオ
WWDC21
WWDC20
WWDC19
-
ダウンロード
(音楽)
(拍手) こんにちは
コディです RealityKitとReality Composerの セッションへようこそ
今のApp Storeは― ARKitの力を活用した 多様なAR体験に満ちています そうしたAppの 開発者に必要なのは― 例えばレンダリング 物理演算 アニメーションです
ARKitで簡単になった AR体験の構築を― さらに簡単にします
ARアプリケーションの 開発には― 他にはない 極めて独特の課題があります その軸にあるのは 仮想コンテンツが― 現実世界と 相互作用するという事実です
現実の居間に仮想のランプを置いた場合 現実か仮想かを問わず 周囲のオブジェクトを照らすべきで 加えて 現実世界に置かれた コンテンツは― 実物に見えるべきです
そしてこれはオンラインショッピングでは 非常に重要です 製品を家に置くと どう見えるか確かめたい
そこで非常にリアルな レンダリングが求められます そうでなければ 拡張現実による魔法が 消えてしまいます
RealityKitは― 全く新しい Swiftのフレームワークで ARアプリケーションの構築を 支援し― ARKitの力を活用しやすくします
RealityKitはARファースト つまり― ARアプリケーション開発に 重点を置き― ゼロから作られた フレームワークです
特に重視したのが 非常にリアルな物理ベースレンダリングと― 現実の環境での 精密なオブジェクトシミュレーションです
また Swiftの力を 最大限に活用し― 非常にシンプルなAPIの 質の高いフレームワークを 提供します
さらにReality Composerも 発表します ARコンテンツが簡単に作れる MacとiOSのためのツールです その直感的なデザインは 自分のコンテンツを― 身近に 配置したい人向けで―
ARにシーンを 直接 配置することも可能です
まずはRealityKitを 実際に見てみましょう
現実のリビングルームにソファーとテーブルがあり テーブルには小物がいくつか載っています
被写界深度を故意に浅くし 若干ぼかしています ここにRealityKitで 仮想オブジェクトを足して― 実物のように見せることができます
ご注目ください 精密な照明や影 カメラエフェクトにより― こんなにも 違和感がなくなります こういう非現実的な物でも
RealityKitは 困難な作業を緩和し― コンテンツを 自然になじませます デベロッパはフレームワークに 出したい場所を指定し― カスタムロジックがあれば Appに追加するだけ
初めてのAppを起動して実行するのは 本当に簡単です 先ほどのAppに― 必要なコードは4行でした これです 水平面のアンカーを配置し アセットバンドルから モデル“flyer”を読み込み― モデルを水平面のアンカーにアタッチします
コンセプトの意味は 徐々に説明します
RealityKitを構成するシステムと 基本を見ていきます すぐに使えるように
RealityKitは― その組み込みシステムで 多くの処理を引き受けます
ARKitやMetalなど 他のAppleのフレームワークと― 統合されたシステムです
まずはレンダリングシステム コンテンツを現実の環境で すばらしくリアルに見せます 物理ベースシェーディングが 精密に― 光とマテリアルの相互作用を シミュレートします すべてがMetalを基盤としているため― Appleデバイス用に 高度に最適化されています Metalが提供する 低レベルの機能― マルチスレッド・レンダリングなどを 活用します 00:05:17.716 --> 00:05:18.752 align:start position:4% line:90%,end RealityKitはARアプリケーション用に 設計されているため
レンダリングの機能群の重点は― 現実の環境でコンテンツを 引き立たせることにあります
アニメーションは コンテンツに命を吹き込み シーンを豊かにします このRealityKitのアニメーションシステムは― ボーンとトランスホーム 両方のアニメーションをサポートし ともに USDZから インポートできます ARKitの モーションキャプチャ機能で― オブジェクトをアニメーション化することも できます
物理システムは― 現実のオブジェクトも含め コンテンツ間の複雑な相互作用を シミュレートします
その衝突検知システムは 直方体や球 さらには 複合図形など― 数種類のproxy shapeを サポートしています 質量 慣性 摩擦 反発などの― 剛体の力学も シミュレートします
RealityKitはネットワーク機能を内蔵しており 現実世界のデータの 共通表現も含めて― デバイス間のシーンを 同期します
AppleのMultipeer Networking Libraryが 基盤となっています このシステムは そのまま使えて― 連動するAppを簡単に オートマチックに構築できます
RealityKitはエンティティ・ コンポーネント・システムで― オブジェクトのデータを 表現します 大規模な オブジェクト継承階層ではなく― プロパティ合成で コンテンツが簡単に作れます カスタムコンポーネントを 作り― 独自のデータと機能を エンティティに追加することもできます さらにカスタムを含む 全コンポーネントのデータは― ネットワーク経由で 他のデバイスと― 自動同期できるので データの共有が非常に簡単です
ここまで見てきた システムは― ARの見た目を 際立たせるもので それがすべてではありません 現実のものと思えるほどの― 没入型コンテンツの作成には 音響も重要です
RealityKitの音響システムは 3D空間を理解し― 動的コンテンツに 音源を配置できます ですから仮想オブジェクトが 遠くにあれば― 音が遠く聞こえ 近ければ 近く聞こえます
RealityKitは 新たなファイル形式― Realityファイルを 定義しました 最適化されたコンテンツを 格納するファイルで 中身はApp構築に 不可欠なもの 例えばメッシュ マテリアル 物理プロパティ 音源です
RealityKitはUSDZファイルからの インポートもサポートします AR Quick Lookに似た機能ですが Realityファイルは アップロードが速く― コンテンツ制御も強化されます
ファイルはReality Composerから 直接エクスポートできます Really Composerについては 後ほど説明します RealityKitのAPIを使う際 主に4つの領域を使います 構築するアプリケーションの 種類は問いません ARView アンカー シーン エンティティです
まずはビューもしくはARViewと 呼ばれているものから始めましょう
ViewはAR App作成の大変な作業の多くを 引き受けてくれます よってデベロッパは AR体験に集中できます そして役立つ機能が満載です 例えばジェスチャの 完全サポートにより― iOSデバイスで どんなジェスチャにも反応でき― どのエンティティも簡単に ユーザの入力に対応 レンダリングによる リアルなカメラエフェクトも― 仮想コンテンツと現実世界の 統合に役立ちます 実際 ARViewは― AR Quick Lookと全く同じ質と 機能群を提供します 実際にカメラエフェクトを 見てみましょう
コンテンツを実物のように感じさせる 重要な効果の一つが― 説得力のある影です 接地感を出します このように 影が存在しないと― ロボットの相対位置が 判断しにくくなります 浮いているのか ブロックに乗っているのか 影があれば 3D空間のどこにいるか明白です ARViewの 接地感を出す影は2種類で パフォーマンスとのバランスを考えて 選べます 単純なドロップシャドウか― 今見ているよりリアルな レイトレースシャドウです
ARKitが提供する カメラの露光時間を― ARViewは自動で読み取り― モーションブラーを シーンの全仮想コンテンツに適用し ライブカメラの画像のブラーと 一致させます 酔わないでくださいね
酔わないでくださいね
モーションブラーが 有効になってないと― ビデオフィードに 貼り付けただけに見えます
いいですね
リアルな被写界深度の アルゴリズムで― さまざまなピントをモデル化します 情報はARKitが提供します デバイスのカメラが現実世界で ピントを合わせると― ARViewは仮想コンテンツの ピントの合わせ方を同じにします この動画ではカメラのピントが 前後し続けて― 柱ごとにピントを合わせています
(拍手)
ARViewは仮想コンテンツに ノイズを足します ARKitの新機能 Camera Grainが提供します デジタルカメラは 特に暗い所ではノイズが入るので ノイズを仮想コンテンツに足すと ユーザには― 現実世界のように見えます カメラ画像に 貼り付けたものではなくてね
このロボットは ノイズが全くないと― 環境になじんでない感じです ノイズが入ると 貼り付けではなく― 奥にいるように感じられます
次はエンティティ 創造するAR体験の 主要な構成要素です シーン内の 仮想コンテンツは― 機能を提供するコンポーネントを 持つエンティティです どのエンティティも 親子関係になれます シーン構造の設定と 変形階層の構築を助けるので― ローカル空間のオブジェクトが 推論しやすくなります 例を挙げます 仮想のコップを 仮想のテーブルに置きたい時― テーブルのエンティティを親にして 同時に動くようにします
次はアンカー設定です なぜARの 重要なコンセプトなのか 現実のオブジェクトは 大抵 動いています 仮想コンテンツを 投影するなら― その動きに合わせるのが リアルなAR体験には不可欠です
例えばテーブルの上の雑誌の画像に 固定したコンテンツは― 現実に雑誌がどう動こうと 固定が維持されるべきです
解決策としてRealityKitは ARKitのアンカーを― APIの 第一級オブジェクトにします 平面 体 顔 カメラなど 使える全アンカーをサポートします
現実世界のサーフェスは コンテントのアンカーになれるものが多く エンティティの階層の ローカルルートにできます アンカーはどう機能するか コンテンツを設置したい 水平面と垂直面があるとします 例えばテーブルや壁です どれもアンカーに使えますし―
エンティティ階層を 取り付けられます ここで重要なのは― エンティティ階層が アクティブになるのは― 現実世界で一致するアンカーを ARKitが特定した時 例えば水平面のアンカーに 取り付けたエンティティを― 現実世界で見られるのは― ARKitが水平面を 正しく認識した時です コンテンツが宙に浮くだけに ならないように
新しいアンカーを 一度に導入できます 例えば画像アンカー 壁に貼った 本物の写真を囲う― 仮想フレームの表示に 使います その写真を動かすとします 例えば違う壁に貼ったり 左にずらしたりすると― 仮想フレームも 一緒に動きます
最後にARシーンの構造を 見てみましょう どれも ここで見るとおりに なります
起点はARView これはAR世界への入り口で シーンへの参照を含みます
シーンには手動で さまざまなアンカーを足すことができます
エンティティを読み込むたびに 任意のアンカー または― 古いエンティティに取り付けて エンティティ階層が作れます
この例では― 2つのアンカーが エンティティ階層を作ります
以上のことを念頭に― ライブデモを見てみましょう
(拍手) 何をやるかというと― 目の前にある この平面を検出し そこに― 仮想コンテンツを乗せます 使うのはRealityKitの― プロシージャルメッシュ 生成ライブラリ
出してみます 仮想のおもちゃも足します それが箱と相互作用します こうなります
オブジェクト間の相互作用は 物理システムが処理しています 飛行機が周りを飛んでいるかのように アニメーション化しています RealityKitは― 照明 影付け カメラエフェクトを 自動処理し できるだけ― 現実の環境になじませようと するのです このAppは たった数行のコードでキューブを読み込み メッシュを読み込み 置きたい場所を― RealityKitに伝えます 以上です (拍手) 次はタイラーが― RealityKitを さらに掘り下げます (拍手) ありがとう
RealityKitと Reality Composerで― 使える機能をご説明します まず見ていくのは―
ARアプリケーションに 最初に必要なものです
RealityKitはEntity Component design patternを使い― オブジェクトを構築します エンティティはシーン構造を設定し 変形階層を築き― ローカル空間のオブジェクトを 推論しやすくします 慣れてない人でも大丈夫 かなり簡単に使えます
エンティティを構成するのが さまざまなコンポーネントで エンティティに追加できる ビヘイビアや― データとして定義されます この設計パターンは 厳格な継承ベースとは違い― より多くのコードを 使えますし― より柔軟にできます メモリ配置と マルチスレッド化で パフォーマンスも 大きく向上します エンティティとコンポーネントを わかりやすく説明するために 例を挙げます
アプリケーション内で よく使われるオブジェクト ボール ランプ カメラです これらに共通するビヘイビアが 多くあります 例えばアンカー設定 3つとも 現実世界に固定すべきなので― Anchoring Componentを 足します
ボールとランプは 可視化されているので― Model Componentを 足せます 可視化されていないカメラは 除きます この合成を優先する設計が 威力を発揮します オブジェクトを衝突させる Collision Componentを追加 求めるビヘイビアが示されるまで これを続けます これらのビヘイビアは 非常に独特ですが― コードの構造化により― 重複を避け ビヘイビアを再利用できます
エンティティ作成コードです エンティティは パラメータを取りませんが― 一度エンティティを作成すると添字演算子で コンポーネントを足せます 同様にコンポーネントの 削除や修正ができます エンティティのビヘイビアを 動的に修正できます
addChildメソッドで 子エンティティを足せます そして次の階層で―
子エンティティの 親からの相対位置を定義します ワールド位置を 設定したい場合― setPositionメソッドの relativeToが使えます 相対エンティティとして nilを定義します つまりワールド空間が必要です デベロッパはアプリケーションの 作成にすぐにでもとりかかりたいでしょうから 設定済みですぐに使える さまざまなエンティティを提供します アンカー設定や ビジュアルコンテンツの追加や― 動的光源など よくある用途を網羅しています エンティティの インスタンス化で― 必要なコンポーネントが 設定済みとなりすぐに使えます エンティティの使い方を 見てみましょう まずはAnchorEntity 現実世界への接着剤で― ARアプリケーションで これを最初に設定することが 多くあります
固定する現実世界のオブジェクトを 指定します そのオブジェクトが動いても― Anchor Entityは離れません このため 多くの場合 AR体験のルートとなり― 追加コンテンツの 基盤になります
ARKit内で使えるアンカーを 全てサポートするので― コンテンツを迅速に 現実世界に出せます 例えばコンテンツを取り付ける 画像やオブジェクトを指定して 指定に一致するアンカーが 検出されると― 自動的に付いて 現実世界に現れます
ARAnchorやARRaycastResultが 既にあれば― 直接 固定できます では作成コードを 見てみましょう
作成の際は 固定したい対象を記述します ここではAnchorEntityの planeを水平面に classificationはテーブルで― 最小値は 0.5メートル×0.5メートルです
ARViewのシーンに このアンカーを足します 追加しても すぐにはアクティブにはなりません 指定に一致するアンカーを ARKitが検出できないと― アクティブになりません 一致するアンカーを検出すると― 下位エンティティも含め アクティブになります よくAR体験のルートに なるとはいえ― AnchorEntityが複数 必要な場合もあります 例えばテーブルに固定したい コンテンツと― 画像に固定したいコンテンツが あります これらは全て同じシーンに存在しますが コンテンツを貼り付ける 現実のオブジェクトは別のものが2つあります
コンテンツの取り付け先を設定し コンテンツを追加します ModelEntityの出番です これはRealityKitの主力で 使用頻度は高いでしょう 物理演算 アニメーション レンダリングを仮想世界に統合するために必要な― 構成要素を備えています ModelとPhysicsと Collisionの― 各コンポーネントを持つ エンティティです これらのエンティティは コードで動的に作成でき― USDZやRealityファイルから 直接読み込むことも可能
ここでは ファイルから読み込んでいます loadModel呼び出しで 明示的に読み込みます 重い処理で レンダリングスレッドが― ブロックされかねないので こうした場合に 対処できるよう― 非同期バリアントを提供します 非同期バリアントについては後ほど説明します モデルが読み込まれたら― アンカーに取り付けて 準備完了 アンカーが検出されたら モデルは現実世界に現れます
ModelEntityの構造を 見てみましょう ModelEntityに まず含まれる メッシュリソースは― モデルの幾何学的表現を 提供します プリミティブとして 直接 生成でき― USDやRealityファイルから 読み込むことも可能
メッシュは重くなりがちなので 複数のエンティティで共有できます また レンダリングを 最適化でき― 複数の描画を 一括処理できます ファイルから 取得しなくても― プリミティブ群から 直接 生成できます これには直方体 球 平面そして プラットフォームの 全フォントをサポート するテキストを含みます
モデルの幾何学的構造は メッシュが定義しましたが 外見を定義する方法が必要です マテリアルの出番です オブジェクトの外見と雰囲気 光との相互作用を提供します
RealityKitの 物理ベースレンダリングは― 現実世界の光のビヘイビアを シミュレートし― シームレスに 融合できるようにします マテリアルはオブジェクトの シミュレーションをカスタマイズ ModelEntityを読み込む際の 事前定義も― RealityKitのマテリアル群からの 作成も可能です
まずはSimpleMaterial 普通の物理ベースのマテリアルには 多くのパラメータがあります 現実世界の照明は 本当に複雑だからです SimpleMaterialは 簡略化したパラメータ群で スカラー入力か― サーフェス入力を変える場合 テクスチャを取ります
光沢のあるプラスチックや つや消しの金属や― 着色ガラスを作成できます 3つのプロパティで実現します baseColor roughness metallicです 名前の通りbaseColorはマテリアル全体の 色を設定します 例えば赤いオブジェクトを 青くできます
metallicはマテリアルの 反射をシミュレートし― 表面と光の相互作用に 影響を与えます metallicの値がゼロなら 反射がないということです つまり光は 表面を透過しやすく― 表面下の色が外見を左右します この値を1.0にすると― 反射がよくなります 光は表面で すぐに再放射されます 金属的な外見になります roughnessは オブジェクトの見た目の粗さと― 表面の反射の見え方に 影響します
次はUnlitMaterial オブジェクトの色を 提供しますが― SimpleMaterialと違い 物理ベースレンダリングに関与せず シーンの光に影響されません 全体の色が フラットになります 暗い環境で テキストやコンテンツを― 明るくしておくのに 役立ちます 使い方の例を見てみましょう 仮想のテレビを配置しました TV boxには SimpleMaterialを使い― 画面には UnlitMaterialを使いました 電気を消すと テレビは薄暗くなり― 画面は明るいまま 環境の照明に 影響されないからです
以上の2つは さまざまな外見を可能にします 3つ目はビヘイビアが 全く違いますが― 同じく重要です OcclusionMaterialです オブジェクトに 影響を与えるのではなく― その背後のオブジェクトを 隠して― カメラからの画像を素通しします これで現実のオブジェクトに 隠れたように見えます ここでは現実世界のテーブルの上に 平面を作成し― OcclusionMaterialを適用 テーブルから出てくるという 錯覚を与えます コディのデモで お気づきでしょうか
これをしないと オブジェクトの位置が判断できず― ユーザの没入体験が 壊れかねません
こうした ModelEntityの構成要素― メッシュリソースやマテリアルは コードでどう記述するか見てみましょう
直方体のメッシュを生成します 呼び出しは generate prefixを使います 作業中であることを 明示するためです
軽くて初期化が速い マテリアルは― イニシャライザから 直接 作成できます メッシュとマテリアルが できたら― ModelEntityを作り 渡すだけです
AR体験のビジュアルコンテンツが 作れる― 構成要素ができました しかし 命を吹き込むには やはりアニメーションです RealityKitは2種類の アニメーションをサポートします ボーンとトランスフォームの アニメーションです 両方ともファイルから 読み込めますが― トランスフォームアニメーションは 直接RealityKitから作成することも可能
どちらもplayAnimationメソッドで 再生でき― animation controllerオブジェクトを 返します このコントローラで 再生制御ができます 一時停止して 現在のタイミングを維持したり― 現在の状態を 確認して再開したり― 停止したりできます
アセットに 直接 作っていなくても― エンティティは 移動関数でアニメート可能 まずはアニメーションさせたい トランスフォームを設定します ここでは 5メートル前進させます そして必要に応じ そのトランスフォームの相対空間を定義します ここはワールド空間なので nilに
次にアニメーションの 長さを設定します 次にイージング関数で 滑らかさを定義します これで簡単な トランスフォームアニメーションが完成
これらを組み合わせて RealityKitは― AR体験の構築に 重点を置いています 今年は新たな フレームワークに加え― 開発ワークフローに 沿ったツールを発表します Reality Composerです
macOSはXcode 11で iPadとiPhoneは― App Storeで入手できます Reality Composerは iOSデベロッパが― AR体験と3D体験を 簡単に作れるよう支援します 3Dへの移行は大変な作業です Reality Composerで気楽に ARシーンを構築してください 支援機能をいくつか組み込んだので ご説明します
新しいプロジェクトを始める時 まず現実世界に物を取り込みます これを簡単にするコンテンツ群を 用意しました シーンに直接 統合することもでき― 最終コンテンツができるまでの プレースホルダーにもなります 単純な図形も日用品も 巨大なビルもあります
静的アセットではありません このらせん図形は― 柔軟に作成できるパラメータを 提供します このように 押し出しと圧縮ができます 金属バネに見えるよう アルミのマテリアルを使います
コンテンツを直接 統合できる モデルも豊富です 例えば このフレーム この中に写真を配置し― 構築するAR体験のスタイルに 合うフレームを選べます
見たとおりのものが得られる環境を 提供します 構築しながら簡単に レイアウトと事前視覚化ができます ここではポーンの列をコピーし 外見を変え― チェス盤の反対側に 増やせます
事前視覚化では ARでコンテンツを見られます 正しくスケーリングされ― 現実世界の環境に合うか 確認できます
Reality Composerで 動作をシーンに追加でき― AR体験に命を吹き込む 相互作用を設定できます 簡単な例を見てみましょう チェス盤に 相互作用を発生させたい 黒のルークの頭を軽くたたいたら キングを チェックメイトに追い込むように 最初に behavior panelを開き― ビヘイビアを追加します
定義済みのビヘイビアがあるので “Tap&Flip”を選択 これがアクションシークエンスの トリガーです 今はルークのアニメーションが 強調されています 相互作用のため モーションタイプを― “Flip”から“Jiggle”に変えます
次に“Move”を追加して ルークを所定の位置に移動し― 移動距離を微調整します これで相互作用を プレビューできます ルークをたたくと 小さく揺れて― キングを追い込みます (拍手) こうした機能で簡単に― 見栄えのいいコンテンツを作れて ARで体験できます お見せしたのは iPadの機能ですが― macOSでもiPhoneでも 使えます
Reality Composerは 独立アプリケーションですが Xcodeでの開発とエコシステムで 緊密に統合されます Xcodeプロジェクトをビルドする時 コンテンツは― アプリケーションに統合され 最適化されます しかしXcodeプロジェクト アプリケーションの作成までの間に― 魔法が生まれます コード生成です プロジェクトのコンテンツは コンパイルされ― Realityファイルに最適化されます 次はファイルの中身を見て オブジェクトにアクセスする カスタマイズされたコードを生成
このコード生成は Xcodeが自動的に行います コンテンツへの 強い型付けのアクセスを設定します こうすればシーン内の オブジェクトの命名に― 不一致があっても― 発生するのは実行時のエラーではなく コンパイルエラーで済みます
シーン内のビヘイビアの トリガーを直接呼び出せるので カスタムアクションを 作成することもできます
Reality Composerでの コンテンツ構築と― Xcodeでのコーディングは シームレスです
以上が Reality Composerの概要です もっともっとお見せしたい ここまでは 氷山の一角にすぎません ネットワーキング レイキャスティングなど― 説明していないエリアが 多くあります 他のセッションにも ぜひどうぞ 明日のBuilding Apps with RealityKitの セッションでは― マルチプレーヤーの ARアプリケーションを構築します 木曜日のBuilding AR Experiences with Reality Composerの セッションでは― ARアプリケーションのワークフローに 統合する方法を探ります ラボにもご参加ください どんな質問も 喜んでお答えします ありがとうございました よいWWDCを (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。