プラットフォーム固有のガイド
Android(Kotlin/Java)
Android NDK(C)
Unity(AR Foundation)
Unreal Engine

リアルな AR 体験を実現するうえで重要なのは、照明を適切に設定することです。仮想オブジェクトに影がない場合や、周囲の空間を反射しない光沢のある素材が使用されている場合、ユーザーは理由を説明できなくても、オブジェクトが周囲の空間にうまく溶け込んでいないことを感じ取ることができます。これは、人間が環境内のオブジェクトの照明に関する手がかりを無意識に認識するためです。照明推定 API は、指定された画像でこのようなキューを分析し、シーンの照明に関する詳細情報を提供します。この情報は、仮想オブジェクトをレンダリングする際に、配置されたシーンと同じ条件でオブジェクトを照らすために使用できます。これにより、ユーザーは現実感のある世界に没頭し、エンゲージメントを維持できます。
照明キュー
照明推定 API は、仮想オブジェクトをレンダリングする際にさまざまな照明キューを再現できる詳細なデータを提供します。これらのキューは、影、周囲光、陰影、鏡面ハイライト、反射です。
影
影は方向性を持つことが多く、光源の方向を視聴者に伝えます。
周囲光
アンビエント ライトは、環境の周囲から入ってくる全体的な拡散光で、すべてを可視化します。
シェーディング
シェーディングは光の強さです。たとえば、同じオブジェクトの異なる部分が、ビューアに対する角度や光源との距離に応じて、同じシーン内で異なるレベルのシェーディングを持つことがあります。
鏡面ハイライト
鏡面ハイライトは、光源を直接反射するサーフェスの光沢のある部分です。シーン内の視聴者の位置に応じて、オブジェクトのハイライトが変化します。
気分
光は、表面が鏡面反射(反射率が高い)特性を持つか、拡散反射(反射しない)特性を持つかによって、表面から異なる反射をします。たとえば、金属製のボールは鏡面反射率が高く、周囲の環境を反射しますが、鈍いマットグレーで塗装された別のボールは拡散します。現実世界のほとんどのオブジェクトは、これらのプロパティの組み合わせを持っています。傷ついたボウリングのボールや、使い古されたクレジットカードを考えてみてください。
反射面は周囲の環境の色も拾います。オブジェクトの色は、環境の色に直接影響を受ける可能性があります。たとえば、青い部屋にある白いボールは青みがかった色合いになります。
環境 HDR モード
これらのモードは、方向性照明、シャドウ、鏡面ハイライト、反射のきめ細かいリアルな照明推定を可能にする個別の API で構成されています。
Environmental HDR モードでは、機械学習を使用してカメラ画像をリアルタイムで分析し、環境光を合成して、仮想オブジェクトのリアルなレンダリングをサポートします。
この照明推定モードでは、次のことが可能です。
メインの指向性ライト。メインの光源を表します。影をキャストするために使用できます。
アンビエント球体調和関数。シーン内の残りのアンビエント ライト エネルギーを表します。
HDR キューブマップ。光沢のある金属オブジェクトの反射をレンダリングするために使用できます。
これらの API はさまざまな組み合わせで使用できますが、最もリアルな効果を得るには、一緒に使用するように設計されています。
メインの方向性ライト
メインの方向性ライト API は、シーンのメインの光源の方向と強度を計算します。この情報により、シーン内の仮想オブジェクトに、合理的な位置にスペキュラ ハイライトが表示され、他の可視の現実世界のオブジェクトと一貫性のある方向に影が投影されます。
この仕組みを理解するために、同じ仮想ロケットの 2 つの画像を考えてみましょう。左の画像では、ロケットの下に影がありますが、その方向がシーン内の他の影と一致していません。右側のロケットでは、影が正しい方向を向いています。これは微妙ながらも重要な違いであり、影の方向と強度がシーン内の他の影とより一致するため、ロケットがシーンに溶け込むようになります。

主な光源または照明付きオブジェクトが動いている場合、オブジェクトの鏡面ハイライトは、光源に対してリアルタイムで位置を調整します。
方向性のある影も、現実世界と同じように、メインの光源の位置に応じて長さと方向が調整されます。この効果を説明するために、仮想と現実の 2 つのマネキンを考えてみましょう。左側のマネキンはバーチャル マネキンです。

アンビエント球面調和関数
ARCore は、メインの指向性ライトの光エネルギーに加えて、シーン内のあらゆる方向から差し込む全体的なアンビエント ライトを表す球面調和関数を提供します。この情報をレンダリング時に使用して、仮想オブジェクトの定義を引き出す微妙なキューを追加します。
同じロケット モデルの 2 つの画像を考えてみましょう。左側のロケットは、メインの指向性ライト API によって検出された照明推定情報を使用してレンダリングされています。右側のロケットは、メインの方向光とアンビエント球体調和関数 API の両方で検出された情報を使用してレンダリングされています。2 つ目のロケットは、視覚的な定義がより明確で、シーンにシームレスに溶け込んでいます。

HDR キューブマップ
HDR キューブマップを使用して、光沢が中程度から高い仮想オブジェクト(光沢のある金属面など)にリアルな反射をレンダリングします。キューブマップは、オブジェクトのシェーディングと外観にも影響します。たとえば、青い環境に囲まれた鏡面オブジェクトのマテリアルは、青い色合いを反射します。HDR キューブマップの計算には、追加の CPU 計算が少し必要です。
HDR キューブマップを使用するかどうかは、オブジェクトが周囲の環境をどのように反射するかによって異なります。仮想ロケットは金属製であるため、周囲の環境を直接反射する強いスペキュラ コンポーネントがあります。したがって、キューブマップのメリットを享受できます。一方、鈍いグレーのマットなマテリアルを持つ仮想オブジェクトには、スペキュラ コンポーネントがまったくありません。色は主に拡散コンポーネントに依存するため、キューブマップのメリットはありません。
以下のロケットのレンダリングには、3 つの Environmental HDR API がすべて使用されています。HDR キューブマップを使用すると、反射キューが有効になり、オブジェクトがシーンに完全に配置されるようにさらにハイライト表示されます。

同じロケットモデルを異なる照明環境で撮影した写真です。これらのシーンはすべて、3 つの API からの情報を使用してレンダリングされ、方向性シャドウが適用されています。

アンビエント強度モード
アンビエント強度モードでは、特定の画像の平均ピクセル強度と色補正スカラーが決定されます。これは、ベイク処理されたライティングを含むオブジェクトなど、正確なライティングが重要でないユースケースで使用するために設計された粗い設定です。
ピクセルの強度
シーン内の照明の平均ピクセル強度を取得します。この照明は仮想オブジェクト全体に適用できます。
色
各フレームのホワイト バランスを検出します。その後、仮想オブジェクトの色を補正して、シーンの全体的な色合いにスムーズに統合できます。
環境プローブ
環境プローブは、360 度カメラビューをキューブマップなどの環境テクスチャに整理します。これらのテクスチャは、仮想オブジェクトをリアルに照らすために使用できます。たとえば、仮想の金属球が、その球がある部屋を「反射」するような効果を出すことができます。