Optimieren der Vertexbuffer
-
Hab mal ein paar Artikel zur Optimierung gelesen und bastel mir hier eine Optimierungsfunktion zurecht. (Ja, ich bin mir sicher, dass ich das selber programmieren will :P) jetzt hab ich eindeutig ein Fehler gemacht (Geometrie leicht zerschrottet und die Optimierung stimmt nu auch nicht wirklich, für diese Frage aber irrelevant^^). Ich habe aber immer noch dieselben vertices und indices. Hab einen framedrop von ca 200 fps auf 30 fps. Irgendwie finde ich den framedrop etwas seltsam. Liegt er nur an cache misses?
-
Hab einen framedrop von ca 200 fps auf 30 fps. Liegt er nur an cache misses?
Nein.
-
So leutz. Ich hab diesen Algorithmus hier implementiert : http://www.cs.princeton.edu/gfx/pubs/Sander_2007_>TR/tipsy.pdf
Ich bekomme bei meinem ca. 5000 dreiecken im Model einen performanceverlust von 20%. Ich vermute mal einfach, dass Blender3D (Daher hab ich das Model mit gleichen Indices exportiert) einen internen Superoptimierer hat :D...Und sorry für die leicht ehm... überflüssige frage.
-
Ich vermute mal einfach, dass Blender3D einen internen Superoptimierer hat
Und ich vermute mal einfach, dass Du einen Fehler gemacht hast.
Schmeiss Deinen Indexbuffer mal in einen simulierten Vertex-Cache (zb hier) und poste mal das Verhaeltnis zwischen hit und miss (VCache::add liefert true/false).
-
vor dem optimieralgorithmus:
misses: 6008
hits: 9628
hits per miss: 1.60253nach dem optimieralgorithmus (vcache_size = 16)
misses: 4232
hits: 11404
hits per miss: 2.69471ok, ehm. was muss man noch beachten? "^^
-
mach den test nochmal mit vcache_size = 24 bitte
-
vorher:
misses: 5523
hits: 10113
hits per miss: 1.83107nachher:
misses: 3982
hits: 11654
hits per miss: 2.92667Wieso ist optimierte geometrie bei OpenGL langsamer und bei DirectX schneller?
fps vorher/nachher:
openGL: 310/292Direct3D: 350/388
-
misses: 6008
hits: 9628Bei 6008+9628 Indizes (5212 Triangles, vermutlich weniger als 3000 Vertices) bist Du nicht Vertexdurchsatz-limitiert.
-
Ok, anderes Mesh:
vorher:
misses: 45965
hits: 168307
hits per miss: 3.66163nachher:
misses: 47227
hits: 167045
hits per miss: 3.53707mit vcache_size = 16 krieg ich folgendes ergebnis:
vorher:
misses: 54442
hits: 159830
hits per miss: 2.935784872misses: 49434
hits: 164838
hits per miss: 3.33451Mein Mesh ist eine einfache Kugel. ich denke mal, hier wurden die indices schon bei der erschaffung in einer güngstige reihenfolge gewählt.
Jetzt noch ne frage zu DirectX/OpenGL
Ich habe bei OpenGL eine framerate von ca. 115 fps.
bei DirectX habe ich eine zeit lang auch etwa 120 fps. nach einigen sekunden springen die fps aber plötzlich auf 180-200. Was passiert hier?
-
falls du shader benutzt, kann es sein dass der treiber fertig wurde den zu optimieren und dann ersaetzt er den provisorischen eventuell mit dem 'optimalen'
es kann aber auch an 100 anderen dingen liegen
-
noch fahr ich ohne shader.
Man kann mich ruhig auf 100 andere dinge verweisen wenns unnötig ist sie aufzuzählen. Bin neugierig