Po dodaniu modelu 3D do aplikacji możesz dostosować go, aby poprawić wrażenia wizualne i interaktywne. Możesz na przykład odtwarzać i kontrolować osadzone animacje glTF, definiować niestandardowe właściwości materiałów (takie jak kolory podstawowe czy metaliczna szorstkość) oraz stosować niestandardowe tekstury do modeli 3D. Te funkcje umożliwiają dynamiczną zmianę wyglądu i działania obiektu w czasie działania.
Animowanie modeli 3D
Zgodnie ze specyfikacją glTF modele 3D mogą mieć osadzone animacje.
Animacje szkieletowe (z riggingiem), sztywne i z celami morfingu (kształty mieszane) są obsługiwane w pakiecie Jetpack XR SDK. Obsługiwane są też animacje materiałów utworzone za pomocą KHR_animation_pointerrozszerzenia glTF.
Aby odtworzyć animację, podaj nazwę konkretnej ścieżki z listy animations. Zadzwoń GltfAnimation.start(), aby rozpocząć grę. Możesz opcjonalnie określić szybkość, czas wyszukiwania i to, czy animacja ma być odtwarzana w pętli, za pomocą GltfAnimationStartOptions.
val animation = gltfEntity.animations.find { it.name == "Walk" } animation?.start(GltfAnimationStartOptions(shouldLoop = true))
Możesz też używać animacji pause(), resume() i stop() oraz funkcji seekTo(), aby przejść do określonego momentu na ścieżce animacji. Aby wysłać zapytanie o bieżący stan animacji, użyj metody GltfAnimation.AnimationState.
Dostosowywanie właściwości materiału modelu 3D
System materiałów Jetpack XR jest oparty na specyfikacji glTF™ 2.0, a modele 3D są renderowane przy użyciu renderowania opartego na fizyce (PBR). Możesz dostosowywać atrybuty materiału w czasie działania, aby dynamicznie zmieniać wygląd obiektu na podstawie danych wejściowych użytkownika lub bieżącego stanu aplikacji.
Material określa zestaw właściwości wizualnych powierzchni obiektu i określa, jak ta powierzchnia oddziałuje ze światłem w scenie.
W Jetpack XR klasy KhronosPbrMaterial i KhronosUnlitMaterial służą do tworzenia tych materiałów i manipulowania nimi. Jak sama nazwa wskazuje, KhronosUnlitMaterials są nieoświetlone i nie mają na nie wpływu oświetlenie sceny. KhronosPbrMaterial umożliwia dostosowywanie szerszego zakresu właściwości, takich jak kolor połysku, stopień metaliczności lub szorstkości obiektu oraz to, czy emituje on światło.
Więcej informacji o każdej obsługiwanej właściwości i parametrach, które można dostosować na Androidzie XR, znajdziesz w naszej dokumentacji. Aby lepiej zrozumieć te właściwości, zapoznaj się z słowniczkiem Khronos.

Aby dostosować właściwości materiału modelu 3D, najpierw utwórz nowy materiał za pomocą KhronosPbrMaterial. Musisz ustawić odpowiedni AlphaMode, aby uzyskać pożądany wygląd:
val pbrMaterial = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE )
Następnie określ właściwości, które chcesz zmodyfikować. W tym przykładzie używamy elementu setBaseColorFactor, aby zmienić kolor podstawowy. Ta metoda wymaga podania wartości Vector4, gdzie komponenty x, y, z i w odpowiadają odpowiednio wartościom RGBA (czerwony, zielony, niebieski i alfa):
pbrMaterial.setBaseColorFactor( Vector4( x = 0.5f, y = 0.0f, z = 0.5f, w = 1.0f ) )
Tworzenie niestandardowych tekstur dla modelu 3D
Texture to komponent z obrazem, który możesz zastosować na powierzchni Modelu 3D, aby dodać kolor, szczegóły lub inne informacje o powierzchni. Interfejs Jetpack XR Texture API umożliwia asynchroniczne wczytywanie danych obrazu, np. plików PNG, z folderu /assets/ aplikacji.
Podczas wczytywania tekstury możesz określić TextureSampler, który kontroluje sposób renderowania tekstury. Sampler określa właściwości filtrowania (gdy tekstura jest mniejsza lub większa niż jej oryginalny rozmiar) i tryby zawijania (do obsługi współrzędnych poza standardowym zakresem [0, 1]).
Obiekt Texture sam w sobie jest tylko danymi. Aby wywołać efekt wizualny na modelu 3D, musi być przypisany do obiektu Material.

Aby utworzyć niestandardową teksturę, najpierw musisz zapisać plik obrazu w folderze /assets/. Najlepiej jest też utworzyć w tym folderze textures
podkatalog.
Po zapisaniu pliku w odpowiednim katalogu utwórz teksturę za pomocą interfejsu Texture API. W razie potrzeby możesz też zastosować opcjonalny TextureSampler:
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
Następnie określ typ tekstury i ustaw odpowiednie parametry. W tym przykładzie zastosujemy teksturę okluzji i ustawimy jej siłę:
pbrMaterial.setOcclusionTexture( texture = texture, strength = 1.0f )
Stosowanie materiałów i tekstur do obiektów 3D
Aby zastosować nowy materiał lub teksturę, zastąp istniejący materiał w przypadku konkretnego węzła w węźle glTF. Aby to zrobić, zadzwoń pod numer setMaterialOverride na GltfModelNode:
gltfModelNode.setMaterialOverride( material = pbrMaterial )
Aby usunąć nowo utworzone materiały, wywołaj funkcję clearMaterialOverride na wcześniej zastąpionym węźle w GltfModelNode. Spowoduje to przywrócenie modelu 3D do stanu domyślnego:
gltfModelNode.clearMaterialOverride()
glTF i logo glTF są znakami towarowymi firmy Khronos Group Inc.