Ich versuche, ein Szenendiagramm zu implementieren, und in allen Artikeln, die mir begegnet sind, wird über die Sortierung von Objekten gesprochen. So würden Sie Ihre Objekte beispielsweise nach "Material" sortieren. Bis ich mich hinsetzte und anfing, es zu implementieren, hielt ich das für selbstverständlich, weil es Sinn machte. Aber jetzt frage ich mich, was sich beim Sortieren tatsächlich ändert?
In meiner Engine habe ich einen Manager für UBOs. Ich verwende diese zum Speichern von Daten, die von Programmen gemeinsam genutzt werden. Im Moment sind nur Zeit-, Kamera- und Projektionsmatrizen und Lichter erforderlich (ich mache mir keine Sorgen darüber, welche Lichter sich auswirken welche Objekte ATM).
Jetzt muss ich für jedes Modell das Modell in eine Weltmatrix-Uniform ändern, keine Sortierung wird das ändern. Ist der Sprung von der Änderung dieser Matrix zur Einstellung eines Materials für jedes Objekt so schlecht?
Ich erinnere mich vage daran, irgendwo gelesen zu haben, dass jedes Mal, wenn Sie etwas in der Pipeline ändern, es geleert werden muss und dies zu Leistungsproblemen führen kann. Aber für jeden Zeichnungsaufruf richte ich trotzdem ein Modell für die Weltmatrix ein. Welchen Sinn macht es also, jemals darüber besorgt zu sein?
Übrigens gibt es Informationen darüber, ob das Ändern einer Uniform und das Aufrufen von glBufferSubData mehr (oder weniger) teuer ist.
quelle
Antworten:
Sie möchten auf jeden Fall sortieren, um Materialien zu stapeln. Wenn Sie können, können Sie auch die Instanz verwenden, um die Geometrie zu stapeln (z. B. wenn Sie die X-Nummer derselben Objekte haben).
Es ist auch immer noch wertvoll, nach Tiefe zu sortieren. Sie müssen nach transparenten Objekten von hinten nach vorne sortieren (wobei Sie einige erweiterte Techniken ignorieren, die diese Notwendigkeit unter bestimmten Umständen beseitigen).
Es ist auch sinnvoll, undurchsichtige Objekte von vorne nach hinten zu sortieren, da Early-Z den Fragment-Shader-Overhead Ihrer Szene erheblich reduzieren kann.
quelle
Das reine Sortieren von Objekten nach Tiefe hat einen enormen Wert, insbesondere beim Binning oder beim Kacheln von Rendering-Architekturen.
Sortieren Sie Feststoffe von vorne nach hinten und Transparentfolien von hinten nach vorne.
Beim Rendern wird das Material, das der Kamera und dem Volumenkörper am nächsten liegt, zuerst gerendert, und alles andere, das denselben Platz einnimmt, wird durch eine frühzeitige Überprüfung des Z-Puffers zurückgewiesen.
Wenn die Grafikarchitektur über einen hierarchischen oder niedrig aufgelösten Z-Puffer verfügt, wird die Geometrie möglicherweise bereits vor dem Rendern gelöscht.
quelle