Modelowanie scen z oświetleniem

Interfejs Lighting Estimation API analizuje dany obraz pod kątem odrębnych sygnałów wizualnych i wyświetla szczegółowe informacje o oświetleniu na danej sceny. Możesz wykorzystać te informacje podczas renderowania obiektów wirtualnych, aby oświetlić je w takich samych warunkach jak te, w których są umieszczone, dzięki czemu stają się one bardziej realistyczne i atrakcyjniejsze dla użytkowników.

Wskazówki i koncepcje oświetlenia

Ludzie nieświadomie postrzegają subtelne sygnały dotyczące tego, jak oświetlone są obiekty lub żywe zwierzęta. Kiedy obiekt wirtualny nie ma cienia lub ma błyszczący materiał, który nie odzwierciedla otaczającego go obszaru, użytkownicy mogą zauważyć, że obiekt nie pasuje do danej sceny, nawet jeśli nie potrafi wyjaśnić, dlaczego tak się dzieje. Właśnie dlatego renderowanie obiektów AR w taki sposób, żeby pasowało do oświetlenia sceny, jest niezwykle realistyczne i wciągające.

Szacowane oświetlenie wykonuje większość czynności za pomocą szczegółowych danych, które umożliwiają naśladowanie różnych wskazówek dotyczących oświetlenia podczas renderowania obiektów wirtualnych. Dotyczy to cieni, oświetlenia otoczenia, cieniowania, rozświetlenia i odbicia.

Możemy opisać te wskazówki wizualne w ten sposób:

  • Światło otoczenia. Światło otoczenia to główne, rozproszone światło, które oświetla się wokół otoczenia, oświetlając wszystko.

  • Cienie. Cienie są często kierunkowe i wskazują widzom, skąd pochodzą źródła światła.

  • Cieniowanie. Intensywność światła w różnych obszarach obrazu jest intensywna. Na przykład różne obszary tego samego obiektu mogą mieć różne poziomy cieniowania w ramach tej samej sceny w zależności od kąta względem widza i jego odległości od źródła światła.

  • Najważniejsze zmiany. To błyszczące powierzchnie, które bezpośrednio odbijają światło. Wyróżnienie w przypadku zmiany obiektu względem pozycji widza w scenie.

  • Odczucia. Światło odbija się od powierzchni w różny sposób – zależnie od tego, czy ma ona być blaskowa (czyli odblaskowa) czy rozproszona (nie odbijająca). Na przykład metalowa kula powinna być bardzo spektakularna i odzwierciedlać otoczenie, a inna kula pomalowana na matowy szary. Większość obiektów w rzeczywistości rzeczywistej ma połączenie tych właściwości – na przykład pompowana kula do gry w kręgle lub dobrze użyta karta kredytowa.

    Powierzchnie odblaskowe gromadzą też kolory z otoczenia. Na kolor obiektu może bezpośrednio wpływać kolor środowiska. Na przykład biała kula w niebieskim pokoju przybierze kolor niebieskawy.

Korzystanie z trybów szacowania światła w celu poprawy realizmu

Interfejs Config.LightEstimationMode API ma tryby, które szacują oświetlenie w różnym stopniu szczegółowości i realizmie.

  • Tryb HDR środowiska (ENVIRONMENTAL_HDR). Tryb ten składa się z interfejsu API, który umożliwia realistyczne szacowanie światła w przypadku oświetlenia kierunkowego, cieni, odblasków i refleksji.

  • Tryb intensywności otoczenia (AMBIENT_INTENSITY). Ten tryb określa średnią intensywność piksela i kolor oświetlenia danego zdjęcia. Jest to przybliżone ustawienie zaprojektowane z myślą o sytuacjach, w których precyzyjne oświetlenie nie jest niezbędne, np. w przypadku zapalonych świateł.

  • DISABLED. Wyłącz ustawienie Config.LightEstimationMode, jeśli oświetlenie, które pasuje do danego środowiska, nie jest odpowiednie w przypadku sceny lub obiektu.

Korzystanie z trybu ENVIRONMENTAL_HDR

Tryb ENVIRONMENTAL_HDR korzysta z systemów uczących się do analizowania obrazu wejściowego kamery i syntezy światła otoczenia w celu renderowania obiektu wirtualnego.

Tryb łączony jest z oświetleniem kierunkowym, harmonijką sferyczną i mapą zbliżeniową HDR, dzięki czemu sprawiają, że obiekty wirtualne stają się naturalnie częścią pewnej sceny:

  • Oświetlenie kierunkowe analizuje każde źródło światła danego obrazu. Tego rodzaju oświetlenie powoduje dodanie najdłużej uwidocznionych światła i przesyła cienie w kierunku zgodnym z innymi widocznymi obiektami.

  • Dźwięki otoczenia sferyczne są rzeczywistą reprezentacją całego otoczenia. Podczas renderowania te informacje są wykorzystywane, aby dodać subtelne wskazówki na temat definicji obiektów wirtualnych.

  • Mapa kosmiczna HDR pokazuje otoczenie obiektu wirtualnego. Podczas renderowania ta sześcian mapuje odbicie medium o wysokim połysku.

Poniższa ilustracja przedstawia przykładowy obiekt wirtualny umieszczony w scenerii z włączoną opcją ENVIRONMENTAL_HDR.

Skonfiguruj tryb ENVIRONMENTAL_HDR dla sceny sceny

Aby użyć sceny ENVIRONMENTAL_HDR ze sceną, rozwiń klasę ARFragment i zastąp konfigurację w ten sposób:

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

Aby zobaczyć, jak to działa, zobacz próbkę Układu Słonecznego. (Za pomocą tego przykładu zaimplementowano ENVIRONMENTAL_HDR bez użycia ARFragment).

Korzystanie z trybu AMBIENT_INTENSITY

Tryb AMBIENT_INTENSITY określa średnią intensywność piksela i skalowania kolorów dla danego obrazu. Jest to przybliżone ustawienie zaprojektowane z myślą o sytuacjach, w których precyzyjne oświetlenie nie jest niezbędne, np. w obiektach, które są dobrze oświetlone.

  • Intensywność piksela odzwierciedla średnią intensywność światła w scenie, dzięki czemu można ją zastosować do całego obiektu wirtualnego.

  • Skalowania kolorów korekty wykrywają balans bieli poszczególnych klatek i pozwalają dostosować kolor obiektu wirtualnego w taki sposób, żeby płynnie integrował się z ogólnymi kolorami sceny.

Skonfiguruj tryb AMBIENT_INTENSITY dla sceny sceny

Aby użyć sceny AMBIENT_INTENSITY ze sceną, rozwiń klasę ARfragment i zastąp konfigurację w ten sposób:

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