Cieniowanie standardowe zestawu narzędzi MRTK

Przykłady cieniowania standardowego

System cieniowania MRTK Standard wykorzystuje jeden, elastyczny program do cieniowania, który umożliwia uzyskanie wizualizacji podobnych do standardowego cieniowania aparatu Unity, implementowanie zasad Fluent Design System i zapewnianie działania na urządzeniach rzeczywistości mieszanej.

Przykładowe sceny

Przykłady materiału cieniującego można znaleźć w scenie MaterialGallery w obszarze MRTK/Examples/Demos/StandardShader/Scenes/ . Wszystkie materiały w tej scenie są używające cieniowania MRTK/Standard.

Galeria materiałów

Możesz znaleźć scenę porównania, aby porównać i przetestować cieniowanie MRTK/Standard względem przykładu modułu cieniującego Aparatu Unity/Standard w scenie StandardMaterialComparison w obszarze MRTK/Examples/Demos/StandardShader/Scenes/ .

Porównanie materiałów

Architektura

System cieniowania MRTK/Standard to "uber shader", 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 wybierze właściwości materiału w inspektorze materiału, poniesie koszt wydajności tylko dla włączonych funkcji.

Inspektor materiałów

Istnieje niestandardowy inspektor materiału dla modułu cieniującego MRTK/Standard o nazwie MixedRealityStandardShaderGUI.cs . Inspektor automatycznie włącza/wyłącza funkcje cieniowania w oparciu o wybór użytkownika i wpływ 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 modułu cieniującego MRTK/Standard jest dublowanie trybów renderowania w cieniowania Unity/Standard. Moduł cieniowania MRTK/Standard obejmuje również tryb renderowania addytywnego i tryb renderowania niestandardowego w celu 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 w 100% nieprzezroczysta lub niewidoczna. Jest to przydatne w przypadku używania przezroczystości do tworzenia kształtu materiałów, takich jak nagie.
Fade Umożliwia pełne zanikanie wartości przezroczystości obiektu, w tym wszelkich jego wyróżnień lub odbicia. Ten tryb jest przydatny, jeśli chcesz animować zanikanie lub zanikanie obiektu. Nie nadaje się do renderowania realistycznych przezroczystych materiałów, takich jak przezroczysta osłona lub szyba, ponieważ odbicia i wyróżnienia również zostaną wygasnąć.
Przezroczyste Nadaje się do renderowania realistycznych przezroczystych materiałów, takich jak przezroczysta pokrywa lub szyba. W tym trybie sam materiał będzie przyjmować wartości przezroczystości (na podstawie kanału alfa tekstury i alfa kolorowania odcienia). Jednak odbicia i wyróżnienia oświetlenia pozostaną widoczne w pełnej przejrzystości, tak jak w przypadku rzeczywistych przezroczystych materiałów.
Dodawanie Włącza tryb mieszania dodatku, który sumuje poprzedni kolor pikseli przy użyciu bieżącego koloru pikseli. Jest to preferowany tryb przezroczystości, aby uniknąć problemów z sortowaniem przezroczystości.
Niestandardowy Umożliwia ręczne kontrolowanie każdego aspektu trybu renderowania. Dotyczy tylko użycia zaawansowanego.

Tryby renderowania

Tryb cull Opis
Wyłączone Wyłącza culling twarzy. Wartość wyliczeniową należy ustawić na wartość Wyłączone tylko wtedy, gdy wymagana jest siatka dwusekulacyjna.
Front Włącza cykanie twarzy przednie.
Wstecz (Ustawienie domyślne) Włącza culling twarzy z powrotem. Aby poprawić wydajność renderowania, należy jak najczęściej włączać przecięcie twarzy.

Wydajność

Jedną z głównych zalet używania cieniowania MRTK Standard w standardowych cieniowania aparatu Unity jest wydajność. Program mrTK Standard Shader można rozszerzać, aby korzystać tylko z włączonych funkcji. Jednak moduł cieniowania MRTK Standard został również napisany w celu zapewnienia porównywalnego wyniku wyglądowego jako cieniowania Aparatu Unity Standard, ale ze znacznie niższym kosztem. Prostym sposobem porównania wydajności cieniowania jest liczba operacji, które należy wykonać na procesorze GPU. Oczywiście wielkość obliczeń może się zmieniać według włączonych funkcji i innych konfiguracji renderowania. Jednak ogólnie rzecz biorąc, moduł cieniowania MRTK Standard wykonuje znacznie mniej obliczeń niż moduł cieniujący Unity Standard.

Przykład statystyk modułu cieniującego Unity Standard

Statystyka cieniowania standardowego aparatu Unity

Przykład statystyk modułu cieniującego MRTK Standard

Statystyki cieniowania standardowego zestawu narzędzi MRTK

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

Zestaw narzędzi MRTK/Standard używa prostego przybliżenia oświetlenia. Ponieważ ten moduł cieniowania nie oblicza poprawności fizycznej i energii, renderuje szybko i wydajnie. Blinn-Phong to podstawowa technika oświetlenia, która jest wtopiena w oświetlenie Fresnel i oparte na obrazach w celu przybliżonego fizycznego oświetlenia. Cieniowanie obsługuje następujące techniki oświetlenia:

Światło kierunkowe

Cieniowanie będzie przestrzegać kierunku, koloru i natężenia pierwszego światła kierunkowego aparatu Unity w scenie (jeśli jest włączone). Dynamiczne światła punktowe, światła punktowe lub inne światło aparatu Unity nie będą traktowane jako oświetlenie w czasie rzeczywistym.

Ortoki sferyczne

Cieniowanie będzie używać sond światła w celu przybliżenie światła w scenie przy użyciu funkcji Rozmysłowy, jeśli ta opcja jest włączona. Obliczenia sferyczne są wykonywane na wierzchołek, aby zmniejszyć koszt obliczeń.

Mapowanie światła

W przypadku oświetlenia statycznego moduł cieniowania będzie przestrzegać map światła budowanych przez system Lightmapping aparatuUnity . Aby użyć map jasnych, wystarczy oznaczyć program renderer jako statyczny (lub statyczny w mapie światła).

Zatrzymaj wskaźnik myszy na światłach

Światło zbliżeniowe

Obsługa uproszczonego potoku renderowania z obsługą skryptów

Zestaw mrTK zawiera ścieżkę uaktualnienia, która umożliwia deweloperom korzystanie z lekkiego potoku renderowania skryptowego aparatu Unity (ICHRP) z cieniowania zestawu mrTK. Przetestowane w pakiecie Unity 2019.1.1f1 i Lightweight RP 5.7.2. lub instrukcje dotyczące rozpoczynania pracy z programem THERP, zobacz tę stronę.

Aby wykonać uaktualnienie zestawu narzędzi MRTK, wybierz polecenie: Mixed Reality Toolkit -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipeline (Uaktualnij standardowy moduł cieniowania zestawu narzędzi MRTK dla uproszczonego potoku renderowania)

upgrade upgrade

Po uaktualnieniu moduł cieniowania MRTK/Standard zostanie zmieniony i wszelkie materiały z kolorem magenta (błąd cieniowania) powinny zostać naprawione. Aby sprawdzić, czy uaktualnienie zostało pomyślnie ukończone, sprawdź w konsoli, czy w konsoli są: Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader do użycia z potokiem uproszczonego renderowania.

Obsługa ugUI

System cieniowania MRTK Standard współpracuje z wbudowanym systemem interfejsu użytkownika aparatuUnity . W składnikach interfejsu użytkownika aparatu Unity macierz unity_ObjectToWorld nie jest macierzą przekształceń lokalnej transformacji, w której znajduje się składnik Graphic, ale macierz nadrzędnej kanwy. Wiele efektów cieniowania MRTK/Standard wymaga, aby skala obiektu jest znana. Aby rozwiązać ten problem, podczas tworzenia siatki interfejsu użytkownika element będzie przechowywać informacje o skalowaniu w atrybutach ScaleMeshEffect.cs kanału LAMP.

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

Kanwa w obrębie mrTK wyświetli monit o dodanie ciągu , ScaleMeshEffect.cs gdy jest to wymagane:

efekt siatki skalowania

Łączenie tekstur

Aby poprawić parzystość za pomocą cieniowania standardowego aparatu Unity na piksel, właściwości smoothness, empative i occlusion można kontrolować za pośrednictwem pakowania kanałów. Na przykład:

przykład mapy kanału

W przypadku pakowania kanałów wystarczy próbkować i załadować jedną teksturę do pamięci zamiast czterech oddzielnych. Podczas pisania map tekstury w programie, np. Na przykład Waci, można je ręcznie spakować w następujący sposób:

Kanał Właściwość
Red (Czerwony) Metalowe
Green (Zielony) Okluzji
Blue (Niebieski) Nie tylko (w skali szarej)
Wersja alfa Gładkość

Możesz też użyć narzędzia łączenia tekstur zestawu narzędzi MRTK. Aby otworzyć narzędzie, wybierz pozycję: Mixed Reality Toolkit -> Utilities -> Texture Combiner ( Narzędzia do łączenia tekstury> co spowoduje otwarcie poniższego okna:

przykład łączenia tekstur

To okno można wypełnić automatycznie, wybierając moduł cieniujący Unity Standard i klikając pozycję "Autopopulate from Standard Material" (Automatycznie wypełniaj z materiału standardowego). Można też ręcznie określić teksturę (lub wartość stałą) dla kanału czerwonego, zielonego, niebieskiego lub alfa. Kombinacja tekstury jest przyspieszona przez procesor GPU i nie wymaga, aby tekstura wejściowa była dostępna dla procesora CPU.

Dokumentacja dodatkowych funkcji

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

Przycinanie pierwotne

przycinanie pierwotne

Kontury siatki

Wiele technik konspektu siatki odbywa się przy użyciu techniki przetwarzania post. Przetwarzanie post zapewnia doskonałe kontury jakości, ale może być zbyt kosztowne na wielu Mixed Reality urządzeń. Scenę, która demonstruje użycie konturów siatki, można znaleźć w scenie OutlineExamples w obszarze MRTK/Examples/Demos/StandardShader/Scenes/ .

Mesh Outline

MeshOutline.cs i MeshOutlineHierarchy.cs mogą być używane do renderowania konturu wokół programu renderowego siatki. Włączenie tego składnika wprowadza dodatkowy przebieg renderowania obiektu, ale jest przeznaczony do działania w sposób performantywny na urządzeniach przenośnych Mixed Reality i nie wykorzystuje żadnych procesów post. Ograniczenia tego efektu obejmują to, że nie działa dobrze na obiektach, które nie są podlewania (lub muszą być dwuskładnikowe) i problemy z sortowaniem głębokości mogą wystąpić na nakładających się obiektach.

Zachowania konspektu są przeznaczone do pracy w połączeniu z cieniowania MRTK/Standard. Materiały konturu są zwykle stałym, nielitaonym kolorem, ale można je skonfigurować tak, aby uzyskać 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ć dla materiałów konspektu, aby upewnić się, że kontur nie uniemożliwia renderowania innych obiektów.
  2. Wykreślanie wierzchołka — musi być włączone, aby można było renderować kontur.
  3. Użyj opcji Smooth Normals — to ustawienie jest opcjonalne w przypadku niektórych siatek. Wytłoczenie występuje przez przeniesienie wierzchołka wzdłuż normalnego wierzchołka, a w przypadku niektórych siatek przesłonięcie wzdłuż domyślnych wartości normalnych spowoduje przerwy w konturie. Aby rozwiązać ten problem, możesz to pole wyboru użyć innego zestawu wygładzonej wartości normalnych, które są generowane przez MeshSmoother.cs

MeshSmoother.cs to składnik, który może służyć do automatycznego generowania wygładzonej wartości normalnych w siatce. Ta metoda grupuje wierzchołki w siatce, które mają tę samą lokalizację w przestrzeni, a następnie uśrednia wartości normalne 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. Smooth normals wygenerowane za pośrednictwem MeshSmoother.cs .
  2. Używane są domyślne wartości normalne. Zwróć uwagę na artefakty wokół narożników sześcianu.

Testowanie wzornika

Wbudowana obsługa konfigurowalnych testów wzornika w celu uzyskania szerokiej gamy efektów. Na przykład portale:

test wzornika

Obsługa wystąpień kolorów

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

właściwości wystąpienia

Mapowanie triplanar

Mapowanie triplanarów to technika programowa tekstury siatki. Często używane w terenuch, siatki bez obiektów uv lub trudne do odpakowanie kształtów. Ta implementacja obsługuje projekcję w przestrzeni globalnej lub lokalnej, specyfikację płynnego mieszania i normalne wsparcie mapy. Należy pamiętać, że każda używana tekstura wymaga 3 próbek tekstury, dlatego należy jej używać oszczędnie w krytycznych dla wydajności sytuacjach.

triplanar

Wytłaczanie wierzchołka

Wytłaczanie wierzchołków w przestrzeni świata. Przydatne do wizualizacji woluminów ograniczonych lub przejść w/wy siatek.

normalna skala mapy 1

Różne

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

Po prostu zaznacz to pole wyboru:

albedo assignment

Obsługiwane są tekstury przycinania na piksel, lokalne anty aliasy oparte na krawędziach i normalne skalowanie mapy.

normalna skala mapy 2

Zobacz też