Nachdem Sie Ihrer App ein 3D-Modell hinzugefügt haben, können Sie die Darstellung 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 basiertem 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.
Weitere Informationen zu den einzelnen unterstützten Attributen und den anpassbaren Parametern in Android XR finden Sie in unserer Referenzdokumentation. Weitere Informationen zu diesen Attributen 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 Klassen KhronosPbrMaterial und KhronosUnlitMaterial verwendet, um diese Materialien zu erstellen und zu bearbeiten. Wie der Name schon sagt, sind KhronosUnlitMaterials unbeleuchtet und werden nicht von der Szenenbeleuchtung beeinflusst. Mit KhronosPbrMaterial können Sie eine größere Auswahl an Eigenschaften anpassen, z. B. die Farbe des Glanzes, wie metallisch oder rau ein Objekt ist und ob es Licht emittiert.

Wenn Sie die Materialeigenschaften Ihres 3D-Modells anpassen möchten, erstellen Sie zuerst das neue Material mit KhronosPbrMaterial. Sie müssen die entsprechende 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 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
Eine 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 ihre Originalgröße angezeigt wird) und Wrapping-Modi (für die Verarbeitung von Koordinaten außerhalb des Standardbereichs [0, 1]).
Ein Texture-Objekt ist an sich nur ein Datenelement. Es muss einem Material zugewiesen werden, damit es sich visuell auf ein 3D-Modell auswirkt.

Wenn Sie eine benutzerdefinierte Textur erstellen möchten, müssen Sie die Bilddatei zuerst 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 ein optionales TextureSampler anwenden:
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
Als Nächstes definieren Sie den Texturtyp und legen 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 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 Ihrer glTF-Entität. Rufen Sie dazu setMaterialOverride für GltfModelEntity auf:
gltfModelEntity.setMaterialOverride( material = pbrMaterial, nodeName = "Node Name" )
Um die neu erstellten Materialien zu entfernen, rufen Sie clearMaterialOverride für den zuvor überschriebenen Knoten in Ihrem GltfModelEntity auf. Dadurch wird Ihr 3D-Modell auf den Standardzustand zurückgesetzt:
gltfModelEntity.clearMaterialOverride( nodeName = "Node Name" )
glTF und das glTF-Logo sind Marken der Khronos Group Inc.