Beleuchtungsschätzung mit Szenenmodellen verwenden

Die Lighting Estimation API analysiert ein bestimmtes Bild auf separate visuelle Elemente und liefert detaillierte Informationen zur Beleuchtung in einer bestimmten Szene. Diese Informationen können Sie dann verwenden, wenn Sie virtuelle Objekte rendern, um sie unter denselben Bedingungen wie in der Umgebung zu beleuchten. Dadurch fühlen sich diese Objekte realistischer an und verbessern die immersive Nutzererfahrung.

Beleuchtungshinweise und Konzepte

Menschen nehmen unbemerkt subtile Hinweise darauf, wie Objekte oder Lebewesen in ihrer Umgebung angestrahlt werden. Wenn ein virtuelles Objekt einen Schatten fehlt oder ein glänzendes Material aufweist, das den umgebenden Bereich nicht widerspiegelt, können Nutzer spüren, dass das Objekt nicht in eine bestimmte Szene passt, auch wenn sie den Grund nicht erklären können. Aus diesem Grund ist das Rendern von AR-Objekten für die Beleuchtung in einer Szene von entscheidender Bedeutung für immersive und realistische Erlebnisse.

Die Beleuchtungsschätzung übernimmt den Großteil der Arbeit durch die Bereitstellung detaillierter Daten, mit denen Sie verschiedene Beleuchtungshinweise beim Rendern virtueller Objekte imitieren können. Dabei handelt es sich um Schatten, Umgebungslicht, Schattierung, Spitzlichter und Reflexionen.

Diese visuellen Hinweise können wir so beschreiben:

  • Umgebungslicht Das Umgebungslicht ist das diffuse Licht aus der ganzen Umgebung, das alles beleuchtet.

  • Schatten Schatten sind häufig Richtwerte und sagen den Zuschauern, woher die Lichtquellen stammen.

  • Schattierung: Die Schattierung ist die Intensität des Lichts in verschiedenen Bereichen eines Bildes. Beispielsweise können verschiedene Teile desselben Objekts unterschiedliche Schattierungen in derselben Szene in Abhängigkeit vom Winkel relativ zum Betrachter und dessen Nähe zu einer Lichtquelle haben.

  • Highlights Das sind die glänzenden Teile der Oberflächen, die eine Lichtquelle direkt reflektieren. Hebt hervor, wie sich ein Objekt im Verhältnis zur Position eines Betrachters in einer Szene ändert.

  • Reflexion Je nachdem, ob die Oberfläche Spiegel- (d. h. stark reflektierende) oder diffuse (nicht reflektierende) Eigenschaften aufweist, reflektiert sie leicht von Oberflächen. Ein Metallkugel ist beispielsweise sehr Spiegel und reflektiert seine Umgebung, während ein anderer Ball, der z. B. ein mattes mattes Grau hat, diffus wirkt. In den meisten realen Objekten gibt es eine Kombination dieser Eigenschaften – z. B. eine verputzte Bowlingkugel oder eine gebrauchte Kreditkarte.

    Auf reflektierenden Oberflächen werden auch Farben aus der Umgebung aufgenommen. Die Farbe eines Objekts kann direkt von der Farbe seiner Umgebung beeinflusst werden. Ein weißer Ball in einem blauen Raum nimmt beispielsweise einen bläulichen Farbton an.

Realisierung des Realismus durch Beleuchtungsschätzmodi

Die Config.LightEstimationMode API hat Modi, die die Beleuchtung in der Umgebung mit unterschiedlichen Detaillierungsgraden und Realismus schätzen.

  • HDR-Umgebungsmodus (ENVIRONMENTAL_HDR). Dieser Modus besteht aus einer API, die eine realistische Schätzung der Beleuchtung für direktionale Beleuchtung, Schatten, Spiegeleffekte und Reflexionen ermöglicht.

  • Inaktivmodus (AMBIENT_INTENSITY): Dieser Modus bestimmt die durchschnittliche Pixelintensität und die Farbe der Beleuchtung für ein bestimmtes Bild. Die Option ist eine grobe Einstellung für Anwendungsfälle, in denen keine genaue Beleuchtung erforderlich ist, z. B. bei eingedämmten Gegenständen.

  • DISABLED. Deaktivieren Sie Config.LightEstimationMode, wenn die Beleuchtung für eine bestimmte Umgebung für ein Ambiente oder ein Objekt nicht relevant ist.

Modus „ENVIRONMENTAL_HDR“ wird verwendet

Der ENVIRONMENTAL_HDR-Modus verwendet maschinelles Lernen, um das Bild der Eingabekamera zu analysieren und die Umgebungsbeleuchtung für das Rendering eines virtuellen Objekts zu synthetisieren.

Dieser Modus kombiniert Richtungslicht, sphärische Umgebungsharmonikas und eine HDR-Wandelfunktion, damit virtuelle Objekte so wirken, als wären sie Teil einer bestimmten Szene:

  • Bei der Richtungsbeleuchtung wird die scheinbare Lichtquelle für ein bestimmtes Bild analysiert. Bei dieser Art von Beleuchtung werden angemessen Spiegeleffekte platziert und Schatten in eine Richtung geworfen, die mit anderen sichtbaren realen Objekten konsistent ist.

  • Umgebungsphänomene mit sphärischer Umgebung erhalten eine realistische Darstellung des gesamten Umgebungslichts, das aus allen Richtungen einer Szene eingeht. Während des Renderings werden diese Informationen verwendet, um subtile Signale hinzuzufügen, die die Definition virtueller Objekte hervorheben.

  • Eine HDR-Cubemap fängt die Umgebungsbeleuchtung um das virtuelle Objekt ein. Während des Renderings erzeugt diese Cubemap die Reflexion für das Material von mittlerer bis hoher Glänze.

Die folgende Abbildung zeigt ein Beispiel für ein virtuelles Objekt, das in einer Szene mit aktiviertem ENVIRONMENTAL_HDR platziert ist.

ENVIRONMENTAL_HDR-Modus für eine Szenenszene konfigurieren

Wenn Sie ENVIRONMENTAL_HDR mit einer Sceneform-Szene verwenden möchten, erweitern Sie die Klasse ARFragment und überschreiben Sie die Konfiguration so:

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

Ein Beispiel dafür findest du im Beispiel zum Sonnensystem. In diesem Beispiel wird ENVIRONMENTAL_HDR implementiert, ohne ARFragment zu verwenden.

Modus „AMBIENT_INTENSITY“ wird verwendet

Im AMBIENT_INTENSITY-Modus werden die durchschnittliche Pixelintensität und die Farbkorrekturskala für ein bestimmtes Bild festgelegt. Die Option ist eine grobe Einstellung für Anwendungsfälle, in denen keine genaue Beleuchtung erforderlich ist, z. B. bei Objekten mit integrierter Beleuchtung.

  • Die Pixelintensität erfasst die durchschnittliche Pixelintensität der Beleuchtung in einer Szene, die auf ein komplettes virtuelles Objekt angewendet wird.

  • Farbkorrekturskalare erkennen den Weißabgleich für jeden einzelnen Frame und ermöglichen die Farbkorrektur eines virtuellen Objekts, sodass es sich nahtlos in die Gesamtfarbe einer Szene einfügt.

AMBIENT_INTENSITY-Modus für eine Szenenszene konfigurieren

Wenn Sie AMBIENT_INTENSITY mit einer Sceneform-Szene verwenden möchten, erweitern Sie die Klasse ARfragment und überschreiben Sie die Konfiguration so:

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