Nachdem Sie Ihrer App ein 3D‑Modell hinzugefügt haben, können Sie das visuelle Erlebnis verbessern, indem Sie benutzerdefinierte Materialeigenschaften definieren und Texturen auf das Objekt anwenden. Das Materialsystem von Jetpack XR basiert auf der glTF™ 2.0 Spezifikation und 3D‑Modelle werden mit physikalisch basierter Rendering (Physically Based Rendering, PBR) gerendert. Dabei handelt es sich um offene Standards, die von der Khronos Group verwaltet werden.
Materialattribute können zur Laufzeit angepasst werden, um das Erscheinungsbild eines Objekts dynamisch basierend auf der Nutzereingabe oder dem aktuellen Status der App zu ändern.
Details zu den einzelnen unterstützten Eigenschaften und den anpassbaren Parametern in Android XR finden Sie in unserer Referenzdokumentation. Weitere Informationen zu diesen Eigenschaften finden Sie im Khronos-Glossar.
Materialeigenschaften Ihres 3D‑Modells anpassen
Ein Material definiert eine Reihe visueller Eigenschaften für die Oberfläche eines Objekts und bestimmt, wie diese Oberfläche mit Licht in der Szene interagiert.
In Jetpack XR werden die KhronosPbrMaterial und KhronosUnlitMaterial
Klassen verwendet, um diese Materialien zu erstellen und zu bearbeiten. Wie der Name schon sagt,
KhronosUnlitMaterials sind nicht beleuchtet und werden nicht von der Szenen
beleuchtung beeinflusst. KhronosPbrMaterial ermöglicht Ihnen die Anpassung einer größeren Auswahl an
Eigenschaften, z. B. die Farbe des Glanzes, wie metallisch oder rau ein Objekt ist und ob
es Licht aussendet.

Wenn Sie die Materialeigenschaften Ihres 3D‑Modells anpassen möchten, erstellen Sie zuerst das
neue Material mit KhronosPbrMaterial. Sie müssen den entsprechenden
AlphaMode für das gewünschte Erscheinungsbild festlegen:
val pbrMaterial = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE )
Definieren Sie als Nächstes die Eigenschaften, die Sie ändern möchten. In diesem Beispiel verwenden wir
setBaseColorFactor, um die Grundfarbe zu ändern. Für diese Methode ist ein Vector4 erforderlich, wobei die Komponenten x, y, z und w jeweils den RGBA-Werten (Rot, Grün, Blau und Alpha) entsprechen:
pbrMaterial.setBaseColorFactor( Vector4( x = 0.5f, y = 0.0f, z = 0.5f, w = 0.0f ) )
Benutzerdefinierte Texturen für Ihr 3D‑Modell erstellen
Ein Texture ist ein Bild-Asset, das Sie auf die Oberfläche eines 3D
Modells anwenden können, um Farbe, Details oder andere Oberflächeninformationen bereitzustellen. Mit der Jetpack XR Texture API können Sie Bilddaten wie PNG-Dateien asynchron aus dem Ordner /assets/ Ihrer App laden.
Beim Laden einer Textur können Sie einen TextureSampler angeben, der bestimmt, wie die Textur gerendert wird. Der Sampler definiert Filterungseigenschaften (für den Fall, dass die Textur kleiner oder größer als die Originalgröße angezeigt wird) und Wrapping-Modi (für die Verarbeitung von Koordinaten außerhalb des Standardbereichs [0, 1] ).
Ein Texture-Objekt selbst ist nur ein Datenelement. Es muss einem Material zugewiesen werden, um einen visuellen Effekt auf ein 3D‑Modell zu haben.

Wenn Sie eine benutzerdefinierte Textur erstellen möchten, müssen Sie zuerst die Bilddatei im Ordner /assets/ speichern. Als Best Practice sollten Sie in diesem Ordner auch ein Unterverzeichnis textures erstellen.
Nachdem Sie die Datei im entsprechenden Verzeichnis gespeichert haben, erstellen Sie die Textur
mit der Texture API. Hier können Sie bei Bedarf auch einen optionales
TextureSampler anwenden:
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
Definieren Sie als Nächstes den Texturtyp und legen Sie die entsprechenden Parameter fest. In diesem Beispiel wenden wir eine Okklusionstextur an und legen die Stärke fest:
pbrMaterial.setOcclusionTexture( texture = texture, strength = 1.0f )
Materialien und Texturen auf Ihre 3D‑Objekte anwenden
Wenn Sie das neue Material oder die neue Textur anwenden möchten, überschreiben Sie das vorhandene Material für einen bestimmten Knoten in Ihrem glTF-Knoten. Rufen Sie dazu
setMaterialOverride für den GltfModelNode auf:
gltfModelNode.setMaterialOverride( material = pbrMaterial )
Wenn Sie die neu erstellten Materialien entfernen möchten, rufen Sie clearMaterialOverride für
den zuvor überschriebenen Knoten in Ihrem GltfModelNode auf. Dadurch wird Ihr 3D‑Modell auf den Standardzustand zurückgesetzt:
gltfModelNode.clearMaterialOverride()
glTF und das glTF-Logo sind Marken der Khronos Group Inc.