Dostosowywanie modeli 3D w aplikacji

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć aplikacje na te typy urządzeń XR.
Gogle XR
Przewodowe okulary XR

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()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.

Przykład zmiany kolorów podstawowych na modelu 3D

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, zw 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.

Przykład zmiany tekstury modelu 3D

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.