Meine Szene enthält mehrere Objekte. (Sagen wir 3 Würfel, 1 Zylinder, 8 Kugeln.) Ich gehe davon aus, dass ich für jeden einen Vertex-Shader erstellen sollte. Wie viele Programme soll ich haben?
Alternativen:
- Ein Programm pro Objekt
- Ein Programm für alle Würfel und ein anderes für alle Kugeln (vorausgesetzt, sie verwenden dieselben Shader)
- Ein großes Programm für alles
Was ist der richtige Ansatz?
opengl
shaders
architecture
Jacks_Gulch
quelle
quelle
Antworten:
Sie sollten Shader-Programme als ähnlichen Teil des Status wie Texturen betrachten. Das Ändern des Status ist teuer, sodass Sie möglicherweise mehrere Texturen zu einer kombinieren können, um Texturänderungen zu vermeiden. Gleiches gilt für Shader. Möglicherweise können Sie mehrere Shader kombinieren, um Statusänderungen zu vermeiden.
Ähnlich wie beim Kombinieren von Texturen ist das Kombinieren von Shadern mit einem Overhead verbunden. Wenn Sie nur 16 x 16 Pixel aus einer 4096 x 4096-Textur rendern, verwenden Sie die Hardware nicht effizient. Wenn das von Ihnen gerenderte Objekt nur 10% des Codes in Ihrem Shader verwendet, ist es ebenfalls möglich (und sogar wahrscheinlich), dass die Grafikkarte unnötig viele Dinge berechnet.
Kurz gesagt, "hängt davon ab".
quelle
Es ist am besten, die Dinge so einfach wie möglich zu halten. Das Duplizieren des gleichen Shaders für jedes Objekt ist nicht erforderlich und wird schnell aufgebläht. Sie möchten auch nicht einen riesigen Shader, der jeden möglichen Anwendungsfall abdeckt, da dies unnötigen Overhead verursacht.
Es gibt verschiedene Meinungen zum Shader-Management und keinen "optimalen" Weg, dies zu erreichen. Ich habe sogar einige Shader-Implementierungen gesehen, bei denen jeder Shader im laufenden Betrieb basierend auf Parametern generiert wird (z. B. in der Unreal-Engine ).
Für jemanden, der gerade erst in diesem Bereich anfängt, ist es möglicherweise gut, zuerst die grundlegenden Shader zu zeichnen. Zum Beispiel habe ich einen Shader für texturlose Objekte, einen Shader mit grundlegender Textur- und Pixelbeleuchtungsunterstützung usw. Jedes Mal, wenn ich einen anderen Effekt möchte, der mit einem vorherigen Shader nicht möglich ist, dann habe ich ' Ich werde einen neuen für den neuen Effekt erstellen.
Der Zweck eines solchen Systems ist es, die Dinge einfach zu halten. Gerade. Behalten. Es. Einfach.
quelle