From 5ae216116b2de98e741bcbc4a87891fc69dd278a Mon Sep 17 00:00:00 2001 From: azeppenfeld Date: Mon, 5 Jan 2026 11:39:17 -0800 Subject: [PATCH 01/10] Add snippet for Jetpack Scenecore material overrides in XR --- .../example/xr/scenecore/MaterialOverride.kt | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt new file mode 100644 index 000000000..05536d9fb --- /dev/null +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -0,0 +1,86 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.xr.scenecore + +import androidx.xr.runtime.Session +import androidx.xr.runtime.math.Vector4 +import androidx.xr.scenecore.AlphaMode +import androidx.xr.scenecore.GltfModelEntity +import androidx.xr.scenecore.KhronosPbrMaterial +import androidx.xr.scenecore.Texture +import kotlin.io.path.Path + +private class MaterialOverride(val xrSession: Session) { + private suspend fun createMaterial() { + // [START androidxr_scenecore_material_override_createMaterial] + KhronosPbrMaterial.create( + session = xrSession, + alphaMode = AlphaMode.OPAQUE + ) + // [END androidxr_scenecore_material_override_createMaterial] + } + + private fun setBaseColor(pbrMaterial: KhronosPbrMaterial) { + // [START androidxr_scenecore_material_override_setBaseColor] + pbrMaterial.setBaseColorFactor( + Vector4( + x = 0.5f, + y = 0.0f, + z = 0.5f, + w = 0.0f + ) + ) + // [END androidxr_scenecore_material_override_setBaseColor] + } + + private suspend fun createTexture() { + // [START androidxr_scenecore_material_override_createTexture] + Texture.create( + session = xrSession, + path = Path("textures/white.png") + ) + // [END androidxr_scenecore_material_override_createTexture] + } + + private fun setOcclusionTexture(pbrMaterial: KhronosPbrMaterial, texture: Texture) { + // [START androidxr_scenecore_material_override_setOcclusionTexture] + pbrMaterial.setOcclusionTexture( + texture = texture, + strength = 1.0f + ) + // [END androidxr_scenecore_material_override_setOcclusionTexture] + } + + private fun setMaterialOverride(entity: GltfModelEntity, pbrMaterial: KhronosPbrMaterial) { + // [START androidxr_scenecore_material_override_setMaterialOverride] + pbrMaterial.let { newMaterial -> + entity.setMaterialOverride( + material = newMaterial, + nodeName = "Node Name" + ) + // [END androidxr_scenecore_material_override_setMaterialOverride] + } + } + + private fun clearMaterialOverride(entity: GltfModelEntity) { + // [START androidxr_scenecore_material_override_clearMaterialOverride] + entity.clearMaterialOverride( + nodeName = "Node Name" + ) + // [END androidxr_scenecore_material_override_clearMaterialOverride] + } +} From 12b761275d998cde77545182b001aad941ec2726 Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 11:44:28 -0800 Subject: [PATCH 02/10] Update xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index 05536d9fb..8e84b9ef6 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -49,7 +49,7 @@ private class MaterialOverride(val xrSession: Session) { private suspend fun createTexture() { // [START androidxr_scenecore_material_override_createTexture] - Texture.create( + val texture = Texture.create( session = xrSession, path = Path("textures/white.png") ) From c2b2af07aed378ed5558cbecd625876bc298ddbf Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 11:44:36 -0800 Subject: [PATCH 03/10] Update xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index 8e84b9ef6..d2a6e48d0 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -27,7 +27,7 @@ import kotlin.io.path.Path private class MaterialOverride(val xrSession: Session) { private suspend fun createMaterial() { // [START androidxr_scenecore_material_override_createMaterial] - KhronosPbrMaterial.create( + val material = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE ) From 3861b42f9ffb1ddd170726f6ab3d207a7d61b724 Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 11:47:49 -0800 Subject: [PATCH 04/10] Update MaterialOverride.kt --- xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index d2a6e48d0..101472728 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -67,13 +67,11 @@ private class MaterialOverride(val xrSession: Session) { private fun setMaterialOverride(entity: GltfModelEntity, pbrMaterial: KhronosPbrMaterial) { // [START androidxr_scenecore_material_override_setMaterialOverride] - pbrMaterial.let { newMaterial -> entity.setMaterialOverride( material = newMaterial, nodeName = "Node Name" ) // [END androidxr_scenecore_material_override_setMaterialOverride] - } } private fun clearMaterialOverride(entity: GltfModelEntity) { From 4a382cd82988ebd71c13a5c7edaec57b446ea78a Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 19:51:09 +0000 Subject: [PATCH 05/10] Apply Spotless --- .../java/com/example/xr/scenecore/MaterialOverride.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index 101472728..ef804bd52 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -67,11 +67,11 @@ private class MaterialOverride(val xrSession: Session) { private fun setMaterialOverride(entity: GltfModelEntity, pbrMaterial: KhronosPbrMaterial) { // [START androidxr_scenecore_material_override_setMaterialOverride] - entity.setMaterialOverride( - material = newMaterial, - nodeName = "Node Name" - ) - // [END androidxr_scenecore_material_override_setMaterialOverride] + entity.setMaterialOverride( + material = newMaterial, + nodeName = "Node Name" + ) + // [END androidxr_scenecore_material_override_setMaterialOverride] } private fun clearMaterialOverride(entity: GltfModelEntity) { From 62b9a1d9e6e06f9d889ca687f87bdd1e9a6e896e Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 12:04:47 -0800 Subject: [PATCH 06/10] Update MaterialOverride.kt From f6d48b36a4029876caecfaead55a2ca9a5fa4687 Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 12:24:29 -0800 Subject: [PATCH 07/10] Update MaterialOverride.kt --- xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index ef804bd52..f3a377f2d 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -68,7 +68,7 @@ private class MaterialOverride(val xrSession: Session) { private fun setMaterialOverride(entity: GltfModelEntity, pbrMaterial: KhronosPbrMaterial) { // [START androidxr_scenecore_material_override_setMaterialOverride] entity.setMaterialOverride( - material = newMaterial, + material = pbrMaterial, nodeName = "Node Name" ) // [END androidxr_scenecore_material_override_setMaterialOverride] From 6173dc5ad1f7e64dd3a1779a30a911e1b7f7fd61 Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:47:32 -0800 Subject: [PATCH 08/10] Update MaterialOverride.kt --- xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index f3a377f2d..01d4f5784 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -27,7 +27,7 @@ import kotlin.io.path.Path private class MaterialOverride(val xrSession: Session) { private suspend fun createMaterial() { // [START androidxr_scenecore_material_override_createMaterial] - val material = KhronosPbrMaterial.create( + val pbrMaterial = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE ) From f9ca0be853a573092b0cb92efd658e1a48dc340d Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:00:54 -0800 Subject: [PATCH 09/10] Update MaterialOverride.kt --- .../java/com/example/xr/scenecore/MaterialOverride.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index 01d4f5784..ea9556b50 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -65,18 +65,18 @@ private class MaterialOverride(val xrSession: Session) { // [END androidxr_scenecore_material_override_setOcclusionTexture] } - private fun setMaterialOverride(entity: GltfModelEntity, pbrMaterial: KhronosPbrMaterial) { + private fun setMaterialOverride(gltfModelEntity: GltfModelEntity, pbrMaterial: KhronosPbrMaterial) { // [START androidxr_scenecore_material_override_setMaterialOverride] - entity.setMaterialOverride( + gltfModelEntity.setMaterialOverride( material = pbrMaterial, nodeName = "Node Name" ) // [END androidxr_scenecore_material_override_setMaterialOverride] } - private fun clearMaterialOverride(entity: GltfModelEntity) { + private fun clearMaterialOverride(gltfModelEntity: GltfModelEntity) { // [START androidxr_scenecore_material_override_clearMaterialOverride] - entity.clearMaterialOverride( + gltfModelEntity.clearMaterialOverride( nodeName = "Node Name" ) // [END androidxr_scenecore_material_override_clearMaterialOverride] From 13307e52505adf9215125e740067a56de4c40dbc Mon Sep 17 00:00:00 2001 From: amyZepp <134542280+amyZepp@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:38:40 -0800 Subject: [PATCH 10/10] Update MaterialOverride.kt --- xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt index ea9556b50..f1e0cff62 100644 --- a/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt +++ b/xr/src/main/java/com/example/xr/scenecore/MaterialOverride.kt @@ -51,7 +51,7 @@ private class MaterialOverride(val xrSession: Session) { // [START androidxr_scenecore_material_override_createTexture] val texture = Texture.create( session = xrSession, - path = Path("textures/white.png") + path = Path("textures/texture_file.png") ) // [END androidxr_scenecore_material_override_createTexture] }