Dlaczego sąsiednie trójkąty nigdy się nie nakładają podczas rasteryzacji?

11

Przepraszamy za pytanie noob, po prostu nigdzie nie mogę znaleźć zadowalającej odpowiedzi ...

Kiedy renderuję prosty, wyrównany do osi quad złożony z dwóch trójkątów, nie rozumiem, dlaczego na ukośnej krawędzi nigdy nie ma żadnych widocznych artefaktów. Niektóre z tych pikseli muszą znajdować się w obu trójkątach, prawda? Więc jeśli mój fragshader zawsze emituje częściowo przezroczysty kolor - powiedzmy 50% czerni - to czy nie powinno być widocznej ciemnej ukośnej linii w wynikowym kwadracie?

Oczywiście to wspaniale, że nie jest to prawdziwy problem, który należy zakodować, po prostu nie rozumiem, dlaczego tak nie jest. Jaka magia GPU sprawia, że ​​to zawsze działa?

Reuben Scratton
źródło

Odpowiedzi:

10

Jest to ten sam problem, co omówiony w Czym są luki w próbkach podczas konwersji skanowania?

W skrócie, rasteryzacja - przynajmniej w przypadku większości systemów sprzętowych - testuje w jednym „nieskończenie małym” punkcie dla każdego piksela, aby ustalić, czy piksel ten znajduje się w danym trójkącie.

Jeśli punkt próbny leży dokładnie na krawędzi, wówczas w grę wchodzą dodatkowe reguły rozstrzygające, często określane jako „reguły wypełniania”. Zazwyczaj będą to odpowiedniki, powiedzmy, tylko punkty krawędzi na górnej / lewej ** krawędzi trójkąta są „wewnątrz”.

** Dostępne są inne zasady ;-)

Simon F.
źródło
Tak, właśnie szukałem tej odpowiedzi
joojaa
1
Odpowiedni fragment z Czarnej Księgi: jagregory.com/abrash-black-book/…
bblack
Bardzo dziękuję! To trochę ma teraz sens, a ta czarna księga też wygląda na świetny zasób
Reuben Scratton