Dobry przykład efektu wieloprzebiegowego?

9

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?

U62
źródło

Odpowiedzi:

5

Za każdym razem, gdy robisz efekty postprocesowe na zbiorze przechwyconych buforów, rozsądny byłby czas na użycie efektu wieloprzebiegowego, tj. Tworzenie konturów, rozmycie ruchu, SSAO, rozkwit. Chodzi o to, że pierwszy przebieg byłby tam, gdzie wyrenderowałbyś wszystko do odpowiednich buforów, a każde kolejne przejście obsługiwałoby każdy efekt postprocesowy.

Podobnie jak Ranieri wspominał o przykładzie XNACC, używają wielu przejść do renderowania ogromnej liczby świateł. Chociaż w tym przykładzie wykonują to samo przejście, tylko raz dla każdego światła.

Należy pamiętać, że Shader Model 2 i wcześniej nie poradzą sobie z posiadaniem w pobliżu tak wielu instrukcji jak Shader Model 3 lub 4 w każdym shaderze, co jest kolejnym powodem podziału efektu na wiele przejść - w celu obsługi starszego sprzętu.

Brett
źródło
Czy możesz podać przykład, w którym obiekt XNA Effect, w którym przechodzisz przez EffectPasses, ma więcej niż jedno przejście w przeciwieństwie do używania różnych efektów i dlaczego?
Jason Goemaat,
4

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?

bluescrn
źródło
3

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

Robert Fraser
źródło
Być może, ale myślę, że większość implementacji rozmycia użyłaby tego samego modułu cieniującego do przejść poziomych i pionowych - i po prostu przekazała przesunięcia próbkowania (jako stałe modułu cieniującego lub dane dla poszczególnych wierzchołków)?
bluescrn
1
@bluescrn - Bloom jest zwykle uważany za efekt 4-przebiegowy: jeden do wydobywania jasnych obszarów i zmniejszania skali, jeden do rozmycia w poziomie, drugi do rozmycia w pionie, drugi do łączenia / zwiększania skali zamazanego obrazu z oryginałem. Podczas gdy parametry modułu cieniującego mogłyby być użyte do ich kontrolowania, rozgałęzienie byłoby potrzebne do rozróżnienia wszystkich oprócz dwóch przejść rozmycia
Robert Fraser
1

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ść.

Riley Adams
źródło
0

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.

zooropa
źródło