Sollte ich GL_CULL_FACE immer verwenden?

8

Sollte ich diese Methode immer beim Rendern verwenden? Verlangsamt es viel auf schlechten Grafikkarten?

Wenn das Endergebnis nicht viele gekillte Gesichter haben wird, sollte ich dann diese Methode auch verwenden?

    
Newbie 06.03.2010, 17:37
quelle

3 Antworten

19

Wenn alle Ihre Modelle korrekt definiert sind (konvex, mit konsistenter Vertex-Wicklung), wird das Culling niemals die Performance beeinträchtigen und wird fast immer zur Performance beitragen.

Stellen Sie sich vor, Sie rendern einen Cube, wobei Culling deaktiviert ist. Die Gesichter auf der Rückseite (der entfernten Seite) des Würfels werden gerendert von dir gerendert und die von dir ausgewählten Materialattribute der Rückseite werden angewendet. Dann werden die Gesichter auf der Vorderseite des Würfels gerendert: Da die gerade wiedergegebenen Rückseiten das Innere des Würfels sind, sind sie zu 100% von den Vorderseiten verdeckt.

Wenn der Würfel anders ausgerichtet war, werden die Vorderseiten möglicherweise zuerst gerastert, aber die Rückseiten werden weiterhin verarbeitet und dann die Fragmente vom z-Puffer zurückgewiesen.

Nettoergebnis: Sie haben 2x so viele Fragmente wie nötig gerastert. Dies wird eine große Sache mit einer großen Anzahl von Polygonen oder komplexen Pixel-Shadern. Durch das Ausblenden von Gesichtern können Sie das Rastern von Gesichtern, von denen Sie wissen, dass sie nicht angezeigt werden, vollständig vermeiden.

Wenn Sie ein Zeichenmodell mit ~ 100.000 Polygonen haben, halbiert das Face Culling die Menge an Arbeit, die die Pixel-Hardware für jeden Frame benötigt. Dies ist eine große Ersparnis, wenn Sie große Oberflächen-Shader haben.

Wenn du mit kleinen Modellen und keinen Shadern arbeitest, ist das Aussortieren heutzutage wirklich egal. Aber es ist eine gute Übung, sie trotzdem zu aktivieren.

    
Asher Dunn 06.03.2010, 18:07
quelle
6

Die Aktivierung von Face Culling (normalerweise Back-Face) hat einen wesentlichen Einfluss auf die Rendering-Performance.

Nun lautet die zu beantwortende Frage "warum ist das Culling nicht standardmäßig aktiviert oder warum wird nicht immer verwendet?" Es gibt mehrere Faktoren, die bestimmen, ob das Aktivieren von Culling möglich ist oder nicht. Eines ist das Modell, das gerendert wird und wie es betrachtet wird.

Wenn für jedes Polygon im Modell nur ein Gesicht, entweder vorne oder hinten, sichtbar ist (wenn das Modell aus allen möglichen Winkeln betrachtet wird), können wir das andere Gesicht abtasten.

Für Beispiel: "Würfel", egal ob Sie von innen oder von außen schauen, wenn Sie gedreht werden, können Sie nur eine Seite von 6 Polygonen sehen, die den Würfel bilden.

Ein anderes Beispiel: "Segel eines Schiffsmodells" Wie in meinem Sea-Wars (3d) -Spiel sind die Segel eines Schiffsmodells eine Oberfläche, die aus mehreren flachen Polygonen besteht. Wenn sich ein Boot im Wasser bewegt, kann man beide Seiten des Segels sehen. In diesem Fall ist das Aussondern einer der beiden Flächen nicht wünschenswert.

Daher kann das Culling für alle Modelle in der Szene aktiviert werden, die der Semantik von Würfeln folgen und für alle anderen Modelle deaktiviert werden.

P.S. Face Culling sollte nach Möglichkeit verwendet werden.

    
dehinrsu 15.01.2011 00:25
quelle
0

Das hängt davon ab, was Sie rendern. Im Allgemeinen ist eine Ausmerzung wünschenswert. Der einzige Grund, den ich mir vorstellen kann, es nicht zu benutzen, ist das Rendern von Modellen mit sichtbaren Rückseiten. Ein anderes Szenario, in dem das Culling möglicherweise nicht erwünscht ist, könnten schlecht modellierte Modelle sein, bei denen die Scheitelpunkte in der falschen Reihenfolge definiert sind.

    
h0b0 06.03.2010 17:43
quelle

Tags und Links