MRTK standard shader

Standardskärmningsexempel

MRTK Standard-skuggningssystemet använder en enda, flexibel skuggare som kan få visuella objekt som liknar Unitys Standard Shader, implementera Fluent Design-system-principer och fortsätta prestera på enheter med mixad verklighet.

Exempelscener

Du hittar skuggningsmaterialexempel i MaterialGallery-scenen under MRTK/Examples/Demos/StandardShader/Scenes/ . Alla material i den här scenen använder MRTK/Standard-skuggaren.

Materialgalleri

Du hittar en jämförelsescen för att jämföra och testa MRTK/Standard-skuggaren mot unity/standard-skuggar-exemplet i scenen StandardMaterialComparison under MRTK/Examples/Demos/StandardShader/Scenes/ .

Materialjämförelse

Arkitektur

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

Materialkontroll

Det finns en anpassad materialkontroll för MRTK/Standard-skuggaren som heter MixedRealityStandardShaderGUI.cs . Kontrollanten aktiverar/inaktiverar automatiskt skuggarfunktioner baserat på användarens val och aidrar vid inställning av renderingstillstånd. Om du vill ha mer information om varje funktion hovrar du över varje egenskap i Unity-redigeraren för en knappbeskrivning.

Materialkontroll

Den första delen av kontrollen styr materialets renderingstillstånd. Renderingsläge avgör när och hur ett material återges. Syftet med MRTK/Standard-skuggaren är att spegla renderingslägena som finns i Unity/Standard-skuggaren. MRTK/Standard-skuggaren innehåller även ett additivt renderingsläge och anpassat renderingsläge för fullständig användarkontroll.

Renderingsläge Description
Ogenomskinlig (Standard) Lämplig för normala solida objekt utan transparenta områden.
Utklipp Gör det möjligt att skapa transparenta effekter som har hårda kanter mellan de täckande och transparenta områdena. I det här läget finns det inga halvtransparenta områden, ytan är antingen 100 % täckande eller osynlig. Detta är användbart när du använder transparens för att skapa formen på material, till exempel eta.
Blekna Gör att transparensvärdena helt tonar ut ett objekt, inklusive eventuella spekulativa markeringar eller reflektioner. Det här läget är användbart om du vill animera ett objekt som tonar in eller ut. Det lämpar sig inte för att återge realistiska transparenta material som genomskinligt glass eller glass eftersom reflektionerna och markeringarna också kommer att tonas ut.
Genomskinlig Lämplig för att återge realistiska transparenta material som genomskinligt metall eller glass. I det här läget tar själva materialet på sig transparensvärden (baserat på strukturens alfakanal och färgens alfafärg). Reflektioner och belysningshöjdpunkter kommer dock att vara synliga med fullständig tydlighet, vilket är fallet med verkliga transparenta material.
Additiv Aktiverar ett additivt blandningsläge, som summerar den tidigare pixelfärgen med den aktuella pixelfärgen. Detta är det föredragna transparensläget för att undvika transparenssorteringsproblem.
Anpassad Gör att alla aspekter av renderingsläget kan styras manuellt. Endast för avancerad användning.

Renderingslägen

Mode (mode) Description
Av Inaktiverar ansiktsning. Det ska bara vara av när ett nät med två sidor krävs.
Front Aktiverar front face-smaskning.
Tillbaka (Standard) Aktiverar ansiktsmaskering. Ansiktsförsämring ska aktiveras så ofta som möjligt för att förbättra renderingsprestanda.

Prestanda

En av de främsta fördelarna med att använda MRTK Standard-skuggaren jämfört med Unity-standardskärmaren är prestanda. MRTK Standard Shader är utökningsbar för att endast använda de aktiverade funktionerna. MRTK Standard-skuggaren har dock också skrivits för att leverera jämförbara estetiska resultat som Unity Standard-skuggaren, men till en mycket lägre kostnad. Ett enkelt sätt att jämföra skuggarprestanda är via antalet åtgärder som måste utföras på GPU:n. Beräkningarna kan naturligtvis variera beroende på vilka funktioner som är aktiverade och andra renderingskonfigurationer. Men i allmänhet utför MRTK Standard-skuggaren betydligt mindre beräkning än Unity Standard-skuggaren.

Exempel på Unity Standard-skuggarstatistik

Unity Standard Shader-statistik

Exempel på MRTK Standard-skuggarstatistik

MRTK Standard Shader-statistik

Anteckning

Du kan generera dessa resultat genom att välja och visa en skuggartillgång i Unity-kontroll och sedan klicka på knappen Kompilera och visa kod.

Belysning

MRTK/Standard använder en enkel uppskattning för belysning. Eftersom den här skuggaren inte beräknar för fysisk korrekthet och energislag återges den snabbt och effektivt. Blinn-Phong är den primära ljustekniken som blandas med Fresnel och bildbaserad belysning till ungefärlig fysiskt baserad belysning. Skuggaren stöder följande ljustekniker:

Riktningsbelysning

Skuggaren respekterar riktningen, färgen och intensiteten för det första Unity Directional Light i scenen (om det är aktiverat). Dynamiska punktbelysning, punktbelysning eller andra Unity-lampor beaktas inte i realtidsbelysning.

Sfäriskaiker

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

Lightmapping

För statisk belysning respekterar skuggaren ljuskartor som skapats av Unitys Lightmapping-system. Markera bara renderaren som statisk (eller lightmap static) för att använda ljuskartor.

Hovringsbelysning

Närhetsbelysning

Stöd för enkel skriptbar renderingspipeline

MRTK innehåller en uppgraderingsväg där utvecklare kan använda Unitys LWRP (Lightweight Scriptable Render Pipeline) med MRTK-skuggare. Testat i Unity 2019.1.1f1- och Lightweight RP 5.7.2-paketet. eller 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 -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipeline (Uppgradera MRTK Standard Shader för Lightweight Render Pipeline)

Lwrp-uppgradering

När uppgraderingen har inträffat ändras MRTK/Standard-skuggaren och eventuellt alternatamaterial (shader-fel) ska åtgärdas. Kontrollera att uppgraderingen har utförts genom att kontrollera konsolen för: Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader for use with the Lightweight Render Pipeline (Uppgraderade 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. På Unity UI-komponenter unity_ObjectToWorld matrisen inte transformeringsmatrisen för den lokala transformeringen som komponenten Grafik finns på, utan den överordnade canvas-matrisen. Många MRTK-/Standard-skuggareffekter kräver att objektskalning är känd. För att lösa det här problemet lagrar ScaleMeshEffect.cs skalningsinformation i ATTRIBUT FÖR KANAL-kanalen vid konstruktion av UI-nät.

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

En arbetsyta i MRTK uppmanar till tillägg av ScaleMeshEffect.cs en när en krävs:

skalningsnätseffekt

Kombination av struktur

För att förbättra pariteten med Unity Standard-skuggaren per pixel-pixelsten kan du styra alla värden för jämnhet, tillåtande och ocklusion via kanalspackning. Exempel:

exempel på kanalkarta

När du använder kanalpackning behöver du bara sampla och läsa in en struktur i minnet i stället för fyra separata. När du skriver dina strukturkartor i ett program som Eta(Et) eller Enpion kan du packa dem på följande sätt:

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

Eller så kan du använda MRTK-verktyget För att kombinera struktur. Öppna verktyget genom att välja: Mixed Reality Toolkit -> Utilities -> Texture Combiner som öppnar fönstret nedan:

exempel på en strukturerad kombination

Det här fönstret kan fyllas i automatiskt genom att välja en Unity Standard-skuggare 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. Kombinationen av struktur är GPU-accelererad och kräver inte att indatastrukturen är tillgänglig för CPU.

Ytterligare funktionsdokumentation

Nedan visas extra information om en handfull funktioner som är tillgängliga med MRTK/Standard-skuggaren.

Primitiv urklippning

primitiv urklippning

Mesh-konturer

Många mesh-konturtekniker görs med hjälp av en efterbearbetningsteknik. Efterbearbetningen ger bra kvalitetskontur, men kan vara extremt dyrt på många Mixed Reality enheter. Du hittar en scen som visar användningen av mesh-konturer i konturexamples-scenen under MRTK/Examples/Demos/StandardShader/Scenes/ .

Mesh Outline

MeshOutline.cs och MeshOutlineHierarchy.cs kan användas för att rendera en kontur runt en nätåtergivning. Aktivering av den här komponenten introducerar ytterligare en renderingspass av objektet som beskrivs, men är utformat för att köras på mobila Mixed Reality-enheter och använder inte några efterprocesser. Begränsningar av den här effekten är att den inte fungerar bra på objekt som inte är vattentäta (eller måste vara tvåsidig) och djupsorteringsproblem kan uppstå på överlappande objekt.

Konturbeteendena är utformade för att användas tillsammans med MRTK/Standard-skuggaren. Konturmaterial är vanligtvis en solid olyssnad färg, men kan konfigureras för att uppnå en mängd olika effekter. Standardkonfigurationen för ett konturmaterial är följande:

Mesh Outline Material
  1. Djupskrivning – bör inaktiveras för konturmaterial för att se till att konturen inte hindrar andra objekt från att återges.
  2. Hörnextrudering – måste vara aktiverat för att rendera konturen.
  3. Använd Smooth Normals – den här inställningen är valfri för vissa nät. Extrudering sker genom att flytta ett hörn längs ett hörn normalt, på vissa nät som extruderas längs standard normalvärdena orsakar känslighet i konturen. Du kan åtgärda dessa avbrott genom att markera den här kryssrutan om du vill 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 normaliseringar i ett nät. Den här metoden grupperar hörn i ett nät som delar samma plats i utrymmet och sedan genomsnittsvärdet 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.

Smooth Normals Outline
  1. Jämna normaler som genereras via MeshSmoother.cs .
  2. Observera artefakterna runt kubhörnen som används som standard.

Stenciltestning

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

stenciltest

Stöd för instansfärger

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

instansegenskaper

Triplanar-mappning

Triplanarmappning är en teknik för att programmatiskt strukturera ett nät. Används ofta i nät utan UV:er eller svåra att packa upp former. Den här implementeringen stöder projektion av världsrymd eller lokalt utrymme, specifikationen av jämnhet och normalt kartstöd. Observera att varje struktur som används kräver 3 strukturprover, så använd sparsamt i prestandakritiska situationer.

triplanar

Brytpunktsuttryck

Hörnextrudering i rymden. Användbart för att visualisera utpressade avgränsade volymer eller övergångar i/ut-nät.

normal kartskala 1

Övriga farliga ämnen

En kryssruta för att styra albedo-optimeringar. Som optimering av albedo-åtgärder inaktiveras när ingen albedo-struktur har angetts. Detta är användbart för att styra fjärrtexturläsning.

Markera bara den här kryssrutan:

albedo assignment

Strukturer per pixelurklippning, lokal kantbaserad antialias och normal kartskalning stöds.

normal kartskala 2

Se även