Nach Texturen/Shader sortieren
-
Guten Morgen!
Ich frage mich grad, wie man eigenlich diese Sortierung nach Texturen und Shaders anstellt? Das Problem ist ja, das ich viele verschiedene Sachen habe die ich Zeichnen möchte, beispielsweise das Terrain, statische und animierte Modelle, Sky's und vieles mehr. Doch wie sortiert man nun am gescheitesten? Hat man für jeden SceneNode eine eigene Sortierfunktion oder hat man bei jeder Klasse sowas wie GetTextures() und GetShader() und sortiert dann einfach. Oder hat man sowas wie eine Mesh Klasse, die einfach einer Liste angehäftet wird und anschließend werden die Meshes sortiert?
Ich finde alles hat so seine vorteile. Die ersten beiden Methoden haben kaum Overhead, dafür sind sie jedoch sehr unfexibel, wenn man z.B. in einem SceneNode mehrere Shader und Meshes mit mehreren render passes hat. Letztere ist sehr flexibel und man muss das ganze nur einmal nieder schreiben, klingt für mich jedoch sehr nach Overhead, wenn ich nur mal an Shader Konstanten denken muss, die man ja pro Mesh immer wieder zwischenspeichern muss.
Ich hänge glaube ich schon über ein Jahr an dem Grundkonzept meines Renderers und komme irgentwie einfach nicht vorran ...
-
Ich denke ja immer, dass wenn man Renderpasses optimieren will, man auch die Renderpasses sortieren sollte, aber wahrscheinlich denke ich zu kurz. Auf jeden Fall wäre es das, was ich tun würde.
klingt für mich jedoch sehr nach Overhead, wenn ich nur mal an Shader Konstanten denken muss, die man ja pro Mesh immer wieder zwischenspeichern muss.
1. Die Zahl der zu zeichnenden Objekte ist endlich und klein.
2. irgendwo musst du die Information eh speichern.
3. Renderstate ist typischerweise klein.Und nicht zuletzt
4. Jede Lösung ist besser als keine Lösung. Man kann alles noch später umbauen, wenn es mal bottleneck werden sollte. Besser als 1 Jahr rumsitzen.