Cieniator standardowy zestawu narzędzi MRTK

Standard shader examples

System cieniowania w warstwie Standardowa zestawu narzędzi MRTK korzysta z pojedynczego, elastycznego cieniowania, który może osiągnąć wizualizacje podobne do standardowego cieniowania aparatu Unity, zaimplementować zasady Fluent Design System i pozostać wydajnym na urządzeniach rzeczywistości mieszanej.

Przykładowe sceny

Przykłady materiałów cieniowania można znaleźć na scenie MaterialGallery pod elementem MRTK/Examples/Demos/StandardShader/Scenes/. Wszystkie materiały w tej scenie używają cieniowania MRTK/Standard.

Material Gallery

Scenę porównania można znaleźć, aby porównać i przetestować cieniator MRTK/Standard względem przykładu cieniowania aparatu Unity/Standard w scenie StandardMaterialComparison w obszarze MRTK/Examples/Demos/StandardShader/Scenes/.

Material Comparison

Architektura

System cieniowania MRTK/Standard jest "cieniowaniem ubera", który używa funkcji wariantu programu cieniowania aparatu Unity do automatycznego generowania optymalnego kodu cieniowania na podstawie właściwości materiału. Gdy użytkownik wybiera właściwości materiału w inspektorze materiału, ponosi tylko koszty wydajności dla funkcji, które zostały włączone.

Inspektor materiałów

Istnieje niestandardowy inspektor materiału dla cieniowania MRTK/Standard o nazwie MixedRealityStandardShaderGUI.cs. Inspektor automatycznie włącza/wyłącza funkcje cieniowania na podstawie wyboru użytkownika i doradców podczas konfigurowania stanu renderowania. Aby uzyskać więcej informacji na temat każdej funkcji , umieść kursor nad każdą właściwością w Edytorze aparatu Unity, aby uzyskać etykietkę narzędzia.

Material Inspector

Pierwsza część inspektora kontroluje stan renderowania materiału. Tryb renderowania określa, kiedy i jak będzie renderowany materiał. Celem cieniowania MRTK/Standard jest dublowanie trybów renderowania znajdujących się w cieniowania aparatu Unity/Standard. Cieniowanie MRTK/Standard obejmuje również tryb renderowania addytywnego i tryb renderowania niestandardowego na potrzeby pełnej kontroli użytkownika.

Tryb renderowania Opis
Nieprzezroczyste (Ustawienie domyślne) Nadaje się do normalnych obiektów stałych bez przezroczystych obszarów.
Wycięcie Umożliwia tworzenie przezroczystych efektów, które mają twarde krawędzie między nieprzezroczystymi i przezroczystymi obszarami. W tym trybie nie ma półprzezroczystych obszarów, tekstura jest 100% nieprzezroczysta lub niewidoczna. Jest to przydatne podczas używania przezroczystości do tworzenia kształtu materiałów, takich jak roślinność.
Fade Umożliwia całkowite wyblakłenie obiektu wartości przezroczystości, w tym wszelkie wyróżnione lub odbicia, które mogą mieć. Ten tryb jest przydatny, jeśli chcesz animować obiekt zanikający lub wychodzący. Nie nadaje się do renderowania realistycznych przezroczystych materiałów, takich jak przezroczysty plastik lub szkło, ponieważ odbicia i wyróżnienia również zostaną wyblakłe.
Przezroczyste Nadaje się do renderowania realistycznych przezroczystych materiałów, takich jak przezroczysty plastik lub szkło. W tym trybie sam materiał będzie przyjmować wartości przezroczystości (na podstawie kanału alfa tekstury i alfa koloru odcienia). Jednak odbicia i podświetlenia oświetlenia pozostaną widoczne w pełnej jasności, podobnie jak w przypadku rzeczywistych przezroczystych materiałów.
Dodawanie Włącza tryb mieszany dodawania, który sumuje poprzedni kolor pikseli z bieżącym kolorem pikseli. Jest to preferowany tryb przezroczystości, aby uniknąć problemów z sortowaniem przezroczystości.
Niestandardowy Umożliwia ręczne sterowanie każdym aspektem trybu renderowania. Tylko w przypadku użycia zaawansowanego.

Rendering Modes

Tryb cull Opis
Wyłączone Wyłącza uculling twarzy. Culling powinien być ustawiony na Wyłączone tylko wtedy, gdy wymagana jest dwie siatki boczne.
Front Umożliwia ułudę przedniej twarzy.
Wstecz (Ustawienie domyślne) Włącza pulę twarzy z tyłu. Aby zwiększyć wydajność renderowania, należy włączyć jak najwięcej kopii zapasowej twarzy.

Wydajność

Jedną z podstawowych zalet korzystania z cieniowania standardowego zestawu NARZĘDZI MRTK w cieniowania standardowej aparatu Unity jest wydajność. Funkcja CIENIowania standardowego zestawu NARZĘDZI MRTK jest rozszerzalna, aby korzystać tylko z włączonych funkcji. Jednak cieniator MRTK Standard został również napisany w celu zapewnienia porównywalnych wyników estetycznych jako cieniowania Unity Standard, ale przy znacznie niższych kosztach. Jednym z prostych sposobów porównywania wydajności cieniowania jest użycie liczby operacji, które należy wykonać na procesorze GPU. Oczywiście wielkość obliczeń może ulec wahaniu przez włączone funkcje i inne konfiguracje renderowania. Jednak ogólnie rzecz biorąc, cieniator MRTK Standard wykonuje znacznie mniej obliczeń niż cień aparatu Unity Standard.

Przykład statystyk cieniowania w warstwie Standardowa aparatu Unity

Unity Standard Shader Statistics

Przykład statystyk cieniowania standardowego zestawu narzędzi MRTK

MRTK Standard Shader Statistics

Uwaga

Te wyniki można wygenerować, wybierając i wyświetlając zasób cieniowania w inspektorze aparatu Unity, a następnie klikając przycisk Kompiluj i pokaż kod .

Oświetlenie

W standardzie MRTK/Standard zastosowano proste przybliżenie oświetlenia. Ponieważ ten cieniator nie oblicza fizycznej poprawności i oszczędzania energii, zapewnia szybkie i wydajne renderowanie. Blinn-Phong jest podstawową techniką oświetlenia, która jest połączona z oświetleniem Fresnel i oświetleniem opartym na obrazach w celu przybliżonego oświetlenia fizycznego. Cieniator obsługuje następujące techniki oświetlenia:

Światło kierunkowe

Cieniowanie będzie uwzględniać kierunek, kolor i intensywność pierwszego światła kierunkowego aparatu Unity w scenie (jeśli jest włączona). Dynamiczne światła punktowe, światła punktowe ani inne światło aparatu Unity nie będą brane pod uwagę w oświetleniu w czasie rzeczywistym.

Spherical harmonics

Cieniowania będą używać sond światła do przybliżonych świateł w scenie przy użyciu Spherical Harmonics, jeśli jest włączona. Obliczenia harmoniczne sferyczne są wykonywane na wierzchołku w celu zmniejszenia kosztów obliczeń.

Mapowanie światła

W przypadku oświetlenia statycznego cieniowanie będzie uwzględniać mapę światła utworzoną przez system Lightmapping aparatu Unity. Wystarczy oznaczyć moduł renderowania jako statyczny (lub statyczny mapa światła), aby używać map świetlnych.

Umieść wskaźnik myszy

Światło zbliżeniowe

Obsługa uproszczonego potoku renderowania skryptowego

Zestaw NARZĘDZI MRTK zawiera ścieżkę uaktualnienia umożliwiającą deweloperom korzystanie z uproszczonego potoku renderowania z możliwością skryptów aparatu Unity (LWRP) przy użyciu cieniowania zestawu NARZĘDZI MRTK. Przetestowano w pakiecie Unity 2019.1.1f1 i Lightweight RP 5.7.2. lub instrukcje dotyczące rozpoczynania pracy z systemem LWRP, zobacz tę stronę.

Aby przeprowadzić uaktualnienie zestawu narzędzi MRTK, wybierz pozycję: Mixed Reality Toolkit —> Utilities — Upgrade MRTK Standard Shader for Lightweight Render Pipeline (Zestaw narzędzi — narzędzia —> uaktualnianie cieniowania standardowego zestawu narzędzi MRTK dla uproszczonego potoku renderowania)

lwrp upgrade

Po uaktualnieniu cieniator MRTK/Standard zostanie zmieniony, a wszelkie materiały magenta (błąd cieniowania) powinny zostać naprawione. Aby sprawdzić, czy uaktualnienie zostało pomyślnie wykonane, sprawdź konsolę: Uaktualnione zasoby/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader do użycia z uproszczonym potokiem renderowania.

Obsługa interfejsu UGUI

Standardowy system cieniowania MRTK współpracuje z wbudowanym systemem interfejsu użytkownika aparatu Unity. W przypadku składników interfejsu użytkownika aparatu Unity macierz unity_ObjectToWorld nie jest macierzą przekształcania lokalnego, na której znajduje się składnik Graficzny, ale nadrzędna kanwa. Wiele efektów cieniowania MRTK/Standard wymaga, aby skala obiektów jest znana. Aby rozwiązać ten problem, ScaleMeshEffect.cs program będzie przechowywać informacje skalowania w atrybuty kanału UV podczas budowy siatki interfejsu użytkownika.

Pamiętaj, że w przypadku korzystania ze składnika Obrazu aparatu Unity zaleca się określenie wartości "Brak (Sprite)" dla obrazu źródłowego, aby uniemożliwić interfejsowi użytkownika aparatu Unity generowanie dodatkowych wierzchołków.

Kanwa w ramach zestawu narzędzi MRTK wyświetli monit o dodanie elementu ScaleMeshEffect.cs , gdy jest to wymagane:

scale mesh effect

Łączenie tekstur

Aby poprawić równoważność za pomocą cieniowania standardowego aparatu Unity na metaliczny piksel, gładkość, emisisycję i wartości okluzji, można kontrolować za pośrednictwem pakowania kanału. Na przykład:

channel map example

W przypadku korzystania z pakowania kanału trzeba tylko próbkować i ładować jedną teksturę do pamięci zamiast czterech oddzielnych. Podczas pisania map tekstur w programie, takich jak Substancja lub Photoshop, można je ręcznie spakować w następujący sposób:

Kanał Właściwość
Red (Czerwony) Metalowe
Green (Zielony) Okluzji
Blue (Niebieski) Emisja (skala szarości)
Wersja alfa Gładkość

Możesz też użyć narzędzia łączenia tekstur MRTK. Aby otworzyć narzędzie, wybierz pozycję: Mixed Reality Toolkit —> Utilities —> Texture Combiner, który otworzy poniższe okno:

texture combiner example

To okno można wypełniać automatycznie, wybierając cieniowanie standardowe aparatu Unity i klikając pozycję "Autopopulate from Standard Material" (Autopopulate from Standard Material). Możesz też ręcznie określić teksturę (lub stałą wartość) na czerwony, zielony, niebieski lub kanał alfa. Kombinacja tekstury jest przyspieszona przez procesor GPU i nie wymaga, aby tekstura wejściowa była dostępna dla procesora CPU.

Dodatkowa dokumentacja funkcji

Poniżej znajdują się dodatkowe szczegóły dotyczące kilku szczegółów funkcji dostępnych w cieniatorze MRTK/Standard.

Wycinek pierwotny

primitive clipping

Mesh konspektu

Wiele technik konspektu siatki odbywa się przy użyciu techniki przetwarzania końcowego . Przetwarzanie końcowe zapewnia doskonałą jakość konspektu, ale może być zbyt kosztowne na wielu urządzeniach Mixed Reality. Scenę, która pokazuje użycie konspektów siatki w scenie OutlineExamples w obszarze MRTK/Examples/Demos/StandardShader/Scenes/.

Mesh Outline

MeshOutline.cs i MeshOutlineHierarchy.cs może służyć do renderowania konturu wokół modułu renderowania siatki. Włączenie tego składnika powoduje wprowadzenie dodatkowego przejścia renderowania obiektu, który jest opisany, ale jest przeznaczony do uruchamiania wydajnie na urządzeniach przenośnych Mixed Reality i nie wykorzystuje żadnych procesów poświadczeń. Ograniczenia tego efektu obejmują, że nie działa dobrze na obiektach, które nie są szczelne (lub wymagane do dwóch stron), a problemy z sortowaniem głębokości mogą wystąpić w nakładających się obiektach.

Zachowania konspektu są przeznaczone do użycia w połączeniu z cieniatorem MRTK/Standard. Materiały konspektu są zwykle solidnym nieokreślonym kolorem, ale można je skonfigurować tak, aby osiągnąć szeroką gamę efektów. Domyślna konfiguracja materiału konspektu jest następująca:

Mesh Outline Material
  1. Zapis głębokości — należy wyłączyć materiały konspektu, aby upewnić się, że konspekt nie uniemożliwia renderowania innych obiektów.
  2. Ekstruzja wierzchołka — należy włączyć renderowanie konspektu.
  3. Użyj gładkich normalnych — to ustawienie jest opcjonalne dla niektórych siatk. Wytłaczanie występuje poprzez przeniesienie wierzchołka wzdłuż wierzchołka normalnego, na niektórych siatkach ekstrudujących wzdłuż domyślnych normalnych spowoduje przerwanie w konspekcie. Aby rozwiązać te problemy, możesz zaznaczyć to pole wyboru, aby użyć innego zestawu wygładzonych normalnych, które są generowane przez MeshSmoother.cs

MeshSmoother.cs to składnik, który może służyć do automatycznego generowania gładkich normalnych na siatkę. Ta metoda grupuje wierzchołki w siatkę, która współdzieli tę samą lokalizację w przestrzeni, a następnie średnio normalne wierzchołki tych wierzchołków. Ten proces tworzy kopię bazowej siatki i powinien być używany tylko wtedy, gdy jest to wymagane.

Smooth Normals Outline
  1. Gładka normalność generowana za pomocą metody MeshSmoother.cs.
  2. Domyślne wartości normalne, zwróć uwagę na artefakty wokół narożników modułu.

Testowanie wzornika

Wbudowana obsługa konfigurowalnego testu wzornika w celu osiągnięcia szerokiej gamy efektów. Takie jak portale:

stencil test

Obsługa kolorów wystąpień

Obsługa kolorów wystąpień w celu nadania tysiącom wystąpień procesora GPU unikatowych właściwości materiału:

instanced properties

Mapowanie trylanaru

Mapowanie triplanar jest techniką programową teksturowania siatki. Często używane w terenie, siatki bez telewizorów użytkownika lub trudne do odpakowania kształtów. Ta implementacja obsługuje projekcję przestrzeni światowej lub lokalnej, specyfikację bezproblemowości łączenia i obsługę normalnej mapy. Należy pamiętać, że każda używana tekstura wymaga 3 próbek tekstur, dlatego należy używać oszczędnie w sytuacjach krytycznych dla wydajności.

triplanar

Ekstruzja wierzchołka

Ekstruzja wierzchołków w przestrzeni światowej. Przydatne do wizualizacji ekstrudowanych woluminów ograniczenia lub przejść w/wy siatki.

normal map scale 1

Różne

Pole wyboru do sterowania optymalizacjami albedo. Jako operacje optymalizacji albedo są wyłączone, gdy nie określono tekstury albedo. Jest to przydatne do kontrolowania zdalnego ładowania tekstury.

Wystarczy zaznaczyć to pole wyboru:

albedo assignment

Obsługiwane są tekstury przycinania pikseli, lokalne krawędzie oparte na aliasie i normalne skalowanie map.

normal map scale 2

Zobacz też