シーンモデルでライティングの見積もりを使用する

Lighting Estimator API が、特定の画像に個別の視覚的な手がかりを分析し、特定のシーンにおける照明についての詳細な情報を提供します。仮想オブジェクトを配置するときにそのような情報を使用して、配置されたシーンと同じ条件下で光を当てることで、オブジェクトをよりリアルに感じ、ユーザーの没入感を高めることができます。

ライティングの手がかりとコンセプト

人間は、周囲の環境における物体や生き物の照明について、無意識に認識します。仮想オブジェクトに影がない、または光沢のあるマテリアルがあり、周囲の空間が反射していない場合、ユーザーは、オブジェクトが説明されなかった場合でも、特定のシーンにうまく収まらないと感知できます。そのため、シーン内の照明に合わせて AR オブジェクトをレンダリングすることは、没入感のあるリアルなエクスペリエンスを実現するうえで非常に重要です。

ライティング見積もりでは、仮想オブジェクトのレンダリング時にさまざまなライティングを模倣できる詳細なデータが提供されるため、ほとんどの作業を自動化できます。これらのキューは、シャドウアンビエント ライトシェーディングスペキュラー ハイライトリフレクションです。

このような視覚的な手がかりは、次のように説明できます。

  • 周囲光。アンビエント ライトは、環境全体を照らす全体的な拡散光で、すべてのものを照らします。

  • シャドウ。多くの場合、シャドウは方向性を持ち、光源のソースを示します。

  • シェーディング。網かけは、特定の画像のさまざまな領域の光の強度です。たとえば、同じシーン内で異なる部分のシェーディングのレベルは、ビューアに対する角度や光源との距離に応じて異なります。

  • スペクトルのハイライト。これらが、光源を直接反射するサーフェスの輝くビットです。オブジェクト上のハイライト表示は、シーン内の視聴者の位置に応じて変化します。

  • 振り返り。ライトは、サーフェスに鏡面(反射性)特性があるか、拡散(反射しない)特性があるかによって、バウンス方法が異なります。たとえば、金属球は高度に鏡面反射し、その環境を反映しますが、薄暗いマットグレーに塗られた別の球は拡散します。現実世界のほとんどの物体では、これらのプロパティが組み合わされています。たとえば、ボウリングを施したボウリングボールやよく使われているクレジット カードなどが挙げられます。

    反射面には周囲環境からのも検出されます。オブジェクトの色は、その環境の色によって直接影響を受けることがあります。たとえば、青い部屋にある白いボールは青みがかった色合いになります。

ライティング推定モードを使用してリアルさを高める

Config.LightEstimationMode API には、周囲の粒度を推測するモードがあり、粒度と現実感の度合いが異なります。

  • 環境 HDR モードENVIRONMENTAL_HDR)。このモードは、方向性のある照明、シャドウ、鏡面ハイライト、反射に対してリアルな照明の推定を可能にする API で構成されます。

  • 背景強度モードAMBIENT_INTENSITY)。このモードは、特定の画像の平均ピクセル強度と照明の色を決定します。これは、ライティングが組み込まれているオブジェクトなど、正確なライティングが重要ではないユースケース向けに設計された粗い設定です。

  • DISABLED。特定の環境に合わせて照明がシーンやオブジェクトと関連性がない場合は、Config.LightEstimationMode を無効にします。

ENVIRONMENTAL_HDR モードの使用

ENVIRONMENTAL_HDR モードでは、入力カメラ画像を分析し、環境照明を合成して仮想オブジェクトをレンダリングします。

このモードでは、方向性照明、周囲球面ハーモニクス、HDR キューブマップを組み合わせて、仮想オブジェクトが特定のシーンに物理的に存在するかのように感じられるようにします。

  • 方向照明は、指定された画像の見かけの光源を分析します。この種のライティングでは、適度に配置された鏡面ハイライトを追加し、他の表示されている実際の物体と一致する方向に影を投影します。

  • 周囲の球面ハーモニクスは、シーン内のすべての方向から来る全体的な周囲光をリアルに表現します。レンダリング時にこの情報を使用して、仮想オブジェクトの定義を明らかにする微妙なキューを追加します。

  • HDR キューブマップは、仮想オブジェクトの周囲の環境光をキャプチャします。レンダリング時に、このキューブマップは光度が中程度から高いものについて反射を作成します。

次の図は、ENVIRONMENTAL_HDR を有効にしたシーンに配置された仮想オブジェクトの例を示しています。

シーンシーンの ENVIRONMENTAL_HDR モードを構成する

ENVIRONMENTAL_HDR をシーンシーンで使用するには、ARFragment クラスを拡張し、次のように構成をオーバーライドします。

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
  return config;
}

この仕組みの例については、ソーラー システムのサンプルをご覧ください。(このサンプルでは、ARFragment を使用しないで ENVIRONMENTAL_HDR を実装します)。

AMBIENT_INTENSITY モードの使用

AMBIENT_INTENSITY モードでは、特定の画像の平均ピクセル強度と色補正スカラーを決定します。これは、ライティングが組み込まれているオブジェクトなど、正確なライティングが重要ではないユースケース向けに設計された粗い設定です。

  • ピクセル強度は、仮想オブジェクト全体に適用するために、シーンの平均的な照明のピクセル強度をキャプチャします。

  • 色補正スカラーは、個々のフレームのホワイト バランスを検出し、仮想オブジェクトの色を補正します。これにより、シーンの全体的な色彩にスムーズに溶け込むようになります。

シーンシーンの AMBIENT_INTENSITY モードを構成する

AMBIENT_INTENSITY をシーンシーンで使用するには、ARfragment クラスを拡張し、次のように構成をオーバーライドします。

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
  return config;
}