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 definendo proprietà dei materiali personalizzate e applicando texture all'oggetto. Il sistema di 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). Si tratta di standard aperti gestiti dal Khronos Group.

Gli attributi dei materiali possono essere modificati durante l'esecuzione per cambiare dinamicamente l'aspetto di un oggetto in base all'input dell'utente o allo stato attuale dell'app.

Per informazioni dettagliate 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.

Personalizzare le proprietà del materiale del modello 3D

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 classi KhronosPbrMaterial e KhronosUnlitMaterial vengono utilizzate per creare e manipolare questi materiali. Come suggerisce il nome, KhronosUnlitMaterials sono spenti e non sono interessati dall'illuminazione della scena. KhronosPbrMaterial ti consente di personalizzare una gamma più ampia di proprietà, come il colore della lucentezza, il grado di metallicità o ruvidità di un oggetto e se emette luce.

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

Per personalizzare le proprietà del materiale del modello 3D, devi prima creare il nuovo materiale utilizzando KhronosPbrMaterial. Devi impostare il AlphaMode appropriato per l'aspetto visivo che vuoi 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 = 0.0f
    )
)

Creare texture personalizzate per il modello 3D

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

Quando carichi una texture, puoi specificare un TextureSampler, che controlla la modalità di rendering della texture. Il campionatore definisce le proprietà di filtro (per quando la trama appare più piccola o più grande delle dimensioni originali) e le modalità di wrapping (per la gestione delle coordinate al di fuori dell'intervallo [0, 1] standard). 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, ti consigliamo di creare anche una sottodirectory in questa cartella.textures

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

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

Dopodiché, 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 dell'entità glTF. Per farlo, chiama setMaterialOverride su GltfModelEntity:

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

Per rimuovere i materiali appena creati, chiama clearMaterialOverride sul nodo sottoposto a override in precedenza su GltfModelEntity. In questo modo, il modello 3D torna allo stato predefinito:

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


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