MRTK2 – standardní shader

Příklady standardního shaderu

Stínovací systém MRTK2 Standard využívá jeden flexibilní shader, který dokáže dosáhnout vizuálů podobných standardnímu shaderu Unity, implementovat Fluent Design System principy a zachovat si výkon na zařízeních s hybridní realitou.

Ukázkové scény

Příklady materiálů shaderu najdete ve scéně MaterialGallery v části MRTK/Examples/Demos/StandardShader/Scenes/. Všechny materiály v této scéně používají shader MRTK/Standard.

Galerie materiálů

Ve scéně StandardMaterialComparison můžete najít scénu porovnání a otestovat shader MRTK/Standard s příkladem shaderu Unity/Standard ve scéně StandardMaterialComparison v části MRTK/Examples/Demos/StandardShader/Scenes/.

Porovnání materiálů

Architektura

Stínovací systém MRTK/Standard je "uber shader", který používá funkci variant programu Shader Unity k automatickému generování optimálního kódu shaderu na základě vlastností materiálu. Když uživatel vybere vlastnosti materiálu v inspektoru materiálu, účtují se mu náklady na výkon pouze u funkcí, které povolil.

Inspektor materiálu

Pro shader MRTK/Standard existuje vlastní kontrola materiálu s názvem MixedRealityStandardShaderGUI.cs. Inspektor automaticky povolí nebo zakáže funkce shaderu na základě výběru uživatele a pomocníků při nastavení stavu vykreslování. Pokud chcete získat další informace o jednotlivých funkcích , najeďte myší na každou vlastnost v Editoru Unity, kde najdete popis.

Kontrola materiálu

První část inspektoru řídí stav vykreslení materiálu. Režim vykreslování určuje, kdy a jak se bude materiál vykreslovat. Cílem shaderu MRTK/Standard je zrcadlit režimy vykreslování, které se nacházejí v shaderu Unity/Standard. Shader MRTK/Standard obsahuje také režim doplňkového vykreslování a režim vlastního vykreslování pro úplné uživatelské řízení.

Režim vykreslování Popis
Neprůhledné (Výchozí) Vhodné pro normální pevné objekty bez průhledných oblastí.
Výřez Umožňuje vytvářet průhledné efekty, které mají pevné hrany mezi neprůhlednou a průhlednou oblastí. V tomto režimu nejsou žádné poloprůhledné oblasti, textura je buď 100% neprůhledná, nebo neviditelná. To je užitečné při použití průhlednosti k vytvoření tvaru materiálů, jako je vegetace.
Fade Umožňuje, aby hodnoty průhlednosti zcela zeslábly objekt, včetně případných zrcadlových zvýraznění nebo odrazů. Tento režim je užitečný, pokud chcete animovat objekt, který se vysmívá nebo zmizí. Není vhodný pro vykreslení realistických průhledných materiálů, jako je průhledný plast nebo sklo, protože odrazy a zvýraznění budou také vybledlé.
Průhlednost Vhodné pro vykreslení realistických průhledných materiálů, jako je průhledný plast nebo sklo. V tomto režimu bude samotný materiál nabírat hodnoty průhlednosti (na základě alfa kanálu textury a alfa barvy odstínu). Odrazy a zvýraznění osvětlení však zůstanou viditelné při plné srozumitelnosti, jako je tomu u skutečných průhledných materiálů.
Aditivní Povolí režim sčítání, který sečte předchozí barvu pixelů s aktuální barvou pixelů. Toto je upřednostňovaný režim průhlednosti, aby se zabránilo problémům s řazením průhlednosti.
Vlastní Umožňuje ruční ovládání všech aspektů režimu vykreslování. Pouze pro pokročilé použití.

Režimy vykreslování

Režim cull Popis
Vypnout Zakáže uřezání tváře. Culling by měl být nastaven na Vypnuto pouze v případě, že je vyžadována oboustranná síť.
Front Umožňuje uřezání přední tváře.
Zpět (Výchozí) Umožňuje uřezání zadních tváří. Pokud chcete zlepšit výkon vykreslování, mělo by být co nejčastěji povolené uřezávače zadních tváří.

Výkon

Jednou z hlavních výhod použití standardního shaderu MRTK oproti standardnímu shaderu Unity je výkon. Standardní shader MRTK je rozšiřitelný tak, aby využíval pouze povolené funkce. Shader MRTK Standard byl však také napsán tak, aby poskytoval srovnatelné estetické výsledky jako shader Unity Standard, ale s mnohem nižšími náklady. Jedním jednoduchým způsobem, jak porovnat výkon shaderu, je počet operací, které je potřeba na GPU provést. Velikost výpočtů samozřejmě může kolísat podle povolených funkcí a dalších konfigurací vykreslování. Obecně ale platí, že standardní shader MRTK provádí výrazně méně výpočtů než shader Unity Standard.

Příklad statistiky standardního shaderu Unity

Statistika standardního shaderu Unity

Příklad statistiky standardního shaderu MRTK

Statistika standardního shaderu MRTK

Poznámka

Tyto výsledky můžete vygenerovat tak, že vyberete a zobrazíte asset shaderu v inspektoru Unity a potom kliknete na tlačítko Zkompilovat a zobrazit kód .

Osvětlení

MRTK/Standard používá pro osvětlení jednoduchou aproximaci. Vzhledem k tomu, že tento shader nepočítá fyzickou správnost a úsporu energie, vykresluje rychle a efektivně. Blinn-Phong je primární technika osvětlení, která je kombinována s Fresnelem a osvětlením založeným na obrazech, aby se odhadlo fyzické osvětlení. Shader podporuje následující techniky osvětlení:

Směrové světlo

Shader bude respektovat směr, barvu a intenzitu prvního směrového světla Unity ve scéně (pokud je povoleno). Dynamická bodová světla, bodová světla nebo jakékoli jiné světlo Unity nebudou při osvětlení v reálném čase brány v úvahu.

Sférické harmonické

Shader bude používat světelné sondy k přibližnému odhadu světel ve scéně pomocí sférické harmonie, pokud je povolená. Za účelem snížení nákladů na výpočet se provádějí výpočty sférické harmonie pro jednotlivé vrcholy.

Lightmapping

U statického osvětlení bude shader respektovat lightmapy vytvořené systémem Lightmapping unity. Pokud chcete použít lightmapy, jednoduše označte vykreslovací modul jako statický (nebo lightmap statický).

Kontrolka najetí myší

Bezkontaktní světlo

Podpora kanálu zjednodušeného skriptovatelného vykreslování

Sada MRTK obsahuje cestu upgradu, která vývojářům umožňuje využívat kanál LWRP (Lightweight Scriptable Render Pipeline) Unity s shadery MRTK. Testováno v balíčku Unity 2019.1.1f1 a Lightweight RP 5.7.2. Pokyny k zahájení práce s LWRP najdete na této stránce.

Pokud chcete provést upgrade MRTK, vyberte: Mixed Reality Toolkit -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipeline

Upgrade lwrp

Po upgradu se změní shader MRTK/Standard a všechny purpurové materiály (chyby shaderu) by měly být opraveny. Chcete-li ověřit, že upgrade proběhl úspěšně, zkontrolujte konzolu pro: Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader pro použití s kanálem lightweight render.

Podpora UGUI

Stínovací systém MRTK Standard funguje s integrovaným systémem uživatelského rozhraní Unity. Na komponentách uživatelského rozhraní Unity není matice unity_ObjectToWorld transformací místní transformace, na které se nachází komponenta Graphic, ale její nadřazené plátno. Mnoho efektů shaderu MRTK nebo Standard vyžaduje, aby bylo známo škálování objektů. Za účelem vyřešení tohoto problému ScaleMeshEffect.cs bude nástroj během vytváření sítě uživatelského rozhraní ukládat informace o škálování do atributů UV kanálu.

Poznámka: Pokud používáte komponentu Image Unity, doporučujeme pro zdrojovou image zadat "None (Sprite)", aby se zabránilo generování dalších vrcholů v uživatelském rozhraní Unity.

Plátno v mrtk zobrazí výzvu k přidání, ScaleMeshEffect.cs pokud je požadováno:

efekt škálovací sítě

Kombinátor textury

Aby se zlepšila parita se standardním shaderem Unity na pixel metalické, je možné ovládat hodnoty hladkosti, vyzařování a okluze prostřednictvím balení kanálů. Příklad:

Příklad mapy kanálu

Při použití balení kanálů stačí vzorkovat a načíst do paměti pouze jednu texturu místo čtyř samostatných textur. Když píšete texturové mapy v programu, jako je Substance nebo Photoshop, můžete je ručně zabalit takto:

Kanál Vlastnost
Red Kovové
Green Okluze
Blue Emise (stupně šedé)
Alfa Hladkost

Nebo můžete použít nástroj MRTK Texture Combiner. Nástroj otevřete tak, že vyberete: Mixed Reality Toolkit -> Utilities - Texture Combiner(Nástroj )> a otevře se následující okno:

Příklad kombinátoru textur

Toto okno lze automaticky vyplnit tak, že vyberete shader Unity Standard a kliknete na "Automaticky vyplnit ze standardního materiálu". Nebo můžete ručně zadat texturu (nebo konstantní hodnotu) pro červený, zelený, modrý nebo alfa kanál. Kombinace textur je akcelerovaná gpu a nevyžaduje, aby vstupní textura byla přístupná procesorem.

Další dokumentace k funkcím

Níže najdete další podrobnosti o několika funkcích, které jsou k dispozici u shaderu MRTK/Standard.

Primitivní výřez

primitivní výřez

Obrysy sítě

Mnoho technik osnovy sítě se provádí pomocí techniky následného zpracování . Následné zpracování poskytuje skvělé přehledy kvality, ale na mnoha Mixed Reality zařízeních může být neúnosně nákladné. Scénu, která ukazuje použití obrysů sítě, najdete ve scéně OutlineExamples v části MRTK/Examples/Demos/StandardShader/Scenes/.

Obrys sítě

MeshOutline.cs a MeshOutlineHierarchy.cs lze použít k vykreslení obrysu kolem vykreslovacího objektu sítě. Povolení této komponenty zavádí další průchod vykreslení objektu, který je nastíněný, ale je navržený tak, aby běžel výkonně na mobilních Mixed Reality zařízeních a nevyužívá žádné následné procesy. Omezení tohoto efektu zahrnují, že nefunguje dobře u objektů, které nejsou vodotěsné (nebo musí být oboustranné), a u překrývajících se objektů může dojít k problémům s hloubkovým řazením.

Chování osnovy je navržené pro použití ve spojení s shaderem MRTK/Standard. Materiály osnovy jsou obvykle plné neosvětlované barvy, ale lze je nakonfigurovat tak, aby se dosáhlo široké škály efektů. Výchozí konfigurace materiálu osnovy je následující:

Materiál obrysu sítě
  1. Hloubkový zápis – u materiálů osnovy by měl být zakázán, aby osnova nebránil vykreslování jiných objektů.
  2. Vertex Extrusion – aby bylo možné vykreslit osnovu, je potřeba povolit.
  3. Použití funkce Smooth Normals – toto nastavení je pro některé sítě volitelné. K extruzi dochází přesunutím vrcholu podél vrcholu normálního vrcholu, u některých sítí vysunutí podél výchozích normálů způsobí diskontinuity v osnově. Pokud chcete tyto diskontinuity opravit, můžete zaškrtnutím tohoto políčka použít jinou sadu vyhlazovaných normálních hodnot, které jsou generovány MeshSmoother.cs

MeshSmoother.cs je komponenta, kterou lze použít k automatickému generování vyhlazovaných normálů v síti. Tato metoda seskupí vrcholy v síti, které sdílejí stejné umístění v prostoru, a pak průměruje normální hodnoty těchto vrcholů. Tento proces vytvoří kopii podkladové sítě a měl by se použít pouze v případě potřeby.

Vyhladit normální obrys
  1. Vyhlazení normálních generovaných prostřednictvím MeshSmoother.cs.
  2. Výchozí použité normální hodnoty, všimněte si artefaktů kolem rohů datové krychle.

Testování vzorníku

Integrovaná konfigurovatelná podpora testů vzorníků pro dosažení široké škály efektů. Například portály:

Test vzorníku

Podpora barev instancí

Podpora barev instancí, která poskytuje tisícům sítí s instancemi GPU jedinečné vlastnosti materiálu:

instanced properties

Mapování triplanar

Triplanar mapping is a technique to programově texturovat síť. Často se používá v terénu, síťoviny bez UV nebo obtížně rozbalitelné obrazce. Tato implementace podporuje projekci světa nebo místního prostoru, specifikaci plynulosti prolnutí a normální podporu map. Mějte na paměti, že každá použitá textura vyžaduje 3 vzorky textury, takže v kritických situacích výkonu používejte střídmě.

triplanar

Vysunutí vrcholu

Vysunutí vrcholů ve světovém prostoru. Užitečné pro vizualizaci vysunutí ohraničujícího svazku nebo přechodů dovnitř/ven ok.

normální měřítko mapy 1

Různé

Zaškrtávací políčko pro řízení optimalizací albeda. Při optimalizaci jsou operace albedo zakázány, pokud není zadána žádná textura albeda. To je užitečné pro řízení vzdáleného načítání textury.

Jednoduše zaškrtněte toto políčko:

přiřazení albedo

Jsou podporovány textury výřezu na pixely, anti aliasování založené na místních hranách a normální měřítko mapy.

normální měřítko mapy 2

Viz také