Es scheint, dass die einzige Zeittiefe zum Verwerfen von Daten während der Rasterung verwendet wird, dh auf Fragmentebene.
In der Geometriephase habe ich nur das Ausmerzen und Abschneiden von Scheitelpunkten gesehen. Ist es nicht möglich, anhand von Scheitelpunktdaten (Tiefe?) Zu bestimmen, ob sich ein Dreieck hinter einem anderen Dreieck befindet, und wenn ja, zu verwerfen? Würde dies nicht die ganze Arbeit später bei der Scan-Konvertierung sparen?
geometry
vertex
depth
rasterization
Colin
quelle
quelle
Antworten:
Es funktioniert nicht gut, Tiefentests auf Scheitelpunktebene durchzuführen.
Dreiecke sind Flächen. Alle drei Eckpunkte eines Dreiecks könnten von anderen Dreiecken in der Szene verdeckt werden, und die Mitte dieses Dreiecks könnte noch sichtbar sein . Die einzige Möglichkeit, festzustellen, ob sich dieses Dreieck vollständig hinter etwas anderem befindet, besteht darin, die Position oder Tiefe entlang der Oberfläche des Dreiecks zu interpolieren und festzustellen, ob das Dreieck bei jedem Schritt dieser Interpolation noch verdeckt ist.
Genau das macht der Tiefen-Test pro Fragment bereits.
Während Sie also einige "clevere Tricks" pro Scheitelpunkt ausführen könnten, um zu testen, ob ein Dreieck vor dem Pro-Fragment-Test von anderen vollständig verdeckt wird, werden sie niemals vollständig genau sein, es sei denn, Sie tun genau das, was Sie tun Versuchen Sie zu vermeiden: Gehen Sie als Rasterauflösung über die Oberfläche des Dreiecks und testen Sie das Dreieck dort .
quelle
Sie können feststellen, ob sich ein Dreieck hinter einem anderen Dreieck befindet. Dies ist jedoch nicht die Operation, die Sie ausführen müssten, wenn Sie auf Dreiecksebene aussortieren möchten. Sie müssten feststellen, ob sich das Dreieck hinter einem Wald von Dreiecken befindet: Sie müssen feststellen, ob sich das Dreieck hinter einem Dreieck in der Szene befindet.
Das Keulen von Dreieck zu Dreieck ist teuer. Fragment für Fragment Keulen ist viel viel billiger. Irgendwann summiert sich die Anzahl der Dreiecke und das Ausmerzen von Fragmenten wird weitaus billiger.
Dies wird auch früher geschehen als Sie denken, da wir nicht nur einzelne Dreiecke testen können. Wir müssen sie zusammen testen. Wenn Sie ein Dreieck hinter einem Quad haben (zwei Dreiecke), kann es sein, dass Ihr zu testendes Dreieck nicht von einem der Dreiecke verdeckt wird, aus denen das Quad für sich besteht. Dies bedeutet, dass Sie jetzt komplexe Geometrietests benötigen, um festzustellen, ob ein Dreieck auf diese Weise abgedeckt wird.
Am Ende ist das Testen des Dreiecks wesentlich teurer als nur die Fragmenttests.
quelle
Dies kann von Interesse sein:
Nur-Position-Shading-Pipeline
https://patents.justia.com/patent/20160086299
Es scheint genau das Problem zu lösen, nach dem Sie fragen.
quelle