作者 / 小组产品经理 Stevan Silva 及开发者关系工程师 Amy Zeppenfeld
我们日前发布了 Android XR SDK 开发者预览版 4,以便继续致力于统一头戴式设备、有线 XR 眼镜和智能眼镜的跨设备开发。为了保持平台的直观易懂,我们的设备形态将采用更具描述性的命名方式。其中,AI 眼镜将更名为音频眼镜 (audio glasses),而显示 AI 眼镜将更名为显示眼镜 (display glasses),这些变更已在官方开发者文档中同步生效。
此版本包含诸多更新,可帮助您为 XR 设备构建令人惊艳的体验,在 XR 头戴式设备上实现更深层次的沉浸式体验,并简化在音频眼镜和显示眼镜上创建增强体验的路径。此外,我们的核心库 (包括 XR Runtime、Jetpack SceneCore 和 ARCore for Jetpack XR) 将在近期正式进入 Beta 版!
为助您抢先体验相关硬件和资源,以便在即将推出的设备 (如显示眼镜、音频眼镜以及 XREAL 的 Project Aura) 上构建沉浸式和增强体验,我们将会推出 Android XR Developer Catalyst 计划。欢迎您了解详情并开始申请。
为音频眼镜和显示眼镜打造增强体验
从我们的增强体验库开始,开发者预览版 4 引入了可助您创建和测试应用的全新 API。
Jetpack Projected:
设备可用性 (Device Availability)
和 ProjectedTestRule API
Jetpack Projected 库有助于将应用体验从手机端延展到用户的视野中。我们添加了设备可用性 API,该 API 可将佩戴状态和连接信号整合到标准 Android Lifecycle.State 值中。这样您就可以根据设备的佩戴状态来调整应用行为。
val xrDevice = XrDevice.getCurrentDevice(projectedContext)
// Observe the device lifecycle flow
xrDevice.getLifecycle().currentStateFlow
.collect { state ->
when (state) {
Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
Lifecycle.State.DESTROYED -> { /* Device is DISCONNECTED */ }
}
}
为了简化测试流程,projected-testing 工件中的全新的 ProjectedTestRule API 可自动设置投射测试环境。这有助于您在没有样板代码的情况下编写整洁、可靠的单元测试。
// from the 'androidx.xr.projected1.0.0-alpha07' artifact
@get:Rule
val projectedTestRule = ProjectedTestRule()
@Test
fun testProjectedContextInitialization() {
// by default, ProjectedTestRule automatically creates and connects
// a projected device before each test
val projectedContext = ProjectedContext.createProjectedDeviceContext(context)
// assert the projected context is successfully initialized
assertThat(projectedContext).isNotNull()
}
Google Sans Flex 和新组件
我们的显示眼镜界面库 Jetpack Compose Glimmer 现包含 Google Sans Flex 字体,以提高在光学透视显示屏上的可读性。我们还添加了几个交互式组件:
Stacks: 专为触控板优化的分组设计,一次显示一个项目。
Title Chips: 为内容卡片提供分类和上下文。
为 XR 头戴式设备和有线 XR 眼镜打造沉浸式体验
如果您希望为 XR 头戴式设备和有线 XR 眼镜打造完全沉浸式的体验,我们也为您带来了几项重大更新。
Beta 版过渡及现代架构
XR Runtime、Jetpack SceneCore 和 ARCore for Jetpack XR 感知功能 (深度图、眼部/手部追踪、命中测试和空间锚点) 很快就会迁移到 Beta 版,为此我们简化了 Jetpack XR API。我们也移除了旧版 Guava 和 RxJava3 软件包,转而采用现代化的 Kotlin 优先架构。
Jetpack SceneCore:
glTF 和自定义网格 (Custom Meshes)
我们通过添加微调 3D 模型以及访问 3D 模型特定节点的功能,来扩展 3D 模型的能力。您可以使用 GltfModelNode 来修改姿态、材质和纹理等属性,甚至可以在特定节点运行动画。
// Create a new PBR material
pbrMaterial = KhronosPbrMaterial.create(
session = xrSession,
alphaMode = AlphaMode.OPAQUE
)
// Load a texture.
val texture = Texture.create(
session = xrSession,
path = Path("textures/texture_name.png")
)
// Apply the texture and configure occlusion
pbrMaterial.setOcclusionTexture(
texture = texture,
strength = 0.5f
)
// Access the hierarchy of nodes
val entityNodes = entity.nodes
// Find the specific node
val myEntityNode = entityNodes.find { it.name == "node_name" }
// Apply the PBR material override
myEntityNode?.setMaterialOverride(
material = newMaterial
)
我们还在 SceneCore 中引入了自定义网格功能。借助该功能,您能够以编程方式动态构建几何体,是创建自定义 3D 模型的理想选择。该功能将作为实验性功能发布,欢迎试用并与我们分享您的反馈!
// Create the mesh val roadMesh = CustomMesh.BuilderFromMeshData(session, roadVertexLayout) .addVertexData(ByteBufferRegion(roadDataBuffer, 0, vertexDataSize)) .setIndexData(ByteBufferRegion(roadDataBuffer, vertexDataSize, indexDataSize)) .setTopology(MeshSubsetTopology.TRIANGLES) .build() // Define the material val roadMaterial = KhronosPbrMaterial.create(session, AlphaMode.OPAQUE) // Instantiate the entity using the custom mesh and material val roadEntity = MeshEntity.create( session, roadMesh, listOf(roadMaterial), pose = roadPose, )
Compose for XR: 原生 glTF 支持
同时,我们将通过 SpatialGltfModel 直接在 Compose for XR 中提供原生 glTF 支持。
将此与 SpatialGltfModelState 配合使用,即可访问 glTF 模型中的节点和动画;您也可以使用它们来为 3D 模型添加纹理和材质。
val myGltfModelState = rememberSpatialGltfModelState(
source = SpatialGltfModelSource.fromPath(
Paths.get("models/my_animated_model.glb")
)
)
val myGltfAnimation =
myGltfModelState.animations.find { it.name == "animation_name" }
DisposableEffect(myGltfAnimation) {
myGltfAnimation?.loop()
onDispose {
myGltfAnimation?.stop()
}
}
SpatialGltfModel(state = myGltfModelState, modifier = modifier)
ARCore for Jetpack XR:
适用于有线 XR 眼镜的 Geospatial API 预览版
我们还将在 ARCore for Jetpack XR 中提供适用于有线 XR 眼镜的 Geospatial API 的早期预览版本。这项更新可以在超过 87 个国家/地区内将数字内容与现实位置进行高精度锚定。
通过将 ARCore 的视觉定位系统 (VPS) 与 Gemini Live API 的推理和音频功能相结合,您可以创建理解用户所处地理位置和空间姿态的上下文感知体验。想象一下,您可以构建一个由 AI 负责导览的沉浸式徒步旅程,它可以提供附近地点的实时音频描述,将数字信息与物理环境无缝融合。
立即开始构建未来
现在正是开发 Android XR 应用的绝佳时机。Jetpack XR SDK 即将推出 Beta 版,还有一套强大的全新工具可供您随时取用,您可以借此探索以下各个方面,让您的应用体验为适配 XR 环境做好准备!
阅读文档,探索示例,了解各种 XR 实验项目
您可以访问 Android 开发者官方网站,获取完整的技术指南、API 参考资料以及有关设置新模拟器的说明。通过我们的示例和实验项目获得灵感。了解我们如何使用这些 API 构建沉浸式空间布局、加载 3D 模型、探索空间音频等!
了解面向游戏引擎的最新动态
我们添加了对虚幻引擎和 Godot 的官方支持,并推出了两款新工具,用于加速使用 Unity 和 Android XR 交互框架的 Android XR 开发。另外,根据大家的反馈,我们还将推出 Android XR Engine Hub,帮助您直接在自己偏好的引擎上运行体验。
申请加入
Android XR Developer Catalyst 计划
也提醒您千万别错过为最新 Android XR 硬件构建应用产品的机会。立即申请,您将有机会获得预发布版本的硬件,包括我们的音频和显示眼镜原型,以及 XREAL 的 Project Aura。
今年晚些时候,我们即将推出更多 Android XR 设备,期待看到您打造的精彩 XR 体验!
全部0条评论
快来发表一下你的评论吧 !