장면 양식에 광원 추정 사용

Lighting Estimation 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;
}