Heutzutage haben wir ziemlich fortgeschrittene Tools, um Rendering zu bügeln, indem wir die verschiedenen Phasen, die Zeit für Draw-Aufrufe usw. sehen. Aber ohne sie ist die Grafikpipeline eine ziemlich schwarze Box, wenn es darum geht zu verstehen, was im Inneren passiert.
Stellen Sie sich vor, Sie haben aus irgendeinem Grund kein oder nur sehr eingeschränktes Werkzeug. Wie würdest du sowieso messen, was Zeit in deinem Rendering braucht?
Ich kenne Tricks wie das Verwerfen von Zeichnungsaufrufen, um die CPU-Zeit zu sehen, das Setzen eines 1x1-Ansichtsfensters, um die Kosten der Geometrie zu sehen, die Verwendung eines dummen Fragment-Shaders, um die Füllrate hervorzuheben ... Sie sind bereits nützlich, geben aber nur grobe Werte Idee von dem, was vor sich geht, und nichts über den Grad der Parallelität sagen.
Auch scheint es schwierig zu sein, die Zeit in jeder Phase pro Aufruf zu verbringen, besonders wenn man die mangelnde Präzision aufgrund des Rauschens bei der Messung berücksichtigt.
Welche Tricks verwendest du, wenn dein Rucksack fast leer ist und du dein Profil noch profilieren musst? Woraus besteht dein persönliches Schweizer Taschenmesser?
Absolute Zeit für kleinen Code / Bühne / etc. ist nicht so relevant, da GPU-Treiberoptimierung / Batching / Parallelität / Version es fast unmöglich macht, eine genaue Codemessung ohne GPU-Zähler zu haben. (die Sie erhalten können, wenn Sie mit Lieferanten-Bibliotheken verwenden)
Was Sie leicht messen können, ist jede einzelne Änderung der Code-Änderung. Sie werden nur einen relativen Einfluss haben und das ist es, was Sie wirklich brauchen. Und das nur mit Frame-Rendering-Zeit.
Idealerweise sollten Sie in der Lage sein, Shader- oder Pipeline-Code während der Laufzeit zu bearbeiten und einen direkten Weg zu haben, den Einfluss auf eine ganze typische Szene zu prüfen, wie zum Beispiel den Vergleich von Graphen zwischen verschiedenen Code-Pfaden. (Vorsicht vor statischen Szenen, ansonsten enden Sie mit stark optimierten statischen Ansichten, aber schlechter Dynamik der Szenen)
Beachten Sie, dass der Szenenstatus load / save / record für viele andere Dinge nützlich ist, von Debugging über Undo / Redo bis On-the-Fly Reload, ganz zu schweigen von Savegames. Fügen Sie einen Screenshot Taker + Bildvergleich hinzu, und Sie können den Grafikcode auch testen.
Wenn Sie können, fügen Sie das Ihrem CI-Server hinzu, damit der enorme Code-Einfluss nicht unbemerkt bleibt. (hilft auch Künstlern, wenn sie ihre Assets einchecken, ohne den Rendering-Effekt zu bewerten) Ein Muss lesen, dass CI-Grafik-Test-Arbeit ist da: Ссылка
Hinweis: Ich reagiere auf die Frage: "Profilerstellung eines Grafik-Renderings mit einem Profiler", da das was ich gesucht habe;)
Ich arbeite hauptsächlich am Mac und verwende mehrere Tools:
Was ist dein Trick über den "dummen Fragment-Shader, um die Füllrate hervorzuheben"? (Zeichnen einer einfachen Farbe? oder etwas fortgeschrittener?)