En el SDK de Jetpack XR, los entornos espaciales son entornos inmersivos que puedes agregar a tu app para personalizar el fondo de la escena virtual. Los entornos espaciales solo son visibles cuando una app está en el espacio completo.
Descripción general de los entornos espaciales
Un SpatialEnvironment administra las preferencias del entorno espacial de una app. Es una composición de una imagen de skybox independiente y una geometría especificada por glTF. Solo se puede establecer una imagen de skybox y un archivo de geometría glTF a la vez.
Un skybox representa la imagen que un usuario ve a su alrededor en la escena virtual, lo que crea la ilusión de un entorno de fondo distante, como un cielo, montañas o un paisaje urbano. El usuario no puede interactuar con el skybox ni acercarse a él. El SDK de XR de Jetpack admite skyboxes esféricos en el estándar OpenEXR. Además de proporcionar un fondo envolvente para tu app, un skybox EXR también proporciona iluminación basada en imágenes (IBL) a los modelos 3D que carga tu app. Para obtener más información, consulta la guía para trabajar con modelos 3D.
Los entornos espaciales también pueden incluir contenido de geometría 3D en el estándar glTF. La geometría del entorno que se cargue de esta manera se alineará automáticamente con el piso del mundo real. La geometría del entorno es una excelente manera de agregar realismo a tu entorno a través de elementos en primer plano y en el plano medio que se integran en el skybox con el efecto de paralaje.
En la guía de diseño para entornos espaciales, puedes obtener información sobre los diferentes tipos de recursos que puedes usar para crear entornos espaciales y cómo crear entornos espaciales seguros y agradables.
Puedes establecer el entorno espacial de tu app en uno de estos tres parámetros de configuración:
- Es una combinación de una imagen de skybox y una geometría de glTF.
- Una superficie de transferencia, en la que el entorno que se muestra es un feed en vivo de las cámaras orientadas hacia el exterior del dispositivo. Con la opacidad máxima, esta superficie de transferencia bloquea por completo el skybox y la geometría.
- Es una configuración mixta, en la que la superficie de transferencia no tiene opacidad total ni nula. En este caso, la superficie de transferencia se vuelve semitransparente y se mezcla con el skybox y la geometría detrás de ella.
Funciones espaciales para entornos espaciales
SpatialCapability: Representa las capacidades espaciales de la sesión actual. Ciertas capacidades espaciales son relevantes para los entornos espaciales.SpatialCapability.PASSTHROUGH_CONTROL: Indica si la actividad puede habilitar o inhabilitar la transferencia en el momento actual.SpatialCapability.APP_ENVIRONMENT: Indica si la actividad puede establecer su propio entorno espacial en el momento actual.
Importa y carga recursos de entornos espaciales
Los recursos glTF y EXR para entornos espaciales se cargan de forma asíncrona con
la clase Session.
Crea un recurso glTF
Se puede crear un recurso glTF como un GltfModel, en el que el glTF se carga
desde un archivo local. Se puede usar un GltfModel como parte de un entorno de app espacial.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Crea un recurso de iluminación basado en imágenes
Se puede crear un recurso de iluminación basado en imágenes como un ImageBasedLightingAsset, en el que la iluminación se carga desde un archivo local.
Se puede usar un ImageBasedLightingAsset con cmgen para crear un archivo ZIP de la IBL para tus skyboxes. Consulta nuestra guía para optimizar los recursos del entorno para obtener más información.
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Establece el SpatialEnvironmentPreference para tu app
La propiedad preferredSpatialEnvironment controla el entorno espacial preferido para una app. Cuando se usa esta propiedad para establecer una preferencia, no provoca un cambio inmediato, a menos que isPreferredSpatialEnvironmentActive ya sea true. Una vez que el dispositivo entra en un estado en el que se puede cambiar el fondo de XR y la capacidad SpatialCapability.APP_ENVIRONMENT está disponible, se mostrará automáticamente el entorno espacial preferido para la aplicación.
Si estableces la preferencia en null, se inhabilitará el entorno espacial preferido
para la app, lo que significa que, en su lugar, se mostrará el entorno predeterminado del sistema.
Si el SpatialEnvironmentPreference proporcionado no es nulo, pero todas sus propiedades son nulas, el entorno espacial consistirá en un skybox negro y no tendrá geometría.
Para recibir notificaciones de cambios en el estado de SpatialEnvironment, usa addOnSpatialEnvironmentChangedListener.
Uso básico
Este fragmento de código crea los recursos de geometría del entorno y skybox, y, luego, establece la preferencia de entorno espacial. Se recordará esta preferencia y se aplicará cuando la app tenga la capacidad de establecer su propio entorno.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability. // Then, any listeners specified using addOnSpatialEnvironmentChangedListener // will be notified. }
Uso avanzado
Para casos de uso más avanzados en los que necesites un control más detallado del entorno, puedes incorporar verificaciones de SpatialCapability y, luego, implementar un addOnSpatialEnvironmentChangedListener para determinar cuándo quieres establecer la preferencia de entorno espacial.
Establece la PassthroughOpacityPreference para el entorno espacial de tu app
Uno de los componentes del fondo virtual envolvente de una app es una superficie de transferencia. En este caso, el fondo que se muestra es un feed en vivo de las cámaras del dispositivo que apuntan hacia afuera.
setPassthroughOpacityPreference se usa para establecer la opacidad de la transferencia preferida de una app. Este método solo establece una preferencia y no provoca un cambio inmediato, a menos que esté disponible la función SpatialCapability.PASSTHROUGH_CONTROL. Una vez que el dispositivo entra en un estado en el que se puede cambiar la opacidad de la transferencia y la capacidad SpatialCapability.PASSTHROUGH_CONTROL está disponible, se aplicará automáticamente la opacidad de transferencia preferida para la aplicación.
Los valores de la preferencia de opacidad de la transferencia varían entre 0.0f (opacidad cero, en la que la superficie de transferencia no es visible) y 1.0f (opacidad total, en la que la superficie de transferencia oculta el entorno espacial). El parámetro setPassthroughOpacityPreference es un número de punto flotante anulable. Si se establece el valor en nulo, se indica que la app no tiene preferencia de opacidad de transferencia y se devolverá el control de transferencia al sistema.
Uso básico
Este fragmento de código establece la preferencia de opacidad de la transferencia. Se recordará esta preferencia y se aplicará cuando la app tenga la capacidad de establecer la opacidad de la transferencia.
session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability. // Then, any listeners specified using addOnPassthroughOpacityChangedListener // will be notified. }
Uso avanzado
En casos de uso más avanzados en los que necesites un control más detallado de la opacidad de la transferencia, puedes incorporar verificaciones de SpatialCapability y agregar un objeto de escucha con addOnPassthroughOpacityChangedListener para determinar cuándo quieres establecer la preferencia de opacidad de la transferencia.
Optimización de recursos
Cuando crees recursos para configurar el SpatialEnvironment de tus usuarios, asegúrate de que estos alcancen una resolución de alta calidad y, al mismo tiempo, mantengan un tamaño de archivo razonable. Para obtener más información, consulta nuestra guía para optimizar los recursos de entorno.
Determina la opacidad actual de la transferencia
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity