開発
開発
プラットフォームを選択

パススルーの再照明

更新日時: 2025/07/22

概要

このドキュメントでは、パススルーの再照明(PTRL)サンプルの機能と構造について順を追って説明します。Unityシーンの仮想的な光と影が、床、壁、机などのシーンオブジェクトや空間アンカーオブジェクトと相互作用できるように、Unityプロジェクトをどのように設定できるかを示します。これは、バーチャルコンテンツをパススルーで表示される現実世界の環境とブレンドさせるのに役立ちます。

要件

サンプルアプリの説明

アプリが起動すると、光と影がシーンオブジェクトと相互作用するのが見えます。影やハイライトが投影されるキャラクター(オッピー)の動きを制御します。
これらのライティングエフェクトは、他のバーチャルシーンと同じように現実世界の物体にさえぎられるために、環境の奥行きによって隠されています。
左右のコントローラーのサムスティックを使ってオッピーの動きを制御できます。サムスティックを上に動かすと、オッピーがヘッドセットの相対的な前方向に動きます。
オッピーをジャンプさせるには、AX、またはグリップボタンを押してください。移動しながらジャンプすることも可能で、机のようなシーンオブジェクト上でジャンプするようにも促されます。ジャンプボタンを押し続けると、オッピーが高くジャンプします。
コントロールパネルは左コントローラーに取り付けられ、右コントローラーから出る光線とのインタラクションが可能です。選択には右トリガーを使用します。パネルを通して、ハイライトと影のレンダリングパラメーターを調整したり、シーンオブジェクトとシーンメッシュを切り替えたり、パススルーの明るさと奥行きチェックを変更したりできます。

シーンの概要

エクスペリエンスの実装は、サンプルの中にPassthroughRelightingという単一のシーンとして存在します。
シーンの主な要素は次のとおりです。
  • キャラクター「オッピー」。
    • 影を落とす平行光源。
    • オッピーの上に浮かぶ炎のキャラクター。点光源が付いていて、シーンの平面や立体にハイライトを投影している
  • カメラとコントローラーを動かすOVRCameraRig
  • パススルーを表示するためのOVRPassthroughLayerコンポーネントがあるOVRPassthrough
  • ユーザー定義のシーンアンカーに関する情報を取得してPTRLマテリアルでプレファブをオーバーロードするための、MRUKコンポーネントがあるMRUK prefab。
  • PTRLシェーダー付きマテリアルをグローバルメッシュに適用するための、EffectMeshコンポーネントがあるEffectMeshGlobalMeshゲームオブジェクト。
  • EffectMeshゲームオブジェクトは、EffectMeshコンポーネントで、他のシーンオブジェクトにPTRLエフェクトマテリアルを適用します。
  • OVRInteraction prefabには、ユーザーによるUIパネルの操作を可能にするRayInteracterが含まれています。

プロジェクトの構造

パススルーでハイライトと影を作成するために必要な以下のものはすべて、コアフォルダーの MRUKパッケージに入っています。
  • シェーダー: 影を受けてハイライト点光源をレンダリングするパススルーエフェクトを実装するBiRPとURPの両方に対するサブシェーダーがあるHighlightsAndShadows
  • マテリアル: TransparentSceneAnchorマテリアルは、前述のHighlightsAndShadowsシェーダーを使用することで、シーン形状に適用されます。
  • テクスチャー: blobシャドウを作るために必要なテクスチャー。
  • prefab: シーンの平面、シーンの立体、シーンメッシュのprefabが含まれており、すでに前述のマテリアルを使っています。このprefabは、UnityシーンのOVRSceneManagerコンポーネントの各セクションにすぐに挿入できます。
オッピーと炎のキャラクターのリソースは、サンプル内のそれぞれのフォルダーに分かれています。

パススルーの再照明のMRプロジェクトへの追加

Import the MRUK package to your project and add the MRUK prefab to your scene.
プロジェクトにMRUKパッケージをインポートし、MRUK prefabをシーンに追加します。EffectMeshコンポーネントを追加し、その[MeshMaterial]フィールドにTransparentSceneAnchorマテリアルをリンクします。MRUKStartコンポーネントを追加し、新しく作成したEffectMeshCreateMeshメソッドをMRUKStartシーンの読み込み済みイベントリストにリンクします。

複数の点光源のサポート

複数の点光源からのハイライトを表示するには、プロジェクト設定でピクセルごとの光源の必要量を必ず指定します。BiRPの場合、この設定を[Pixel Light Count(ピクセルライトカウント)]といい、[プロジェクト設定] > [品質]で指定できます。
Universal Render Pipeline AssetのURPについては、[ライティング]で[Additional Lights(追加ライト)]を[Per Pixel(ピクセルごと)]に設定し、[Per Object Limit(オブジェクトごとの制限)]を必要な数に設定します。

影のクオリティー

影の表現は、プロジェクトのクオリティー設定によって異なります。
プロジェクトに正しい影のクオリティーを設定するには、[Project Settings (プロジェクト設定)] > [Quality (クオリティー)]に移動します。[Shadow (影)]を有効にし、[Shadow Resolution (影の解像度)]を設定して、[Shadow Distance (影の距離)]を設定します。距離が小さいほど、影の質は高くなります。

ハイライトとシャドウシェーダー

Illustrating how the highlights and shadows shader renders an image.
PTRLHighlightsAndShadowsシェーダーは、点光源からのハイライトの強度を計算し、透明度を調整する影領域をマークします。このシェーダーはOpenXRコンポジターで処理され、パススルーレイヤーとブレンドされます。
このシェーダーでレンダリングされた仮想オブジェクトが実際の物理的な対応物と重なっていると、ライティングのし直しのエフェクトが作成され、仮想的な光でオブジェクトが照らされて仮想的なオブジェクトによる影ができます。
PTRLHighlightsAndShadowsBiRPサブシェーダーには、次のような複数のパスが含まれています。
最初のForwardAddパスは、点光源、ハイライト、および追加の並行光源ハイライトを対象とします。このパスは、メインのライトとみなされない光それぞれに対して実行されます。ディフューズ寄与を累計します。このとき、通常のディフューズシェーダーが持つようなAlbedoコンポーネントを乗算しません。
その後、ForwardBaseパスがメインの光の影を処理します。それによって、マテリアルに設定された影の強度を乗算した黒の色が出力されます。
最後に、2つ目のForwardAddパスが、追加の平行光源による影の寄与を加算します。

URPのバージョン

PTRLエフェクトを単一のパスで実装するURPサブシェーダーもあります。UniversalForwardパスは、すべての光源からの光の大きさと影を計算します。

blobシャドウ

blobシャドウは、リアルタイムシャドウの代替手段としてよく使われています。これは、オブジェクトの形状を考慮に入れないシンプルな色のブロットで、パフォーマンスがより高くなります。オッピーのエンティティには、このテクニックを可能にするゲームオブジェクトBlobShadowが含まれています。BlobShadowオブジェクトは、Projectorコンポーネントのほか、対応するフォルダーに入っている特定のマテリアルとシェーダーを用いて設計されています。
ナビゲーションロゴ
日本語
© 2026 Meta