Was ist die schnellste Art eine Dreicksnetz Landschaft zu zeichnen?
-
Ich würde auch indizierte Tri-Lists verwenden.
Ich meinte nur: wenn schon Tri-Strips, dann auch mit Dummy-Triangles zusammenhängen. Sonst hat man wieder unnötig viele Draw-Calls, und je nach API/Implementierung kann das bremsen.
-
dot schrieb:
Wenn es dir darum geht, den Vertexcache voll auszunutzen, dann verwendest du keine Trianglestrips sondern cacheoptimierte indizierte Trianglelists. Die sind nicht nur nicht langsamer, sondern rein prinzipiell effizienter als Strips. Das Märchen von den Strips hält sich leider sehr hartnäckig...
Wie macht man cacheoptimierte indizierte Trianglelists?
Wie sieht diese Cacheoptimierung aus?
-
Andreas XXL schrieb:
Wie sieht diese Cacheoptimierung aus?
Naja: Deine indizes so ordnen, dass maximal viele Vertices möglichst knapp hintereinander wiederverwendet werden. Normalerweise bedient man sich da z.B. raumfüllender Kurven.
-
nein, nicht wirklich, bei terrain bedient man sich normalerweise des "cache priming" und geht dann simpel zeilenweise weiter, das ist das cache effizienteste
sieh z.B.
http://www.gamedev.net/topic/371052-rendering-vertices-for-my-terrain/page__view__findpost__p__3445377
-
Damit das optimal ist, muss der Vertexcache aber mindestens so viele Einträge halten können, wie eine Zeile Vertices hat, was bei Terrain wohl eher kaum der Fall ist!?
-
die zeilenbreite waehlt man natuerlich so dass sie der cachebreite entspricht
-
Das ist schon klar. Aber wenn man das Terrain in Spalten oder Tiles splittet, dann hat man dort an den Nähten überall Cache-misses. Ohne es mir jetzt genau durchüberlegt zu haben, würde ich rein intuitiv mal davon ausgehen, dass man da z.B. mit einer Hilbertkurve näher ans Optimum kommt.
-
dot schrieb:
Das ist schon klar. Aber wenn man das Terrain in Spalten oder Tiles splittet, dann hat man dort an den Nähten überall Cache-misses.
die hast du bei einer hilberkurve auch, nur eben viel frueher, weil die halbe cacheline wiederverwendet wird in am anfang.
Ohne es mir jetzt genau durchüberlegt zu haben, würde ich rein intuitiv mal davon ausgehen, dass man da z.B. mit einer Hilbertkurve näher ans Optimum kommt.
Cache priming ist eigentlich das allgemein bekannte optimum fuer ein grid.
http://www.gamedev.net/topic/493518-terrain-triangles-or-trianglestrips/page__view__findpost__p__4220392
-
Gut, Ok. Mir war das Verfahren ja durchaus bekannt, ich ging nur immer davon aus, dass es nur dann optimal ist, wenn die Cachesize >= der Zeilenlänge ist. Aber wenn ich so drüber nachdenk, dann hast du wohl recht...
-
ich denke, vielleicht waere die hilbert curve besser wenn man die cache breite nicht kennt. leider ist dieses afaik auch nur der effektivste algorithmus nach cache primming wenn die cache size power of 2 ist, viele GPUs nutzen nicht PO2, da sie wohl einige cache baenke als "temp" nutzen in die die Vertexshader schreiben, bei GF1/2 war das glaube ich 14 und gf 3/4 waren es "bis 23".