Shader standard MRTK2

Esempi standard di shader

Il sistema di ombreggiatura standard MRTK2 usa un singolo shader flessibile che può ottenere oggetti visivi simili a Standard Shader di Unity, implementare principi 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 materiale

È possibile trovare una scena di confronto per confrontare e testare lo shader MRTK/Standard con l'esempio di 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à del materiale nel controllo materiale, comporta solo costi di prestazioni per le funzionalità abilitate.

Controllo materiale

Esiste un controllo materiale personalizzato per il shader MRTK/Standard denominato MixedRealityStandardShaderGUI.cs. Il controllo abilita/disabilita automaticamente le funzionalità 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. L'obiettivo di MRTK/Standard shader consiste nel mirroring delle modalità di rendering trovate nello shader Unity/Standard. MrTK/Standard shader include anche una modalità di rendering additiva e 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 semi-trasparenti, la trama è opaca del 100% o invisibile. Questo è utile quando si usa la trasparenza per creare la forma di materiali, ad esempio la vegetazione.
Dissolvenza Consente ai valori di trasparenza di svanire completamente un oggetto, inclusi gli evidenziazioni speculari o le reflection che potrebbero avere. Questa modalità è utile se si vuole animare un oggetto in uscita o in uscita. Non è adatto per il rendering di materiali trasparenti realistici, ad esempio plastica chiara o vetro, perché i riflessi e le evidenziazioni verranno anche 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 le evidenziazioni di illuminazione rimarranno visibili con chiarezza completa, come è il caso con materiali trasparenti reali.
Additive Abilita una modalità di fusione additiva, 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. La selezione deve essere impostata solo su Off quando è necessaria una mesh lato due.
Front Abilita l'abbattimento del viso anteriore.
Indietro (Impostazione predefinita) Abilita la culling del viso indietro. La riduzione del viso indietro deve essere abilitata il più spesso possibile per migliorare le prestazioni di rendering.

Prestazioni

Uno dei vantaggi principali per l'uso dello shader MRTK Standard rispetto allo shader standard di Unity è le prestazioni. MrTK Standard Shader è estendibile solo per usare le funzionalità abilitate. Tuttavia, lo shader MRTK Standard è stato scritto anche per offrire risultati estetici paragonabili come lo shader Di Unity Standard, 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. Tuttavia, in generale, lo shader MRTK Standard esegue un calcolo significativamente inferiore rispetto allo shader Standard di Unity.

Esempio di statistiche di Unity Standard shader

Statistiche di Unity Standard Shader

Esempio di statistiche dello shader standard MRTK

Statistiche di MRTK Standard Shader

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 un'approssimazione semplice per l'illuminazione. Poiché questo shader non calcola la correttezza fisica e la conservazione dell'energia, esegue il rendering rapido ed efficiente. Blinn-Phong è la tecnica di illuminazione primaria che si fonde con Fresnel e illuminazione basata sull'immagine per approssimare l'illuminazione fisicamente basata su. Lo shader supporta le tecniche di illuminazione seguenti:

Luce direzionale

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

Armonica sferica

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

Lightmapping

Per l'illuminazione statica, lo shader rispetta le mappe luminose compilate dal sistema Lightmapping di Unity. Contrassegnare semplicemente il renderer come statico (o statico della mappa leggera) per usare le mappe di luce.

Luce sospesa

Luce di prossimità

Supporto della pipeline di rendering scriptabile leggero

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

Per eseguire l'aggiornamento MRTK, selezionare: Realtà mista Toolkit - Utilità> -> Aggiornare MRTK Standard Shader per la pipeline di rendering leggero

aggiornamento lwrp

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

Supporto UGUI

Il sistema di ombreggiatura MRTK Standard funziona con il sistema di interfaccia utente integrato di Unity. Nei componenti dell'interfaccia utente di Unity, la matrice di unity_ObjectToWorld non è la matrice di trasformazione locale del componente Grafico è attiva ma quella del canvas padre. Molti effetti di MRTK/Standard shader richiedono la scalabilità degli oggetti per essere noti. Per risolvere questo problema, le informazioni di ridimensionamento verranno archiviate negli attributi del canale UV durante la ScaleMeshEffect.cs 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