プラットフォーム固有のガイド
Android(Kotlin/Java)
Android NDK(C)
Unity(AR Foundation)
Unreal Engine
リアルな AR 体験を作成するための重要な要素は、照明を適切に設定することです。仮想オブジェクトに影がない場合や、光沢のあるマテリアルが仮想オブジェクトに周囲の空間を反映していない場合、ユーザーはその理由を説明できなくても、オブジェクトがうまく収まらないと感じることがあります。これは、人間が周囲の物体の照明の状態に関する手がかりを無意識に認識するためです。Lighting Estimation API は、指定された画像からこのような合図を分析し、シーンの照明に関する詳細情報を提供します。仮想オブジェクトをレンダリングする際にこの情報を使用して、仮想オブジェクトが配置されているシーンと同じ条件下でオブジェクトを照らし、ユーザーをしっかり惹きつけることができます。
照明の合図
Lighting Estimation API は、仮想オブジェクトのレンダリング時にさまざまな照明キューを模倣できる詳細なデータを提供します。これらのキューには、シャドウ、アンビエント ライト、シェーディング、スペキュラ ハイライト、反射があります。
影
影にはさまざまな方向性があり、視聴者に光源がどこから来ているのかがわかるようになっています。
周囲光
周囲光とは、周囲から入ってくる拡散光のことで、すべてのものが映し出されます。
シェーディング
日陰とは、光の強さのことです。たとえば、同じシーン内の同じオブジェクトの異なる部分では、視聴者からの角度や光源からの距離に応じて、シャドウのレベルが異なる場合があります。
鏡面反射ハイライト
鏡面反射ハイライトは、光源を直接反射するサーフェスの光沢のある部分です。オブジェクトのハイライトは、シーン内の視聴者の位置に応じて変化します。
気分
光がサーフェスから反射する様子は、サーフェスが鏡面反射(高反射)か拡散反射(非反射)かによって異なります。たとえば、金属製のボールは光沢が高く、周囲を反射しますが、マットグレーに塗装されたボールは拡散します。ほとんどの実在のオブジェクトには、これらのプロパティが組み合わされています。たとえば、擦り傷のあるボウリング ボールや、よく使用されたクレジット カードなどです。
反射面は周囲の環境の色も拾います。オブジェクトの色は、その環境の色に直接影響を受ける可能性があります。たとえば、青い部屋にある白いボールは青みがかった色になります。
環境 HDR モード
これらのモードは個別の API で構成されており、ディレクショナルな照明、シャドウ、鏡面的なハイライト、反射について、詳細でリアルな照明推定を行うことができます。
Environmental HDR モードでは、機械学習を使用してカメラ画像をリアルタイムで分析し、環境光を合成して仮想オブジェクトのリアルなレンダリングをサポートします。
この照明推定モードでは、次のことができます。
メインの指向性ライト。メインの光源を表します。影を投影するために使用できます。
アンビエント球面高調波。シーン内の残りの環境光エネルギーを表します。
HDR キューブマップ。光沢のある金属製のオブジェクトの反射をレンダリングするために使用できます。
これらの API はさまざまな組み合わせで使用できますが、最もリアルな効果を得るには、組み合わせて使用することをおすすめします。
メインの指向性ライト
メインの指向性ライト API は、シーンのメイン光源の方向と強度を計算します。この情報により、シーン内の仮想オブジェクトに適度に配置された鏡面反射ハイライトを表示し、他の可視実物と一致する方向に影を投影できます。
この仕組みを理解するため、同じ仮想ロケットの 2 つの画像について考えてみましょう。左側の画像では、ロケットの下に影がありますが、その方向はシーン内の他の影と一致していません。右側のロケットでは、影が正しい方向を指しています。違いは微妙ですが重要です。影の方向と強度がシーン内の他の影と一致するため、ロケットがシーンに溶け込みます。
メインの光源または照明が当てられたオブジェクトが動いている場合、オブジェクトのスペキュラ ハイライトは光源に対してリアルタイムで位置を調整します。
ディレクショナル シャドウは、現実世界と同じように、メインの光源の位置に応じて長さと方向を調整します。この効果を説明するために、2 つのマネキン(1 つは仮想マネキン、もう 1 つは実在のマネキン)について考えてみましょう。左側のマネキンはバーチャルなマネキンです。
周囲球面高調波
ARCore は、メインの指向性光の光エネルギーに加えて、シーンのすべての方向から入ってくる全体的なアンビエント光を表す球面調和関数を提供します。レンダリング時にこの情報を使用して、仮想オブジェクトの定義を際立たせる微妙な合図を追加できます。
同じロケットモデルの 2 つの画像について考えてみましょう。左側のロケットは、メインのディレクショナル ライト API によって検出された照明推定情報を使用してレンダリングされています。右側のロケットは、メイン ディレクション ライト API とアンビエント球面調和 API の両方で検出された情報を使用してレンダリングされています。2 つ目のロケットは、視覚的に明確で、シーンにシームレスに溶け込んでいます。
HDR キューブマップ
HDR キューブマップを使用すると、中程度から高程度の光沢を持つ仮想オブジェクト(光沢のあるメタリック表面など)にリアルな反射をレンダリングできます。キューブマップは、オブジェクトのシェーディングと外観にも影響します。たとえば、青い環境に囲まれた鏡面反射オブジェクトのマテリアルは、青い色合いを反射します。HDR キューブマップの計算には、追加の CPU 計算が少し必要になります。
HDR キューブマップを使用するかどうかは、オブジェクトが周囲をどのように反射するかによって異なります。仮想ロケットは金属であるため、周囲の環境を直接反射する強い鏡面反射成分があります。したがって、キューブマップを利用できます。一方、くすんだグレーのマット マテリアルの仮想オブジェクトには、スペキュラ コンポーネントはまったくありません。色は主に拡散成分に依存し、キューブマップを使用するメリットはありません。
以下のロケットのレンダリングには、3 つの Environmental HDR API すべてが使用されています。HDR キューブマップを使用すると、反射キューとハイライトを有効にして、オブジェクトをシーンに完全に配置できます。
同じロケットモデルを、照明が異なる環境で撮影した写真です。これらのシーンはすべて、3 つの API からの情報を使用してレンダリングされ、ディレクショナル シャドウが適用されています。
アンビエント インテンシティ モード
アンビエント輝度モードでは、指定された画像の平均ピクセル輝度と色補正スカラーが決定されます。これは、正確なライティングが重要でないユースケース(ライティングがベイクインされたオブジェクトなど)向けに設計された粗い設定です。
ピクセルの輝度
シーン内の照明の平均ピクセル強度をキャプチャします。このライトは、仮想オブジェクト全体に適用できます。
色
個々のフレームのホワイトバランスを検出します。その後、仮想オブジェクトの色補正を行い、シーン全体の色にスムーズに統合できるようにします。
環境プローブ
環境プローブは、360 度カメラビューをキューブマップなどの環境テクスチャに整理します。これらのテクスチャを使用して、仮想物体(たとえば仮想の金属製のボール)を映し出す空間を「反射」して、現実的な照明にすることができます。