Tessellation vs Geometry Shader

11

Popraw mnie, jeśli się mylę, ale zarówno zadania modułu cieniowania geometrii, jak i modułu cieniowania teselacji mają generować wierzchołki na potoku graficznym. Chciałbym wiedzieć, czym się różnią i kiedy powinienem używać jednego nad drugim?

Cezar
źródło
6
Czuję się zbyt leniwy, by napisać pełną odpowiedź, ale jego sedno polega na tym, że Geometry Shader jest przeznaczony do bardzo małego, stałego poziomu wzmocnienia, gdzie etapy
teselacji

Odpowiedzi:

14

Właściwie nie, „zadaniem” modułu cieniującego geometrię (GS) jest ocena pierwotna.

Programy cieniujące geometrię mogą być mozaikowane, ale są one ograniczone przez a) górne granice wewnątrz procesu dotyczące liczby elementów wyjściowych oraz b) wykonanie w ramach jednego modułu cieniującego ... oczywiście wystąpienie modułu cieniującego rozwiązuje drugi problem, ale ogólne moduły cieniujące geometrię są bardziej skuteczne w pierwotnej ocenie i / lub interpolacji wartości niż w teselacji.

Dla porównania, shadery teselacji (TS) zostały wprowadzone specjalnie do wykonywania zagęszczenia geometrii, dzięki czemu działają dobrze, są odporne na coraz szerszą gamę algorytmów (zamierzone) i są mniej ograniczone przez bufory ograniczone wyjściami.

Daniel Rákos ma dobry artykuł na temat ewolucji GS / TS: Historia teselacji sprzętu

Kiedy zastosować, jest to przypadek „użyj odpowiedniego narzędzia do zadania”, a oto jak: Zbuduj rurociąg wstępny bez tesselatora, aby uzyskać prymitywy poprawnie oceniające w VS / GS / FS. Rozdziel zakres teselacji opartej na widoku lub scenie, a następnie wstaw TS przed GS, aby zagęścić prymitywy, które są następnie przekazywane do już zaprojektowanego GS. Jeśli chcesz wypróbować inny TS, zbuduj alternatywę i zamień ją na potok ... możesz nawet użyć instancji GS, aby dynamicznie wybrać odpowiedni TS na podstawie właściwości prymitywu!

JasonInVegas
źródło