3D-Modelle in Ihrer App anpassen

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR‑Headsets
Kabelgebundene XR‑Brillen

Nachdem Sie Ihrer App ein 3D‑Modell hinzugefügt haben, können Sie es anpassen, um das visuelle und interaktive Erlebnis zu verbessern. Sie können beispielsweise eingebettete glTF‑Animationen abspielen und steuern, benutzerdefinierte Materialeigenschaften wie Grundfarben oder metallische Rauheit definieren und benutzerdefinierte Texturen auf Ihre 3D‑Modelle anwenden. Mit diesen Funktionen können Sie das Aussehen und Verhalten eines Objekts zur Laufzeit dynamisch ändern.

3D‑Modelle animieren

Gemäß der glTF‑Spezifikation können 3D‑Modelle eingebettete Animationen enthalten. Skelett-, starre und Morph-Target-Animationen (Blend Shapes) werden im Jetpack XR SDK unterstützt. Auch Materialanimationen, die mit der KHR_animation_pointer glTF‑Erweiterung erstellt wurden, werden unterstützt.

Wenn Sie eine Animation abspielen möchten, geben Sie den Namen des entsprechenden Tracks aus der Liste der animations an. Rufen Sie GltfAnimation.start() auf, um die Wiedergabe zu starten. Optional können Sie mit GltfAnimationStartOptions die Geschwindigkeit, die Suchzeit und die Wiederholung der Animation angeben.

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

Sie können Animationen auch pause(), resume() und stop() sowie seekTo() verwenden, um zu einer bestimmten Zeit im Animationstrack zu springen. Verwenden Sie GltfAnimation.AnimationState, um den aktuellen Status der Animation abzufragen.

Materialeigenschaften Ihres 3D‑Modells anpassen

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. Sie können Materialattribute zur Laufzeit anpassen, um das Aussehen eines Objekts dynamisch basierend auf der Nutzereingabe oder dem aktuellen Status der App zu ändern.

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.

Weitere Informationen zu den einzelnen unterstützten Eigenschaften und den anpassbaren Parametern in Android XR finden Sie in unserer Referenzdokumentation. Ein Glossar mit Erklärungen zu diesen Eigenschaften finden Sie auf der Khronos-Website.

Beispiel für das Ändern der Grundfarben eines 3D-Modells

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 visuelle 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 = 1.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 ist an sich nur ein Datensatz. Es muss einem Material zugewiesen werden, damit es eine visuelle Wirkung auf ein 3D‑Modell hat.

Beispiel für das Ändern der Textur eines 3D-Modells

Wenn Sie eine benutzerdefinierte Textur erstellen möchten, müssen Sie zuerst die Bilddatei im Ordner /assets/ speichern. Als Best Practice empfiehlt es sich, in diesem Ordner auch ein Unterverzeichnis textures zu 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 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 im 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.