ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
UnityのVRアプリのフルイマーシブ空間への展開
既存のUnity VRアプリとゲームをviisionOSにどう移植するかご紹介します。取り掛かるためのワークフローを探求しUnity Input Systemでどのように目と手のためのアプリとゲームを作成するかお見せします。UnityのXR Interaction ToolKit、Foveatedレンダリング、そしてベストプラクティスを学びます。
関連する章
- 0:01 - Intro
- 2:28 - Build and run workflow
- 3:15 - Prepare your graphics
- 5:56 - Input options
- 13:43 - Wrap-Up
リソース
関連ビデオ
WWDC23
-
ダウンロード
♪ ♪ ♪ こんにちは ARKitチームの Christopherです UnityのPeterです UnityはXRエコシステムの エンジンで 簡単にプロジェクトを新プラットフォームに 移植できるようにしました Peterと共に すでに慣れているUnityワークフローで 「Rec Room」のようなイマーシブな 体験の作り方をご紹介します まずはFull Immersive styleで Immersive Spaceを作ります Passthroughを隠し 別世界に連れて行きます イマーシブな体験では UnityはCompositor Servicesを利用し アプリにMetalレンダリング能力を与えます またARKitを利用し skeletal hand trackingなどで 体の位置と環境を検知します Unityはこれらの技術で Unityエンジンと同じサービスを提供します Unityでの イマーシブな体験作りには 2つのアプローチがあります プレイヤーの環境を アプリの環境と置き換え イマーシブにする方法と passthroughでプレイヤーの環境と ミックスしてイマーシブな体験を 作り出す方法です 2つ目のアプローチは 「Create immersive Unity apps」を ご覧ください ではPeterがこれらのAppleの新技術が イマーシブなVRゲームの移植において どう役立つかお話しします ありがとう Christopher まずAgainst Gravityの 「Rec Room」をご紹介します 人気のVRソーシャルプラットフォームで 世界中の人々とゲームを作り プレーするものです Unityゲームエンジンで作られ ゲーム開発にパワフルかつ 柔軟性があります 新プラットフォームに VRコンテンツを簡単に持ち込める ツールや技術をいくつかご紹介します Unityコンテンツをも持ち込む上で 念頭におくべきことがあります Unityからデバイスに展開する際の ワークフローを説明します グラフィックに関し 注意すべきことがあります 最後にコントローラーからハンド入力への 採用について Unityのツールについてお話しします まずワークフローは みなさんも既にお馴染みのはずです フルサポートを提供し わずか数ステップで このデバイスで作動します まずはビルドターゲットの選択です そしてほかのVRプラットフォーム同様 XR Plug-inを可能にします ネイティブplug-inに依存なら コンパイルが必要です それとは逆に rawソースコードか.mmファイルなら 準備オッケーです iOSとMacや Apple TVターゲット同様に Unityからのビルドは Xcodeプロジェクトを生成します そして速いイテレーションのため Xcodeでデバイスかシミュレータで ビルド及び実行できます ユーザーの環境を イマーシブの体験に変える グラフィックパイプラインは おそらく見慣れているはずです しかし重要な概念が いくつかあります どのプロジェクトでも最初に レンダリングパイプラインを選びます Universal Render Pipelineは 理想的な選択です このプラットフォームで特別機能の Foveated Renderingが可能になります
Foveated Renderingは 目の焦点があっているであろう 各レンズの中央に画素密度を集中させ 目がそれほど敏感でない周辺は 詳細を減らす技術です これによりユーザーは より良い体験を経験できます Universal Render Pipelineでは Static Foveated Renderingが 全工程に使用されます Post-processingや camera stackingにHDRなど すべてのURP機能が使用できます Foveated Renderingが役立つ カスタムレンダーパスがあれば それを有効に使える 新しいAPIsがあります レンダーは非線形空間で行われるため そのリマップを行う shader macrosがあります Static Foveated Renderingは 必要なピクセルにリソースを使い 優れた画質体験を創造できます 画質向上のもう一つの方法は Single-Pass Instanced Renderingです Unityではこのレンダリングで Metal graphics APIをサポートし デフォルトでオンになっています Single-Pass Instanced Renderingは 両目で一つのドローコールだけで cullingやshadowsなど 一部の工程でオーバーヘッドを削減します これは両目のレンダリングによる CPUオーバーヘッドを減少させます もしほかのVRプラットフォームで Single-Pass Instanced Renderingで 正しくレンダリングされるなら shader macrosは ここでも使用できるはずです 最後にもう一つ 各ピクセルのZバッファが 正しいか確認してください System compositorが再投影に Zバッファを使用します 深度情報がないと エラーカラーでそれを示唆します その例がskyboxで 通常ユーザーから遠いため reverse Zで深度を0と書きます そのためデバイスで修正が必要になります Unityのshadersが 正しいZバッファを書くよう 訂正してありますが skyboxやwater effect transparency effectsなどがカスタムの場合 各ピクセルの深度に何らかの 値があることを確認してください レンダリングが済めば インタラクティブにさせる時です このデバイスではユニークで 手と目を使って コンテンツと対話します Unityアプリには 対話方法を加える方法がいくつかあります XR Interaction Toolkitは 既存プロジェクトに簡単に hand trackingを追加できます またUnity Input Systemで システムジェスチャーに反応できます そしてUnity Hands Packageで カスタム対話のための raw hand joint dataにアクセスできます XRIとして知られる XR Interaction Toolkitは 高度な対話システムを提供します ツールキットは入力を 対話に移しやすいようデザインされ 3DとUI objectsの両方に使用できます XRIはhand trackingのような 入力を抽出し アプリが反応する アクションに移します つまり違う入力方法を受け入れる プラットフォームを通して 入力コードが使用できます XRIはHoverやgrabやselectなど 3D及びインターフェスでの共通対話に対し 反応しやすくします またlocomotion systemで イマーシブな空間を快適に 移動できるようになります 人々が没入するには ビジュアルフィードバックが重要です XRIは各入力制約における 視覚反応の定義を可能にします XRIのコアはInteractableと Interactorで構成されます Interactablesはシーン内の 入力を受けられるもの Interactorsは人々がInteractablesと どう対話するかを定義します Interaction Managerがこれらを結びます 最初のステップはシーンの どのobjectsが対話可能で どう対話に反応するかを決めます Interactable componentを objectに加えます 3つの組み込みタイプがあります Simpleはojectsが 対話を受けていると記します この場合 SelectEnteredや SelectExitedにサブスクライブできます Grabはobjectが選ばれるか掴まれ Interactorに従い 放すと その速さを受け継ぎます TeleportAreaやTeleportAnchorの ようなTeleportは プレイヤーがテレポートするエリアや 点を定義します Interactableはカスタマイズも可能です InteractorsはInteractableと タグしたobjectsを選ぶか 対話する責任があります 各フレームにhover overか 選べるinteractablesのリストを定義します Interactorsには幾つかタイプがあります Direct Interactorsは触れている Interactablesを選びます Interactable objectに 手が触れたり近付いた時に これらを選びます Ray Interactorsは 遠くからの対話に使います このInteractorは カーブや直線やカスタマイズ可能な 視覚化など設定可能で プロジェクトの視覚スタイルに適応できます ユーザーが対話し始めると どう対話するかオプションがあります 例えばgrab interactionなら objectをユーザーの手に動かせます Ray Interactorは ゲームプレイに合わせるため grabの域を制限することもできます イマーシブな体験で一般的な対話は objectを掴み 関連性ある場所に置くことです 電池をソケットに入れるのがその例です Socket Interactorが objectを受け入れられる場所を記します これらのInteractorsは手ではなく それ以外の場所にあります Hand trackingやコントローラーで ユーザーが自然に求める 共通の対話タイプがpokeです Directに似ていますが direction filteringが含まれ 対話を引き起こすには 正しいアクションが必要になります 視線で対話する場合 Ray Interactorを拡張させた Gaze Interactorで 視線に対応しやすくなります 例えばGaze Interactorsは自動的に Interactablesのcollidersを大きくし 選択が楽になります これらをまとめるため Interaction Managerは InteractorsとInteractablesの 中間仲介役として働き 情報交換を促進させます 主な役割は InteractorとInteractablesの 特定グループ内で 対話状態への変更を起こすことです 通常 すべてのInteractablesに対する すべてのinteractorsの 可能性を容易にするため 一つのInteration managerが設立されます あるいは幾つもの ユニークなInteractorsと Interactablesを持つ Interaction Managersを利用できます これらは特定の対話のセットを 可能にしたり不可能にしたりできます 例えばシーンやメニューにより 違うセットのinteractablesが あるかもしれません 最後にXR Controller componentが 入力データを解読します 手やデバイスからの入力アクションを Interactorsにパスしそれに基づき選んだり 何かを稼働する決定を下します
XR Interaction Statesには Input Action Referencesを バインドする必要があります XR Controller componentは 手やコントローラーにつき 一つだけと限られないため 両手とコントローラーを 個別にサポートできます XRIのサンプルコードに その方法が示されています XRIの高機能に加え オプションとして Unity Input Systemから直接 システムジェスチャー入力も使用できます そしてタップジェスチャーのような プラットフォームの組み込み型対話を システムにマップできます Unity Input Systemのbinding pathsで システムジェスチャーに アクセスや反応できます 例えばpinchジェスチャーは そのpositionとrotationを含む valueとして実行され 入力アクションにバインドされます Pinchジェスチャーとして 同じフレームで焦点を向ける場合は positionとrotationです さらなる柔軟性のために Unity Hands Subsystemで Unity Hands Packageを通しシステムから raw hand joint dataを利用できます Unity Hands Packageは プラットフォームを通し一貫した low-level hand joint dataに アクセスできます 例えばサムズアップや 指を指すジェスチャーで 各関節を見てどれだけポーズに 似ているかを決めるコードを書き ゲームプレイのアクションに 移すこともできます これはパワフルですが 人によって手のサイズが違い 動かし方も違うので 非常に難解にもなりえます このコードは人差し指が 伸ばされた状態を定義しています OnHandUpdate eventから このメソッドを呼び片手に適用できます まず特定の関節をチェックし 人差し指の伸びを確認します いずれかがinvalidならfalseが戻ります いずれもvalidなら 指が丸くなっていないかチェックします これを他の指に適用すれば basic gesture detectionsを実行できます Raw hand joint dataで custom hand mesh visualの マッピングもできます ゲームの作風にあった 手を作ることができます 例えば「Rec Room」では raw hand joint dataを使い 作風にあった手のモデルを表示しています またイマーシブ性を増すため 他のプレイヤーの手も見えます Unity Hand packageのサンプルコードで raw hand joint accessを探求できます みなさんのVR体験を 楽しみにしています このプラットフォームでの Unityのサポートと ベータアクセスに関しては unity.com/spatialをご覧ください すでにお馴染みの Unityワークフローで イマーシブなVR体験を この新しいプラットフォームに 持ち込むことができます ではおさらいです ここでは このプラットフォームに みなさんのVRコンテンツを持ち込む ツールと技術をご紹介しました 新しいプロジェクトには Unity 2022以降を使用します 既存のプロジェクトは 2022にアップグレードしましょう Universal Render Pipelineを 採用しましょう 組み込み型はサポートしますが 将来改良されるのはUniversal Pipelineです コントローラー用対話を 手に応用しましょう XR Interaction Toolkitと Unity Hands packageで可能です 最後にUnityで passthroughを使った イマーシブな体験を創造したいなら 「Create immersive Unity apps」を ご覧ください また「空間コンピューティング向けの ゲーム開発」で このプラットフォームで どんなゲームが可能かがわかります みなさんの作品が楽しみです ありがとうございました ♪
-
-
12:46 - Translate raw joints into gameplay actions
// Translate raw joints into gameplay actions static bool IsIndexExtended(XRHand hand) { if (!(hand.GetJoint(XRHandJointID.Wrist).TryGetPose(out var wristPose) && hand.GetJoint(XRHandJointID.IndexTip).TryGetPose(out var tipPose) && hand.GetJoint(XRHandJointID.IndexIntermediate).TryGetPose(out var intermediatePose))) { return false; } var wristToTip = tipPose.position - wristPose.position; var wristToIntermediate = intermediatePose.position - wristPose.position; return wristToTip.sqrMagnitude > wristToIntermediate.sqrMagnitude; }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。