MRTK2 standard skuggning

Exempel på standardskuggning

MRTK2 Standard-skuggningssystemet använder en enda, flexibel skuggning som kan uppnå visuella objekt som liknar Unitys Standard Shader, implementera Fluent Design-system principer och förbli högpresterande på enheter med mixad verklighet.

Exempelscener

Du hittar skuggningsmaterialexemplen i MaterialGallery-scenen under MRTK/Examples/Demos/StandardShader/Scenes/. Allt material i den här scenen använder MRTK/Standard-skuggningen.

Materialgalleri

Du hittar en jämförelsescen för att jämföra och testa MRTK/Standard-skuggningen mot Unity/Standard-skuggningsexemplet i StandardMaterialComparison-scenen under MRTK/Examples/Demos/StandardShader/Scenes/.

Materialjämförelse

Arkitektur

MRTK/Standard-skuggningssystemet är en "uber shader" som använder Unitys shaderprogramvariantfunktion för att automatiskt generera optimal skuggningskod baserat på materialegenskaper. När en användare väljer materialegenskaper i materialkontrollen medför de bara prestandakostnader för funktioner som de har aktiverat.

Materialkontroll

Det finns en anpassad materialkontroll för MRTK/Standard-skuggningen med namnet MixedRealityStandardShaderGUI.cs. Inspektören aktiverar/inaktiverar automatiskt skuggningsfunktioner, baserat på användarval och medhjälpare vid konfiguration av återgivningstillstånd. Om du vill ha mer information om varje funktion hovra över varje egenskap i Unity-redigeraren för en knappbeskrivning.

Materialkontroll

Den första delen av inspektören styr materialets återgivningstillstånd. Renderingsläget avgör när och hur ett material ska renderas. Syftet med MRTK/Standard-skuggningen är att spegla återgivningslägena som finns i Unity/Standard-skuggningen. MRTK/Standard-skuggningen innehåller även ett additivt återgivningsläge och anpassat återgivningsläge för fullständig användarkontroll.

Återgivningsläge Description
Ogenomskinlig (Standard) Lämplig för normala fasta objekt utan genomskinliga områden.
Utklipp Gör det möjligt att skapa transparenta effekter som har hårda kanter mellan de ogenomskinliga och transparenta områdena. I det här läget finns det inga halvtransparent områden, texturen är antingen 100 % ogenomskinlig eller osynlig. Detta är användbart när du använder transparens för att skapa form av material, till exempel vegetation.
Blekna Gör att transparensvärdena helt kan tona ut ett objekt, inklusive eventuella spekulativa markeringar eller reflektioner som det kan ha. Det här läget är användbart om du vill animera ett objekt som bleknar in eller ut. Den är inte lämplig för att återge realistiska transparenta material som klar plast eller glas eftersom reflektionerna och höjdpunkterna också kommer att blekna ut.
Genomskinlig Lämplig för återgivning av realistiska transparenta material som klar plast eller glas. I det här läget får själva materialet transparensvärden (baserat på strukturens alfakanal och färgfärgens alfa). Reflektioner och ljuspunkter kommer dock att förbli synliga med fullständig klarhet, vilket är fallet med verkligt transparenta material.
Additiv Aktiverar ett additivt blandningsläge som summerar den tidigare pixelfärgen med den aktuella pixelfärgen. Det här är det föredragna transparensläget för att undvika problem med transparenssortering.
Anpassat Gör att alla aspekter av återgivningsläget kan styras manuellt. Endast för avancerad användning.

Återgivningslägen

Gallringsläge Description
Av Inaktiverar ansiktsgallring. Utgallring bör endast ställas in på Av när ett dubbelsidigt nät krävs.
Front Aktiverar ansiktsgallring på framsidan.
Tillbaka (Standard) Aktiverar utgallring av baksidan. Utslaktning på baksidan bör aktiveras så ofta som möjligt för att förbättra återgivningsprestandan.

Prestanda

En av de främsta fördelarna med att använda MRTK Standard-skuggningen jämfört med Unity Standard Shader är prestanda. MRTK Standard Shader är utökningsbar för att endast använda de funktioner som är aktiverade. Men MRTK Standard shader har också skrivits för att leverera jämförbara estetiska resultat som Unity Standard shader, men till en mycket lägre kostnad. Ett enkelt sätt att jämföra skuggningsprestanda är via det antal åtgärder som behöver utföras på GPU:n. Naturligtvis kan beräkningarnas omfattning variera efter funktioner som är aktiverade och andra återgivningskonfigurationer. Men i allmänhet utför MRTK Standard-skuggningen betydligt mindre beräkning än Unity Standard-skuggningen.

Exempel på Unity Standard-skuggningsstatistik

Unity Standard Shader-statistik

Exempel på statistik för MRTK Standard-skuggning

MRTK Standard Shader-statistik

Anteckning

Dessa resultat kan genereras genom att välja och visa en skuggningstillgång i Unity-inspektören och sedan klicka på knappen Kompilera och visa kod .

Belysning

MRTK/Standard använder en enkel uppskattning för belysning. Eftersom den här skuggningen inte beräknas för fysisk korrekthet och energisparfunktioner återges den snabbt och effektivt. Blinn-Phong är den primära belysningstekniken som blandas med Fresnel och bildbaserad belysning för att approximera fysiskt baserad belysning. Skuggningen stöder följande belysningstekniker:

Riktningsljus

Skuggningen respekterar riktningen, färgen och intensiteten för det första Unity Directional Light i scenen (om det är aktiverat). Dynamiska punktljus, dekorljus eller annat Unity-ljus kommer inte att beaktas i realtidsbelysning.

Sfäriska övertoner

Skuggningen använder ljusavsökningar för att approximera ljus i scenen med hjälp av sfäriska övertoner, om det är aktiverat. Sfäriska övertonsberäkningar utförs per hörn för att minska beräkningskostnaden.

Ljusmappning

För statisk belysning kommer skuggningen att respektera ljuskartor som skapats av Unitys Lightmapping-system. Markera bara renderaren som statisk (eller statisk ljuskarta) för att använda ljuskartor.

Hovringsljus

Närhetsljus

Stöd för Pipeline för enkel skriptbar återgivning

MRTK innehåller en uppgraderingsväg som gör det möjligt för utvecklare att använda Unitys LWRP (Lightweight Scriptable Render Pipeline) med MRTK-skuggor. Testas i Unity 2019.1.1f1 och Lightweight RP 5.7.2-paketet. Anvisningar om hur du kommer igång med LWRP finns på den här sidan.

Om du vill utföra MRTK-uppgraderingen väljer du: Mixed Reality Toolkit –> Verktyg –> Uppgradera MRTK Standard Shader för Lightweight Render Pipeline

Skriv upp uppgradering

När uppgraderingen har slutförts ändras MRTK/Standard-skuggningen och eventuella magenta-material (skuggningsfel) bör åtgärdas. Kontrollera att uppgraderingen har slutförts genom att kontrollera om konsolen har uppgraderat tillgångar/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader för användning med Lightweight Render Pipeline.

UGUI-stöd

MRTK Standard-skuggningssystemet fungerar med Unitys inbyggda UI-system. I Unity UI-komponenter är den unity_ObjectToWorld matrisen inte transformeringsmatrisen för den lokala transformeringen som den grafiska komponenten lever på utan den överordnade arbetsytans. Många MRTK/Standard-skuggningseffekter kräver att objektskalan är känd. För att lösa det här problemet lagrar skalningsinformationen ScaleMeshEffect.cs i UV-kanalattribut under konstruktionen av användargränssnittsnät.

Observera att när du använder en Unity Image-komponent rekommenderar vi att du anger "Ingen (Sprite)" för källbilden för att förhindra att Unity-användargränssnittet genererar extra hörn.

En arbetsyta i MRTK frågar efter tillägg av en ScaleMeshEffect.cs när en krävs:

skalningsnäteffekt

Kombinerare för struktur

För att förbättra pariteten med Unity Standard-skuggningen per pixel kan metalliska värden, jämnhet, tillåtande värden och ocklusionsvärden styras via kanalpackning. Exempel:

exempel på kanalkarta

När du använder kanalpackning behöver du bara prova och läsa in en textur i minnet i stället för fyra separata. När du skriver dina texturkartor i ett program som Substance eller Photoshop kan du packa dem så här:

Kanal Egenskap
Red Metalliska
Green Ocklusion
Blue Utsläpp (gråskala)
Alfa Jämnhet

Du kan också använda verktyget MRTK Texture Combiner. Öppna verktyget genom att välja: Mixed Reality Toolkit –> Verktyg –> Texture Combiner som öppnar fönstret nedan:

exempel på texturbindning

Det här fönstret kan fyllas i automatiskt genom att välja en Unity Standard-skuggning och klicka på "Fyll i automatiskt från standardmaterial". Eller så kan du manuellt ange en struktur (eller ett konstant värde) per röd, grön, blå eller alfakanal. Texturkombinationen är GPU-accelererad och kräver inte att indatastrukturen är cpu-tillgänglig.

Ytterligare funktionsdokumentation

Nedan visas ytterligare information om en handfull funktionsinformation som är tillgängliga med MRTK/Standard Shader.

Primitivt urklipp

primitivt urklipp

Nätkonturer

Många mesh-dispositionstekniker görs med hjälp av en efterbearbetningsteknik . Efterbearbetning ger bra kvalitet konturer, men kan vara oöverkomligt dyrt på många Mixed Reality enheter. Du hittar en scen som visar användningen av mesh-dispositioner i OutlineExamples-scenen under MRTK/Examples/Demos/StandardShader/Scenes/.

Nätdisposition

MeshOutline.cs och MeshOutlineHierarchy.cs kan användas för att återge en kontur runt en nätåtergivning. Om du aktiverar den här komponenten introduceras ytterligare en återgivningsströmning av objektet som beskrivs, men är utformat för att köras på mobila Mixed Reality enheter och använder inte några postprocesser. Begränsningarna för den här effekten är att den inte fungerar bra på objekt som inte är vattentäta (eller som måste vara tvåsidiga) och problem med djupsortering kan uppstå på överlappande objekt.

Dispositionsbeteendena är utformade för att användas tillsammans med MRTK/Standard-skuggningen. Dispositionsmaterial är vanligtvis en solid obelyst färg, men kan konfigureras för att uppnå en mängd olika effekter. Standardkonfigurationen för ett dispositionsmaterial är följande:

Nätdispositionsmaterial
  1. Djupskrivning – bör inaktiveras för dispositionsmaterial för att se till att konturen inte hindrar andra objekt från att återges.
  2. Hörnextrusion – måste aktiveras för att återge dispositionen.
  3. Använd Smooth Normals – den här inställningen är valfri för vissa nät. Extrusion sker genom att flytta ett hörn längs ett hörn normalt, på vissa nät som sticker ut längs standardnormalerna kommer att orsaka avbrott i konturen. För att åtgärda dessa avbrott kan du markera den här kryssrutan för att använda en annan uppsättning utjämnade normaliteter som genereras av MeshSmoother.cs

MeshSmoother.cs är en komponent som kan användas för att automatiskt generera utjämnade normaliteter på ett nät. Den här metoden grupperar hörn i ett nät som delar samma plats i utrymmet och beräknar sedan normalerna för dessa hörn. Den här processen skapar en kopia av det underliggande nätet och bör endast användas när det behövs.

Jämn normal kontur
  1. Jämna ut normalerna som genereras via MeshSmoother.cs.
  2. Standardnormalvärden som används, observera artefakterna runt kubhörnarna.

Stenciltestning

Inbyggt konfigurerbart teststöd för stenciler för att uppnå en mängd olika effekter. Till exempel portaler:

stenciltest

Stöd för instansfärger

Stöd för instansfärger för att ge tusentals GPU-instansnät unika materialegenskaper:

instansegenskaper

Triplanar-mappning

Triplanar-mappning är en teknik för att programmatiskt strukturera ett nät. Används ofta i terräng, nät utan UV:er eller svåra att packa upp former. Den här implementeringen stöder projektion av värld eller lokalt utrymme, specifikation av blandningsutjämning och normalt kartstöd. Observera att varje textur som används kräver 3 texturprover, så använd sparsamt i prestandakritiska situationer.

triplanar

Hörnextrusion

Hörn extrusion i världsrymden. Användbart för visualisering av utskjutande avgränsningsvolymer eller övergångar i/ut-nät.

normal kartskala 1

Övriga farliga ämnen

En kryssruta för att styra albedooptimeringar. Som en optimering albedo åtgärder inaktiveras när ingen albedo textur har angetts. Detta är användbart för att styra fjärrstrukturinläsning.

Markera den här kryssrutan:

albedo-tilldelning

Per bildpunktsurklippsstrukturer, lokalt kantbaserat alias och normal kartskalning stöds.

normal kartskalning 2

Se även