플랫폼별 가이드
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는 장면의 기본 광원의 방향과 강도를 계산합니다. 이 정보를 사용하면 장면의 가상 객체가 적절하게 배치된 스펙큘러 하이라이트를 표시하고 다른 눈에 보이는 실제 객체와 일치하는 방향으로 그림자를 만들 수 있습니다.
작동 방식을 알아보려면 동일한 가상 로켓의 다음 두 이미지를 살펴보세요. 왼쪽 이미지에는 로켓 아래에 그림자가 있지만 그 방향이 장면의 다른 그림자와 일치하지 않습니다. 오른쪽의 로켓에서는 그림자가 올바른 방향을 가리킵니다. 미묘하지만 중요한 차이점입니다. 그림자의 방향과 강도가 장면의 다른 그림자와 더 잘 일치하므로 장면에서 로켓을 고정할 수 있습니다.
기본 광원 또는 조명된 물체가 움직이면 물체의 스펙큘러 강조 표시가 광원과 관련하여 실시간으로 위치를 조정합니다.
방향성 그림자는 실제와 마찬가지로 기본 광원의 위치를 기준으로 길이와 방향을 조정합니다. 이 효과를 설명하기 위해 가상 마네킹과 실제 마네킹을 예로 들어 보겠습니다. 왼쪽 마네킹은 가상 마네킹입니다.
대기 구면 조화 함수
ARCore는 기본 방향 광원의 빛 에너지 외에도 장면의 모든 방향에서 들어오는 전반적인 주변광을 나타내는 구면 조화 함수를 제공합니다. 렌더링 중에 이 정보를 사용하여 가상 객체의 정의를 드러내는 미묘한 신호를 추가합니다.
동일한 로켓 모델의 두 이미지를 살펴보겠습니다. 왼쪽의 로켓은 기본 방향성 조명 API에서 감지한 조명 추정 정보를 사용하여 렌더링됩니다. 오른쪽의 로켓은 기본 방향 조명과 주변 구면 정리 함수 API에서 감지한 정보를 사용하여 렌더링됩니다. 두 번째 로켓은 시각적으로 더 명확하게 정의되어 있으며 장면과 더 원활하게 조화를 이룹니다.
HDR 큐브맵
HDR 큐브맵을 사용하여 반짝이는 금속 표면과 같이 중간에서 높은 광택이 있는 가상 객체에 사실적인 반사를 렌더링합니다. 큐브맵은 객체의 음영 및 모양에도 영향을 미칩니다. 예를 들어 파란색 환경으로 둘러싸인 반사 물체의 재료는 파란색 색조를 반사합니다. HDR 큐브맵을 계산하려면 소량의 추가 CPU 계산이 필요합니다.
HDR 큐브맵을 사용해야 하는지 여부는 객체가 주변을 반사하는 방식에 따라 다릅니다. 가상 로켓은 금속이므로 주변 환경을 직접 반사하는 강한 스펙큘러 구성요소가 있습니다. 따라서 큐브맵의 이점을 누릴 수 있습니다. 반면 무딘 회색 무광 재료가 적용된 가상 물체에는 반사 구성요소가 전혀 없습니다. 색상은 주로 확산 구성요소에 따라 달라지며 큐브맵의 이점을 활용할 수 없습니다.
아래의 로켓을 렌더링하는 데 세 가지 Environmental HDR API가 모두 사용되었습니다. HDR 큐브맵을 사용하면 반사 신호를 사용 설정하고 장면에서 객체를 완전히 배치하는 추가 강조 표시를 사용할 수 있습니다.
다음은 조명이 다른 환경에서 촬영된 동일한 로켓 모델입니다. 이 모든 장면은 세 가지 API의 정보를 사용하여 렌더링되었으며 방향성 그림자가 적용되었습니다.
주변 밝기 모드
대기 조명 강도 모드는 특정 이미지의 평균 픽셀 강도와 색상 보정 스칼라를 결정합니다. 이는 베이킹된 조명이 있는 객체와 같이 정확한 조명이 중요하지 않은 사용 사례를 위해 설계된 대략적인 설정입니다.
픽셀 강도
장면에서 조명의 평균 픽셀 강도를 캡처합니다. 이 조명을 전체 가상 객체에 적용할 수 있습니다.
색상
각 프레임의 화이트 밸런스를 감지합니다. 그런 다음 가상 객체가 장면의 전체 색상에 더 원활하게 통합되도록 색상 보정할 수 있습니다.
환경 프로브
환경 프로브는 360도 카메라 뷰를 큐브 맵과 같은 환경 텍스처로 구성합니다. 그런 다음 이러한 텍스처를 사용하여 가상 객체(예: 주변 공간을 '반사'하는 가상 금속 공)에 사실적인 조명을 적용할 수 있습니다.