W XNA (i ogólnie AFAIK Direct3D) zamiast tworzyć pojedyncze shadery wierzchołków i fragmentów, potencjalnie wiele powiązanych shaderów łączy się w „Efekty”. Kiedy korzystasz z efektu, wybierasz „technikę” (lub iterujesz przez wszystkie z nich), a następnie każda „technika” ma kilka „przejść”. Pętla przechodzi przez każde przejście, wybiera odpowiedni wierzchołek i fragmentator cieni i rysujesz geometrię.
Ciekawe, czy potrzebowałbyś wielu przepustek? Rozumiem, że na początku 3d miałeś tylko jedną jednostkę tekstur, a potem miałeś 2, a to często wciąż nie wystarczało, jeśli chciałeś również mapować środowisko. Ale na nowoczesnych urządzeniach, nawet w klasie mobilnej, możesz próbkować 8 lub więcej tekstur i wykonywać tyle obliczeń oświetlenia, ile chcesz w jednym module cieniującym.
Czy bardziej doświadczeni mogą zaoferować praktyczne przykłady tego, gdzie renderowanie wieloprzebiegowe jest nadal potrzebne, czy jest to po prostu nadmierna inżynieria ze strony XNA / Direct3d?
Jak wskazano w innych odpowiedziach, renderowanie wieloprzebiegowe (wielokrotne rysowanie pojedynczej siatki z różnymi modułami cieniującymi / parametrami), jak sugerowano w innych odpowiedziach, jest zdecydowanie nadal stosowane, głównie do oświetlenia i efektów specjalnych
Przepustki efektów D3DX można wykorzystać do tego rodzaju rzeczy. Ale można go również wdrożyć z więcej niż jednym shaderem / efektem.
Pierwotnym zamiarem przejścia było pomóc w implementacji złożonych shaderów na niższym sprzęcie (pre-shader-2.0), gdzie ograniczenia dotyczące liczby etapów tekstur i instrukcji shadera na przejście były dość ograniczone.
Czy w przykładzie oświetlenia wieloprzebiegowego można uzyskać znaczący wzrost wydajności dzięki zastosowaniu przejść zamiast efektów przełączania?
źródło
Oprócz rzeczy o oświetleniu, o której wszyscy wspominali, innym ważnym zastosowaniem tego jest rozmycie . Poziome i pionowe są wykonywane w osobnych przejściach (aby uzyskać rozmycie 9x9, należy próbkować tylko 18 pikseli na każdy piksel wyjściowy zamiast 81). Służy do kwitnienia / HDR, głębi ostrości, poświaty itp
źródło
Przykład na stronie internetowej twórców XNA wykorzystuje wiele przebiegów do obliczenia oświetlenia z wielu (setek) źródeł światła.
źródło
Jak powiedział Ranieri, możesz użyć wielu przejść dla wielu świateł, na przykład z jednym materiałem możesz mieć przejście `` otoczenia '', dodatkowe przejście na światło punktowe, inne dodatkowe przejście na światło punktowe, a następnie przejście na naklejkę, aby pomnożyć w rozproszonym tekstura (w przeszłości korzystałem z takiej konfiguracji i jest to najbardziej elastyczny sposób obsługi cieniowania oświetlenia, jaki widziałem, bez wchodzenia w odroczone cieniowanie).
Ponadto uważam, że większość shaderów futerkowych używa wielu przejść.
źródło
Mapy cieni do tworzenia cieni można wykonywać za pomocą wieloprzebiegowego. Uwaga: niektóre efekty wieloprzebiegowe można wykonać w jednym przejściu, jeśli karta wideo obsługuje tę samą liczbę jednostek tekstur, co liczba przejść. Jeśli więc nie masz wystarczającej liczby jednostek tekstur, będziesz musiał użyć wielu przejść. Jedna stała platforma sprzętowa (np. Konsole do gier), prawdopodobnie możesz kodować tylko za pomocą teksturowania, ponieważ znasz liczbę jednostek tekstur. Ale w przypadku komputerów istnieje nieskończona liczba konfiguracji sprzętowych. Jeśli chcesz mieć jak najszerszy zasięg dla konsumentów, prawdopodobnie zechcesz rozłożyć niektóre bardziej złożone efekty na wiele przejść, aby użytkownicy z niższym sprzętem (tj. Nie posiadający tak wielu jednostek tekstur na GPU) mogli nadal zobacz efekt. Krótko, mapy cienia są tworzone przez utworzenie mapy cienia sceny z perspektywy światła w jednym przejściu. Następnie tekstura mapy cienia jest mieszana z sceną z innymi teksturami sceny.
źródło