Dostosowywanie modeli 3D w aplikacji

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć treści na te urządzenia XR.
Gogle XR
Przewodowe okulary XR

Po dodaniu modelu 3D do aplikacji możesz poprawić wrażenia wizualne, definiując niestandardowe właściwości materiału i stosując tekstury do obiektu. 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). Są to otwarte standardy utrzymywane przez grupę Khronos.

Atrybuty materiału można dostosowywać w czasie działania, aby dynamicznie zmieniać wygląd obiektu na podstawie danych wejściowych użytkownika lub bieżącego stanu aplikacji.

Szczegółowe informacje 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 glosariuszem Khronos.

Dostosowywanie właściwości materiału modelu 3D

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 nie są oświetlone i nie mają na nie wpływu ustawienia oświetlenia sceny. KhronosPbrMaterial umożliwia dostosowywanie szerszego zakresu właściwości, takich jak kolor połysku, metaliczność lub szorstkość obiektu oraz to, czy emituje on światło.

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ą ikony 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 = 0.0f
    )
)

Tworzenie niestandardowych tekstur dla modelu 3D

Texture to komponent obrazu, 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ć teksturę niestandardową, 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 obiekcie glTF. Aby to zrobić, zadzwoń pod numer setMaterialOverride na GltfModelEntity:

gltfModelEntity.setMaterialOverride(
    material = pbrMaterial,
    nodeName = "Node Name"
)

Aby usunąć nowo utworzone materiały, wywołaj funkcję clearMaterialOverride na wcześniej zastąpionym węźle w GltfModelEntity. Spowoduje to przywrócenie modelu 3D do stanu domyślnego:

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


glTF i logo glTF są znakami towarowymi Khronos Group Inc.