Shader standard MRTK2

Esempi di shader standard

Il sistema di ombreggiatura MRTK2 Standard usa un singolo shader flessibile in grado di ottenere oggetti visivi simili allo shader Standard di Unity, implementare principi di Fluent Design System e rimanere efficienti nei dispositivi di realtà mista.

Scene di esempio

È possibile trovare gli esempi di materiale shader nella scena MaterialGallery in MRTK/Examples/Demos/StandardShader/Scenes/. Tutti i materiali in questa scena usano lo shader MRTK/Standard.

Raccolta materiali

È possibile trovare una scena di confronto per confrontare e testare lo shader MRTK/Standard con l'esempio dello shader Unity/Standard nella scena StandardMaterialComparison in MRTK/Examples/Demos/StandardShader/Scenes/.

Confronto materiale

Architettura

Il sistema di ombreggiatura MRTK/Standard è un "uber shader" che usa la funzionalità di variante del programma shader di Unity per generare automaticamente codice shader ottimale in base alle proprietà del materiale. Quando un utente seleziona le proprietà materiali nel controllo materiale, comporta solo un costo delle prestazioni per le funzionalità abilitate.

Controllo materiale

Esiste un controllo materiale personalizzato per lo shader MRTK/Standard denominato MixedRealityStandardShaderGUI.cs. Il controllo abilita/disabilita automaticamente le funzionalità dello shader, in base alla selezione dell'utente e agli aidi nella configurazione dello stato di rendering. Per altre informazioni su ogni funzionalità , passare il puntatore del mouse su ogni proprietà nell'editor di Unity per una descrizione comando.

Controllo materiale

La prima parte del controllo controlla lo stato di rendering del materiale. La modalità di rendering determina quando e come verrà eseguito il rendering di un materiale. Lo scopo dello shader MRTK/Standard è quello di eseguire il mirroring delle modalità di rendering disponibili nello shader Unity/Standard. Lo shader MRTK/Standard include anche una modalità di rendering additive e la modalità di rendering personalizzata per il controllo utente completo.

Modalità di rendering Descrizione
Opaco (Impostazione predefinita) Adatto per oggetti solidi normali senza aree trasparenti.
Ritaglio Consente la creazione di effetti trasparenti con bordi rigidi tra le aree opache e trasparenti. In questa modalità non sono presenti aree semitrasparente, la trama è opaca al 100% o invisibile. Ciò è utile quando si utilizza la trasparenza per creare la forma dei materiali, ad esempio la vegetazione.
Dissolvenza Consente ai valori di trasparenza di dissolvere completamente un oggetto, incluse eventuali evidenziazioni speculari o riflessi che potrebbero avere. Questa modalità è utile se vuoi animare un oggetto in dissolvenza o in uscita. Non è adatto per il rendering di materiali trasparenti realistici come la plastica chiara o il vetro, perché anche i riflessi e le evidenziazioni verranno sbiaditi.
Modalità trasparente Adatto per il rendering di materiali trasparenti realistici, ad esempio plastica chiara o vetro. In questa modalità, il materiale stesso assumerà valori di trasparenza (in base al canale alfa della trama e all'alfa del colore della tinta). Tuttavia, i riflessi e gli elementi di luce rimarranno visibili con chiarezza completa, come nel caso dei materiali trasparenti reali.
Additive Abilita una modalità di fusione aggiuntiva, che somma il colore del pixel precedente con il colore del pixel corrente. Si tratta della modalità di trasparenza preferita per evitare problemi di ordinamento della trasparenza.
Personalizzato Consente di controllare manualmente ogni aspetto della modalità di rendering. Solo per l'utilizzo avanzato.

Modalità di rendering

Modalità Cull Descrizione
Off Disabilita la culling del viso. Culling deve essere impostato su Off solo quando è necessaria una mesh laterale.
Front Abilita la culling del viso anteriore.
Indietro (Impostazione predefinita) Abilita la culling del viso indietro. Per migliorare le prestazioni di rendering, è consigliabile abilitare il più spesso possibile la riduzione delle prestazioni del viso indietro.

Prestazioni

Uno dei principali vantaggi dell'uso dello shader MRTK Standard rispetto allo shader standard di Unity è rappresentato dalle prestazioni. MrTK Standard Shader è estendibile per usare solo le funzionalità abilitate. Tuttavia, lo shader MRTK Standard è stato scritto anche per offrire risultati estetici paragonabili come lo shader Standard di Unity, ma a un costo molto inferiore. Un modo semplice per confrontare le prestazioni dello shader consiste nel numero di operazioni che devono essere eseguite sulla GPU. Naturalmente, la grandezza dei calcoli può variare in base alle funzionalità abilitate e ad altre configurazioni di rendering. In generale, tuttavia, lo shader MRTK Standard esegue un calcolo significativamente inferiore rispetto allo shader Standard di Unity.

Esempio di statistiche dello shader Standard di Unity

Statistiche dello shader standard di Unity

Esempio di statistiche shader MRTK Standard

Statistiche dello shader standard MRTK

Nota

Questi risultati possono essere generati selezionando e visualizzando un asset shader nel controllo Unity, quindi facendo clic sul pulsante Compila e mostra codice .

Luce

MRTK/Standard usa una semplice approssimazione per l'illuminazione. Poiché questo shader non calcola la correttezza fisica e la conservazione dell'energia, esegue il rendering in modo rapido ed efficiente. Blinn-Phong è la tecnica di illuminazione principale che viene combinata con Fresnel e illuminazione basata su immagine per approssimare l'illuminazione fisicamente basata su. Lo shader supporta le tecniche di illuminazione seguenti:

Luce direzionale

Lo shader rispetterà la direzione, il colore e l'intensità della prima luce direzionale unity nella scena (se abilitata). Le luci a punto dinamico, le luci spot o qualsiasi altra luce Unity non verranno considerate in tempo reale.

Armonica sferica

Lo shader userà probe di luce per approssimare le luci nella scena usando armonica sferica, se abilitata. I calcoli armonici sferici vengono eseguiti per vertice per ridurre i costi di calcolo.

Mappa di luce

Per l'illuminazione statica, lo shader rispetterà le mappe chiare create dal sistema Lightmapping di Unity. È sufficiente contrassegnare il renderer come statico (o statico della mappa leggera) per usare le mappe leggero.

Luce al passaggio del mouse

Luce di prossimità

Supporto della pipeline di rendering con script lightweight

MRTK contiene un percorso di aggiornamento che consente agli sviluppatori di usare la pipeline di rendering lightweight scriptable (LWRP) di Unity con gli shader MRTK. Testato nel pacchetto Unity 2019.1.1f1 e Lightweight RP 5.7.2. o istruzioni su come iniziare a usare LWRP, vedere questa pagina.

Per eseguire l'aggiornamento di MRTK, selezionare: Realtà mista Toolkit -> Utilità -> Aggiornare lo shader standard MRTK per la pipeline di rendering leggera

Aggiornamento di lwrp

Dopo l'aggiornamento, lo shader MRTK/Standard verrà modificato e tutti i materiali magenta (errore dello shader) devono essere corretti. Per verificare che l'aggiornamento sia stato eseguito correttamente, controllare la console per: Asset aggiornati/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader per l'uso con la pipeline di rendering leggera.

Supporto UGUI

Il sistema di ombreggiatura MRTK Standard funziona con il sistema di interfaccia utente predefinito di Unity. Nei componenti dell'interfaccia utente di Unity, la matrice di unity_ObjectToWorld non è la matrice di trasformazione della trasformazione locale in cui risiede il componente Grafico, ma quello del canvas padre. Molti effetti dello shader MRTK/Standard richiedono che la scala degli oggetti sia nota. Per risolvere questo problema, archivierà le ScaleMeshEffect.cs informazioni di ridimensionamento in attributi del canale UV durante la costruzione della mesh dell'interfaccia utente.

Nota, quando si usa un componente Di immagine unity, è consigliabile specificare "Nessuno (Sprite)" per l'immagine di origine per impedire all'interfaccia utente di Unity di generare vertici aggiuntivi.

Un canvas all'interno di MRTK richiederà l'aggiunta di un ScaleMeshEffect.cs oggetto quando è necessario:

effetto mesh di scalabilità

Combinazione di trame

Per migliorare la parità con i valori di shader Unity Standard per pixel metallico, liscia, emissivo e occlusione, possono essere controllati tutti tramite la compressione del canale. Ad esempio:

Esempio di mappa del canale

Quando si usa la compressione del canale, è necessario solo campione e caricare una trama in memoria anziché quattro separati. Quando scrivi le mappe della trama in un programma come Substance o Photoshop, puoi crearle come segue:

Channel Proprietà
Red Metallici
Green Occlusione
Blu Emissione (scala grigia)
Alfa Scorrevolezza

In alternativa, è possibile usare lo strumento di combinazione trame MRTK. Per aprire lo strumento, selezionare: Realtà mista Toolkit - Utilità ->> Texture Combiner che aprirà la finestra seguente:

Esempio di combinazione di trame

Questa finestra può essere compilata automaticamente selezionando uno shader Standard di Unity e facendo clic su "Autopopulate from Standard Material". In alternativa, è possibile specificare manualmente una trama (o un valore costante) per canale rosso, verde, blu o alfa. La combinazione di trame è accelerata dalla GPU e non richiede l'accessibilità della trama di input.

Documentazione aggiuntiva sulla funzionalità

Di seguito sono riportati dettagli aggiuntivi su una manciata di dettagli delle funzionalità disponibili con MRTK/Standard shader.

Ritaglio primitivo

ritaglio primitivo

Struttura mesh

Molte tecniche di struttura mesh vengono eseguite usando una tecnica di post-elaborazione . L'elaborazione post-elaborazione offre grandi contorni di qualità, ma può essere proibitivamente costoso su molti dispositivi Realtà mista. È possibile trovare una scena che illustra l'utilizzo di contorni mesh nella scena OutlineExamples in MRTK/Examples/Demos/StandardShader/Scenes/.

Struttura mesh

MeshOutline.cs e MeshOutlineHierarchy.cs può essere usato per eseguire il rendering di una struttura intorno a un renderer mesh. L'abilitazione di questo componente introduce un passaggio di rendering aggiuntivo dell'oggetto descritto, ma è progettato per l'esecuzione in modo efficiente nei dispositivi mobili Realtà mista e non usa processi post. Le limitazioni di questo effetto includono che non funzionano bene sugli oggetti che non sono impermeabili (o necessari per essere due lato) e i problemi di ordinamento della profondità possono verificarsi su oggetti sovrapposti.

I comportamenti della struttura sono progettati per essere usati insieme allo shader MRTK/Standard. I materiali struttura sono in genere un colore a tinta unita, ma possono essere configurati per ottenere un'ampia gamma di effetti. La configurazione predefinita di un materiale di struttura è la seguente:

Materiale struttura mesh
  1. Scrittura profondità: deve essere disabilitato per i materiali struttura per assicurarsi che la struttura non impedisca l'esecuzione del rendering di altri oggetti.
  2. Estrusione vertice: deve essere abilitata per eseguire il rendering della struttura.
  3. Usare Smooth Normals: questa impostazione è facoltativa per alcune mesh. L'estrusione si verifica spostando un vertice lungo un vertice normale, su alcune mesh estruse lungo le normali predefinite causeranno interruzioni nella struttura. Per correggere queste interruzioni, è possibile selezionare questa casella per usare un altro set di normali smoothed generati da MeshSmoother.cs

MeshSmoother.cs è un componente che può essere usato per generare automaticamente normali lisciati in una mesh. Questo metodo raggruppa i vertici in una mesh che condividono la stessa posizione nello spazio, quindi media i normali di tali vertici. Questo processo crea una copia della mesh sottostante e deve essere usata solo quando necessario.

Contorno normali lisci
  1. Normali lisci generati tramite MeshSmoother.cs.
  2. Normali predefiniti usati, notare gli artefatti intorno agli angoli del cubo.

Test di Stencil

Supporto dei test stencil configurabili per ottenere un'ampia gamma di effetti. Ad esempio i portali:

Test stencil

Supporto dei colori dell'istanza

Supporto del colore dell'istanza per dare migliaia di mesh con istanza della GPU proprietà di materiale univoco:

proprietà istanze

Mapping di triplanar

Il mapping di Triplanar è una tecnica per trame a livello di codice di una mesh. Spesso usato in terreno, mesh senza UV o difficile da rimuovere forme. Questa implementazione supporta la proiezione dello spazio locale o mondiale, la specifica della fluidità di fusione e del supporto della mappa normale. Nota, ogni trama usata richiede 3 campioni di trama, quindi usare in modo spasimo nelle situazioni critiche per le prestazioni.

triplanar

Estrusione del vertice

Estrusione vertex nello spazio mondiale. Utile per visualizzare volumi di delimitazione estrusi o transizioni in/out mesh.

scala normale mappa 1

Varie

Casella di controllo per controllare le ottimizzazioni albedo. Poiché le operazioni di ottimizzazione albedo sono disabilitate quando non viene specificata alcuna trama albedo. Questo è utile per controllare il caricamento di trame remote.

Selezionare semplicemente questa casella:

assegnazione albedo

Sono supportate le trame di ritaglio per pixel, l'anti aliasing basato su bordo locale e il ridimensionamento normale della mappa.

scala mappa normale 2

Vedi anche