Использование оценки освещения с моделями Sceneform

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