La API de Lighting Estimation analiza una imagen determinada en busca de pistas visuales discretas y proporciona información detallada sobre la iluminación de una escena determinada. Puedes usar esta información cuando procesas objetos virtuales para iluminarlos en las mismas condiciones que la escena en la que se colocan, lo que hace que estos objetos se sientan más realistas y mejore la experiencia envolvente para los usuarios.
Consejos y conceptos relacionados con la iluminación
Los seres humanos perciben inconscientemente pistas sutiles con respecto a cómo se encienden los objetos o los seres vivos en su entorno. Cuando a un objeto virtual le falta una sombra o tiene un material brillante que no refleja el espacio circundante, los usuarios pueden percibir que el objeto no encaja en una escena en particular, incluso si no pueden explicar por qué. Es por eso que es fundamental renderizar objetos de RA que coincidan con la iluminación de una escena para experiencias más envolventes y realistas.
La estimación de iluminación realiza la mayor parte del trabajo por ti, ya que proporciona datos detallados que te permiten imitar varios elementos de iluminación cuando se procesan objetos virtuales. Estas señales son sombras, luz ambiente, sombra, resaltados especulares y reflejos.
Podemos describir estas señales visuales de la siguiente manera:
Luz ambiente. La luz ambiente es la luz difusa general que entra por el entorno y que ilumina todo.
Sombras. A menudo, las sombras son direccionales y les indican a los usuarios de dónde provienen las fuentes de luz.
Sombreado. El sombreado es la intensidad de la luz en diferentes áreas de una imagen determinada. Por ejemplo, diferentes partes del mismo objeto pueden tener diferentes niveles de sombreado en la misma escena según el ángulo relativo al espectador y su proximidad a una fuente de luz.
Aspectos destacados especulares. Estas son las partes brillantes de las superficies que reflejan una fuente de luz directamente. Son las partes destacadas de un cambio de objeto en relación con la posición de un espectador en una escena.
Reflexión. La luz rebota en las superficies de manera diferente según si la superficie tiene propiedades especulares (es decir, muy reflectantes) o difusas (no reflectantes). Por ejemplo, una bola metálica será muy especular y reflejará su entorno, mientras que otra bola pintada de color gris mate será difusa. La mayoría de los objetos del mundo real tienen una combinación de estas propiedades, como una bola de bolos desordenada o una tarjeta de crédito bien utilizada.
Las superficies reflectantes también captan colores del entorno. La coloración de un objeto puede verse afectada directamente por la coloración de su entorno. Por ejemplo, una bola blanca en una sala azul adquiere un tono azulado.
Uso de los modos de estimación de iluminación para realzar el realismo
La API de Config.LightEstimationMode
tiene modos que calculan la iluminación del entorno con diferentes grados de detalle y realismo.
Modo HDR ambiental (
ENVIRONMENTAL_HDR
). Este modo consta de una API que permite una estimación realista de la iluminación para iluminación direccional, sombras, zonas brillantes especulares y reflejos.Modo de intensidad ambiente (
AMBIENT_INTENSITY
). Este modo determina la intensidad de píxeles promedio y el color de la iluminación de una imagen determinada. Es un entorno común diseñado para casos prácticos en los que no es fundamental contar con iluminación precisa, como objetos con iluminación integrada.DISABLED
: InhabilitaConfig.LightEstimationMode
si la iluminación que coincide con un entorno determinado no es relevante para una escena o un objeto.
Usa el modo ENVIRONMENTAL_HDR
El modo ENVIRONMENTAL_HDR
usa el aprendizaje automático para analizar la imagen de la cámara de entrada y sintetizar la iluminación del entorno a fin de renderizar un objeto virtual.
Este modo combina iluminación direccional, armónicos esféricos ambientales y un mapa cúbico HDR para que los objetos virtuales parezcan ser parte de una escena determinada:
La iluminación direccional analiza la fuente de luz aparente de una imagen determinada. Este tipo de iluminación agrega reflejos especulares en una posición razonable y proyecta sombras en una dirección coherente con otros objetos reales visibles.
Los armónicos esféricos ambientales obtienen una representación realista de la luz ambiente general que proviene de todas las direcciones en una escena. Durante el procesamiento, esta información se usa para agregar pistas sutiles que destacan la definición de objetos virtuales.
Un mapa de cubos HDR captura la iluminación del entorno que rodea al objeto virtual. Durante la renderización, este mapa cúbico crea el reflejo del material brillante a medio.
En la siguiente imagen, se muestra un ejemplo de un objeto virtual ubicado en una escena con ENVIRONMENTAL_HDR
habilitado.
Configura el modo ENVIRONMENTAL_HDR
para una escena de Sceneform
Para usar ENVIRONMENTAL_HDR
con una escena de Sceneform, extiende la clase ARFragment
y anula la configuración de la siguiente manera:
@Override
protected Config getSessionConfiguration(Session session) {
Config config = new Config(session);
config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
return config;
}
Para ver un ejemplo de cómo funciona, consulta el ejemplo de sistema solar. (Este ejemplo implementa ENVIRONMENTAL_HDR
sin usar ARFragment
).
Usa el modo AMBIENT_INTENSITY
El modo AMBIENT_INTENSITY
determina la intensidad promedio de píxeles y los escalares de corrección de color para una imagen determinada. Es una configuración general diseñada para casos de uso en los que la iluminación precisa no es fundamental, como los objetos con iluminación integrada.
La intensidad de píxeles captura la intensidad promedio de píxeles de la iluminación en una escena para aplicarla a un objeto virtual completo.
Los Escalares de corrección de color detectan el balance de blancos para cada fotograma individual y te permiten cambiar el color de un objeto virtual para que se integre con mayor facilidad en el colorado general de una escena.
Configura el modo AMBIENT_INTENSITY
para una escena de Sceneform
Para usar AMBIENT_INTENSITY
con una escena de Sceneform, extiende la clase ARfragment
y anula la configuración de la siguiente manera:
@Override
protected Config getSessionConfiguration(Session session) {
Config config = new Config(session);
config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
return config;
}