API оценки освещения анализирует данное изображение на наличие дискретных визуальных сигналов и предоставляет подробную информацию об освещении в данной сцене. Затем вы можете использовать эту информацию при рендеринге виртуальных объектов, чтобы освещать их в тех же условиях, что и сцена, в которую они помещены, делая эти объекты более реалистичными и повышая эффект присутствия для пользователей.
Освещение и концепции
Люди бессознательно воспринимают тонкие сигналы относительно того, как предметы или живые существа освещаются в их окружении. Когда у виртуального объекта отсутствует тень или он имеет блестящий материал, который не отражает окружающее пространство, пользователи могут почувствовать, что объект не совсем вписывается в конкретную сцену, даже если они не могут объяснить, почему. Вот почему рендеринг объектов AR в соответствии с освещением в сцене имеет решающее значение для захватывающего и более реалистичного опыта.
Lighting Estimation выполняет большую часть работы за вас, предоставляя подробные данные, которые позволяют имитировать различные сигналы освещения при рендеринге виртуальных объектов. Этими сигналами являются тени , окружающий свет , затенение , зеркальные блики и отражения .
Мы можем описать эти визуальные сигналы следующим образом:
Окружающий свет. Окружающий свет — это общий рассеянный свет, который исходит из окружающей среды, освещая все вокруг.
Тени. Тени часто являются направленными и сообщают зрителям, откуда исходят источники света.
Затенение. Затенение — это интенсивность света в различных областях данного изображения. Например, разные части одного и того же объекта могут иметь разные уровни затенения в одной и той же сцене в зависимости от угла относительно зрителя и его близости к источнику света.
Зеркальные блики. Это блестящие части поверхностей, которые напрямую отражают источник света. Блики на объекте меняются в зависимости от положения зрителя в сцене.
Отражение. Свет отражается от поверхностей по-разному в зависимости от того, обладает ли поверхность зеркальными (то есть сильно отражающими) или рассеянными (не отражающими) свойствами. Например, металлический шар будет очень зеркальным и будет отражать окружающую среду, в то время как другой шар, окрашенный в тусклый матовый серый цвет, будет рассеянным. Большинство объектов реального мира обладают комбинацией этих свойств — вспомните обшарпанный шар для боулинга или хорошо использованную кредитную карту.
Отражающие поверхности также улавливают цвета окружающей среды. На окраску объекта может напрямую влиять окраска окружающей его среды. Например, белый шар в синей комнате приобретет голубоватый оттенок.
Использование режимов оценки освещения для повышения реалистичности
API Config.LightEstimationMode
имеет режимы, которые оценивают освещение в среде с разной степенью детализации и реализма.
Экологический режим HDR (
ENVIRONMENTAL_HDR
). Этот режим состоит из API, который позволяет реалистично оценивать направленное освещение, тени, зеркальные блики и отражения.Режим интенсивности окружающей среды (
AMBIENT_INTENSITY
). Этот режим определяет среднюю интенсивность пикселей и цвет освещения для данного изображения. Это грубая настройка, предназначенная для случаев, когда точное освещение не имеет решающего значения, например, для объектов с запеченным освещением.DISABLED
. ОтключитеConfig.LightEstimationMode
, если освещение, соответствующее данной среде, не имеет отношения к сцене или объекту.
Использование режима ENVIRONMENTAL_HDR
Режим ENVIRONMENTAL_HDR
использует машинное обучение для анализа входного изображения с камеры и синтеза окружающего освещения для визуализации виртуального объекта.
Этот режим сочетает в себе направленное освещение, окружающие сферические гармоники и кубическую карту HDR, чтобы виртуальные объекты выглядели так, как будто они физически являются частью данной сцены:
Направленное освещение анализирует видимый источник света для данного изображения. Этот вид освещения добавляет правильно расположенные зеркальные блики и отбрасывает тени в направлении, соответствующем другим видимым реальным объектам.
Окружающие сферические гармоники дают реалистичное представление общего окружающего света, поступающего со всех сторон сцены. Во время рендеринга эта информация используется для добавления тонких подсказок, которые выявляют определение виртуальных объектов.
Кубическая карта HDR захватывает освещение окружающей среды, окружающее виртуальный объект. Во время рендеринга эта кубическая карта создает отражение для материала с глянцем от среднего до высокого.
На следующем изображении показан пример виртуального объекта, помещенного в сцену с включенным ENVIRONMENTAL_HDR
.
Настройте режим ENVIRONMENTAL_HDR
для сцены Sceneform.
Чтобы использовать ENVIRONMENTAL_HDR
со сценой Sceneform, расширьте класс ARFragment
и переопределите конфигурацию следующим образом:
@Override
protected Config getSessionConfiguration(Session session) {
Config config = new Config(session);
config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
return config;
}
Чтобы увидеть пример того, как это работает, см. образец Солнечной системы . (Этот пример реализует ENVIRONMENTAL_HDR
без использования ARFragment
.)
Использование режима AMBIENT_INTENSITY
Режим AMBIENT_INTENSITY
определяет среднюю интенсивность пикселей и скаляры коррекции цвета для данного изображения. Это грубая настройка, предназначенная для случаев использования, в которых точное освещение не имеет решающего значения, например, для объектов с запеченным освещением.
Интенсивность пикселей фиксирует среднюю интенсивность пикселей освещения в сцене для применения ко всему виртуальному объекту.
Скаляры коррекции цвета определяют баланс белого для каждого отдельного кадра и позволяют корректировать цвет виртуального объекта, чтобы он более плавно интегрировался в общую окраску сцены.
Настройте режим AMBIENT_INTENSITY
для сцены Sceneform
Чтобы использовать AMBIENT_INTENSITY
со сценой Sceneform, расширьте класс ARfragment
и переопределите конфигурацию следующим образом:
@Override
protected Config getSessionConfiguration(Session session) {
Config config = new Config(session);
config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
return config;
}