Warum überlappen sich benachbarte Dreiecke beim Rastern nie?


11

Entschuldigung für die folgende Noob-Frage, ich kann nur nirgendwo eine zufriedenstellende Antwort finden ...

Wenn ich ein einfaches, an der Achse ausgerichtetes Quad aus zwei Dreiecken rendere, verstehe ich nicht, warum an der diagonalen Kante, an der sich diese Dreiecke treffen, keine Artefakte sichtbar sind. Einige dieser Pixel müssen sich in beiden Dreiecken befinden, oder? Wenn mein Fragshader also immer eine teilweise transparente Farbe abgibt - etwa 50% Schwarz -, sollte das resultierende Quad dann keine sichtbare dunkle diagonale Linie enthalten?

Offensichtlich ist es großartig, dass dies kein wirkliches Problem ist, das umgangen werden muss. Ich verstehe einfach nicht, warum es nicht so ist. Welche GPU-Magie sorgt dafür, dass dies immer funktioniert?

Antworten:


10

Dies ist das gleiche Problem wie unter Was sind Beispiellücken während der Scan-Konvertierung?

Kurz gesagt, die Rasterisierung - zumindest bei den meisten Hardwaresystemen - testet an einem einzelnen "infinitesimalen" Punkt für jedes Pixel, um festzustellen, ob sich dieses Pixel innerhalb eines bestimmten Dreiecks befindet.

Wenn der Abtastpunkt genau auf einer Kante liegt, kommen zusätzliche Regeln zum Brechen von Bindungen ins Spiel, die oft als "Füllregeln" bezeichnet werden. In der Regel entspricht dies beispielsweise nur der Betrachtung der Randpunkte an den oberen / linken ** Kanten eines Dreiecks als "innen".

** Andere Regeln sind verfügbar ;-)


Ja, ich habe nur nach dieser Antwort
gesucht

1
Relevante Passage aus dem Black Book: jagregory.com/abrash-black-book/…
bblack

Vielen Dank! Es macht jetzt irgendwie Sinn, und dieses schwarze Buch sieht auch nach einer großartigen Ressource aus
Reuben Scratton
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.