Personalizzare i modelli 3D nell'app

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Visori XR
Occhiali XR con cavo

Dopo aver aggiunto un modello 3D alla tua app, puoi migliorare l'esperienza visiva e interattiva personalizzandolo. Ad esempio, puoi riprodurre e controllare le animazioni glTF incorporate, definire proprietà dei materiali personalizzate (come colori di base o rugosità metallica) e applicare texture personalizzate ai tuoi modelli 3D. Queste funzionalità ti consentono di modificare dinamicamente l'aspetto e il comportamento di un oggetto in fase di runtime.

Animare modelli 3D

Nell'ambito della specifica glTF, i modelli 3D possono avere animazioni incorporate. Le animazioni scheletriche (con rigging), rigide e di destinazione di morph (forme di fusione) sono tutte supportate in Jetpack XR SDK. Sono supportate anche le animazioni dei materiali create con l'estensione glTF KHR_animation_pointer.

Per riprodurre un'animazione, specifica il nome della traccia specifica dall' elenco di animations. Chiama GltfAnimation.start() per iniziare la riproduzione. Facoltativamente, puoi specificare la velocità, il tempo di ricerca e se l'animazione deve essere riprodotta in loop utilizzando GltfAnimationStartOptions.

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

Puoi anche pause(), resume() e stop() le animazioni, nonché utilizzare seekTo() per passare a un momento specifico nella traccia dell'animazione. Per eseguire una query sullo stato attuale dell'animazione, utilizza GltfAnimation.AnimationState.

Personalizzare le proprietà dei materiali del modello 3D

Il sistema dei materiali di Jetpack XR si basa sulla specifica glTF™ 2.0 e i modelli 3D vengono sottoposti a rendering utilizzando il rendering basato sulla fisica (PBR). Puoi modificare gli attributi dei materiali durante il runtime per cambiare dinamicamente l'aspetto di un oggetto in base all'input dell'utente o allo stato attuale dell'app.

Un Material definisce un insieme di proprietà visive per la superficie di un oggetto e determina il modo in cui la superficie interagisce con la luce nella scena.

In Jetpack XR, le KhronosPbrMaterial e KhronosUnlitMaterial classi vengono utilizzate per creare e manipolare questi materiali. Come suggerisce il nome, KhronosUnlitMaterials non sono illuminati e non sono influenzati dall'illuminazione della scena. KhronosPbrMaterial ti consente di personalizzare una gamma più ampia di proprietà, come il colore della lucentezza, la rugosità o la metallicità di un oggetto e se emette luce.

Per ulteriori informazioni su ogni proprietà supportata e sui parametri personalizzabili in Android XR, consulta la nostra documentazione di riferimento. Per comprendere meglio queste proprietà, consulta il glossario di Khronos.

Esempio di modifica dei colori di base di un modello 3D

Per personalizzare le proprietà dei materiali del modello 3D, devi prima creare il nuovo materiale utilizzando KhronosPbrMaterial. Dovrai impostare il valore appropriato AlphaMode per l'aspetto visivo che stai cercando di ottenere:

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

Poi, definisci le proprietà che vuoi modificare. In questo esempio, utilizziamo setBaseColorFactor per modificare il colore di base. Questo metodo richiede un Vector4, in cui i componenti x, y, z e w corrispondono rispettivamente ai valori RGBA (rosso, verde, blu e alfa):

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 1.0f
    )
)

Creare texture personalizzate per il modello 3D

Un Texture è un asset immagine che puoi applicare alla superficie di un modello 3D per fornire colore, dettagli o altre informazioni sulla superficie. L'API Texture di Jetpack XR ti consente di caricare in modo asincrono i dati delle immagini, ad esempio i file PNG, dalla cartella /assets/ della tua app.

Quando carichi una texture, puoi specificare un TextureSampler, che controlla il rendering della texture. Il campionatore definisce le proprietà di filtro (per quando la texture appare più piccola o più grande della sua dimensione originale) e le modalità di wrapping (per la gestione delle coordinate al di fuori dell'intervallo standard [0, 1] ). Un oggetto Texture di per sé è solo un dato; deve essere assegnato a un Material per avere un effetto visivo su un modello 3D.

Esempio di modifica della texture di un modello 3D

Per creare una texture personalizzata, devi prima salvare il file immagine nella cartella /assets/. Come best practice, potresti anche creare una sottodirectory textures in questa cartella.

Dopo aver salvato il file nella directory appropriata, crea la texture con l'API Texture. È qui che applicheresti anche un facoltativo TextureSampler, se necessario:

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

Poi, definisci il tipo di texture e imposta i parametri corrispondenti. In questo esempio, applichiamo una texture di occlusione e impostiamo la forza:

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

Applicare materiali e texture agli oggetti 3D

Per applicare il nuovo materiale o la nuova texture, sostituisci il materiale esistente per un nodo specifico sul nodo glTF. Per farlo, chiama setMaterialOverride su GltfModelNode:

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

Per rimuovere i materiali appena creati, chiama clearMaterialOverride su l nodo sostituito in precedenza su GltfModelNode. In questo modo, il modello 3D torna allo stato predefinito:

gltfModelNode.clearMaterialOverride()


glTF e il logo glTF sono marchi di Khronos Group Inc.