Mithilfe der Frame-Profilerstellung können Sie einige mögliche leistungsbezogene Probleme mit Vertex diagnostizieren. Im Bereich Befehle sehen Sie alle Draw-Aufrufe, die Ihr Spiel in einem bestimmten Frame ausführt, sowie die Anzahl der Primitive, die pro Draw-Aufruf gezeichnet werden. So lässt sich die Gesamtzahl der in einem einzelnen Frame eingereichten Knotenpunkte schätzen.

glDrawElements
-Aufruf mit 2.718 gezeichneten DreiecksprimitivenKomprimierung von Vertex-Attributen
Ein häufiges Problem, das bei Ihrem Spiel auftreten kann, ist eine große durchschnittliche Scheitelpunktgröße. Eine große Anzahl von Scheitelpunkten, die mit einer hohen durchschnittlichen Scheitelpunktgröße übergeben werden, führt zu einer großen Bandbreite für das Lesen des Scheitelpunktspeichers, wenn die GPU ihn liest.
So sehen Sie sich das Vertex-Format für einen bestimmten Draw-Aufruf an:
Wählen Sie den gewünschten Ziehungsvorgang aus.
Das kann ein typischer Draw-Aufruf für die Szene, ein Draw-Aufruf mit einer großen Anzahl von Eckpunkten, ein Draw-Aufruf für ein komplexes Charaktermodell oder ein anderer Typ von Draw-Aufruf sein.
Gehen Sie zum Bereich Pipeline und klicken Sie auf IA für die Eingabe-Assembly. Damit wird das Vertex-Format für die in die GPU eingehenden Vertices definiert.
Beobachten Sie eine Reihe von Attributen und deren Formaten.
R32G32B32_SFLOAT
ist beispielsweise ein 3-Komponenten-Gleitkommawert mit 32 Bit und Vorzeichen.

Häufig lassen sich Vertex-Attribute komprimieren, ohne dass die Qualität der gerenderten Modelle wesentlich beeinträchtigt wird. Wir empfehlen insbesondere:
- Komprimieren der Eckpunktposition auf 16-Bit-Gleitkommazahlen mit halber Genauigkeit
- UV-Texturkoordinaten in 16-Bit-Ganzzahlen ohne Vorzeichen komprimieren
- Kompression des Tangentenraums durch Codierung von Normal-, Tangenten- und Binormalvektoren mit Quaternionen
Auch andere verschiedene Attribute können für Typen mit geringerer Genauigkeit im Einzelfall berücksichtigt werden.
Vertex-Stream-Aufteilung
Sie können auch prüfen, ob Vertex-Attributstreams richtig aufgeteilt sind. Bei Architekturen mit gekachelter Darstellung wie mobilen GPUs werden Scheitelpunktpositionen zuerst in einem Binning-Pass verwendet, um Bins von Primitiven zu erstellen, die in jeder Kachel verarbeitet werden. Wenn Vertex-Attribute in einem einzigen Puffer verschachtelt sind, werden alle Vertex-Daten zum Binning in den Cache gelesen, obwohl nur Vertex-Positionen verwendet werden.
Um die Speicherbandbreite für das Lesen von Knoten zu reduzieren und die Cache-Effizienz zu verbessern und so die für den Binning-Pass benötigte Zeit zu verkürzen, sollten Knotendaten in zwei separate Streams aufgeteilt werden: einen für Knotenpositionen und einen für alle anderen Knotenattribute.
So prüfen Sie, ob Vertex-Attribute richtig aufgeteilt sind:
Wählen Sie den gewünschten Draw-Call aus und notieren Sie sich die Draw-Call-Nummer.
Das kann ein typischer Draw-Aufruf für die Szene, ein Draw-Aufruf mit einer großen Anzahl von Eckpunkten, ein Draw-Aufruf für ein komplexes Charaktermodell oder ein anderer Typ von Draw-Aufruf sein.
Gehen Sie zum Bereich Pipeline und klicken Sie auf IA für die Eingabe-Assembly. Damit wird das Vertex-Format für Vertices definiert, die in die GPU gelangen.
Beachten Sie die Bindungen Ihrer Vertex-Attribute. In der Regel steigen sie linear an (0, 1, 2, 3 usw.), aber das ist nicht immer der Fall. Die Vertex-Position ist in der Regel das erste aufgeführte Vertex-Attribut.
Suchen Sie im Bereich State nach
LastDrawInfos
und maximieren Sie die entsprechende Ziehungsnummer. Maximieren Sie dann dasBoundVertexBuffers
für diesen Zeichenaufruf.Sehen Sie sich die Vertex-Puffer an, die während des angegebenen Zeichenaufrufs gebunden sind. Die Indexe entsprechen den Bindungen für Vertex-Attribute von zuvor.
Erweitern Sie die Bindungen für die Vertex-Attribute Ihres Draw-Aufrufs und erweitern Sie die Puffer.
Sehen Sie sich die
VulkanHandle
für die Puffer an, die den zugrunde liegenden Speicher darstellen, aus dem die Vertex-Daten stammen. Wenn sich dieVulkanHandle
unterscheiden, stammen die Attribute aus unterschiedlichen zugrunde liegenden Puffern. Wenn dieVulkanHandle
s gleich sind, die Offsets aber groß sind (z. B. größer als 100), stammen die Attribute möglicherweise trotzdem aus verschiedenen Unterpuffern. Dies erfordert jedoch weitere Untersuchungen.

Weitere Informationen zum Aufteilen von Vertex-Streams und zur Behebung des Problems in verschiedenen Spiele-Engines finden Sie in unserem Blogpost zu diesem Thema.