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.

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.

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.