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