TRIANGLE LIST oder STRIP?



  • nein, wir haben indices:

    strip:

    0-1-2-3

    2 dreiecke, 4 vertices, 4 indices

    list:
    0-1-2
    2-1-3

    2 dreiecke 4 vertices, 6 indices

    ok, jetzt zeichnen wir 2 nicht zusammenhängende quads:

    strip:

    0-1-2-3-3-4-4-5-6-7

    8 dreiecke (4 degenerierte), 8 vertices, 10 indices

    list:

    0-1-2
    2-1-3
    4-5-6
    6-5-7

    4 dreiecke, 8 vertices, 12 indices

    3 nicht zusammenhängende quads:

    strip:

    0-1-2-3-3-4-4-5-6-7-7-8-8-9-10-11

    14 dreiecke, 12 vertices, 16 indices

    list:

    0-1-2
    2-1-3
    4-5-6
    6-5-7
    8-9-10
    10-9-11

    6 dreiecke, 12 vertices, 18 indices

    beides gibt das gleiche ergebnis und nutzt den vertex cache gleich effizient (2 hits pro dreieck). aber die strip variante braucht min. doppelt so viele dreiecke die zwar degeneriert sind und nicht gezeichnet werden, die graka muss aber trozdem erstmal nachschauen um das zu bemerken was bei der list entfällt.
    die list braucht hingegen nur konstant 2 indices mehr als der strip.
    bei guten optimierungen und größeren meshes wird der unterschied zwischen strip und list praktisch gegen 0 gehen, wobei lists einfacher zu handhaben sind.
    bei lists muss man natürlich unbedingt auf den vertex cache achten (also schauen, dass man nich wahlos in der gegend rumspringt, das wär natürlich der overkill).

    wenn man jetzt größere zusammenhängende flächen hat und einen vertex cache von, sagen wir 12 vertices, sollte man natürlich benachbarte dreicke die sich vertices teilen zusammennehmen, um möglichst oft ein vertex zu recyclen bevor es von einem andren aus dem cache geworfen wird. das erfordert unter umständen "kleine sprünge in näherer umgebung" die man mit einer list so fast gratis bekommt, bei einem strip aber degenerierte dreiecke erfordern. wenn man bedenkt, dass ein index normalerweise nur 2 byte groß ist und die list nicht soo viel mehr indices als der strip benötigt, wird unterm strich nichts wirklich gegen eine list und nichts wirklich für einen strip sprechen, wobei die list meine wahl wäre, da imo einfacher und universeller einsetzbar.

    afaik sind außerdem lists das lieblingsessen von modernerer hardware 😉



  • Danke, das ist mal ne Antwort!

    Schade, jetzt wird alles noch komplizierter (eigenes Modellformat, loader...).

    MfG



  • man sollte jedoch beachten, dass dot hier quasi den worst-case fuer striping als beispiel gewaehlt hat, naemlich nicht-zusammenhaengende polygone.
    in realen szenarien produzieren beide methoden vergleichbare ergebnisse.

    indices selbst haben keine performancerelevanz, weder ist ihre datenmenge relevant, noch ihre verarbeitungsgeschwindigkeit, vertices sind das problem.

    wenn du 1.000.000 triangles renderst, verbrauchen die rund 6mb index-daten.
    im durchschnitt hast du dann 500.000 vertices mit (sagen wir mal) 32 byte pro vertex, also rund 15mb.
    die index-daten machen dann immerhin 1/4 des durchsatzes aus - so ganz irrelevant ist das also nicht...



  • Jo. Ich wollte sowieso nur zusammenhängende Polygone zeichnen.
    Von trianglelists bin ich nun überzeugt und werde sie verwenden.

    MfG

    EDIT:
    Hmm, aber die degenerierten Dreiecke hätte ich sowieso benötigt, um eine neue Zeile zu beginnen?!



  • naja, der worst case wären alles einzelne dreiecke gewesen 😉
    natürlich sind bei normalen meshes weniger sprünge notwendig, aber wie ich bereits erwähnt hab und du selber auch sagst, werden beide methoden bei normalen bedingungen etwa die gleichen ergebnisse erzielen.
    rein technisch spricht also nichts wirklich gegen lists und nichts wirklich für strips.
    was die datenmenge angeht, so mag die zwar riesig erscheinen, aber die wäre bei einem strip auch nicht wirklich kleiner.

    und ja, die degenerierten dreiecke brauchst du natürlich bei einem strip um eine neue zeile zu beginnen.



  • Sorry, aber ich muss einfach... ich hab auf Seite 1 ja schon geschrieben dass heute eigentlich keiner mehr Tri-Strips verwendet... und dass es auch performancemässig nix um ist... bloss mir glaubt(e) mans ja nicht 🙂



  • ich hab auf Seite 1 ja schon geschrieben dass heute eigentlich keiner mehr Tri-Strips verwendet...

    mit weniger unsachgemaessen pauschalisierung haette man dir vielleicht auch mehr beachtung geschenkt 😉


  • Mod

    dot schrieb:

    natürlich sind bei normalen meshes weniger sprünge notwendig, aber wie ich bereits erwähnt hab und du selber auch sagst, werden beide methoden bei normalen bedingungen etwa die gleichen ergebnisse erzielen.

    unter normalen bedingungen duerften trilists schneller sein. einfach einen guten benchmark machen und mittels nvstripper ausprobieren 😉



  • besser als nvtristrip geht leicht.
    nimmt man das optimized mesh example aus'm direct3d-sdk (effektiv die erguesse vom hoppe), misst man (hier) keinen bemerkenswerten unterschied zwischen trilist und strip.
    es gibt (bei einem homogenen hochtesselierten mesh) auch keine begruendung, weshalb einer der beiden algorithmen bessere resultate erzielen sollte.
    fuer die gesamtperformance sind andere faktoren ohnehin relevanter.


  • Mod

    hellihjb schrieb:

    ...

    ja, ein normaluser wird kaum nen unterschied messen, aber man sollte nicht soviel wert auf die idealisierten benchmarks von paperschreibern geben. die muessen natuerlich die vorzuege ihrer methoden darstellen.



  • hellihjb schrieb:

    ich hab auf Seite 1 ja schon geschrieben dass heute eigentlich keiner mehr Tri-Strips verwendet...

    mit weniger unsachgemaessen pauschalisierung haette man dir vielleicht auch mehr beachtung geschenkt 😉

    Was war denn bitte "unsachgemaess pauschalisiert", hm?


  • Mod

    hustbaer schrieb:

    hellihjb schrieb:

    ich hab auf Seite 1 ja schon geschrieben dass heute eigentlich keiner mehr Tri-Strips verwendet...

    mit weniger unsachgemaessen pauschalisierung haette man dir vielleicht auch mehr beachtung geschenkt 😉

    Was war denn bitte "unsachgemaess pauschalisiert", hm?

    Verwendung von Tri-Strips ist eines dieser Dinge die einem vielleicht 5% (wenn überhaupt) Performance bringen wenn man sie macht, dafür aber tierisch nerven



  • Ah, das 😃
    Ok, dann ersetze 5% duch "sehr wenig".

    Andrerseits wurde hier SO viel "pauschalisiert" von den Tri-Strip Verfechtern... naja egal.



  • aber es waren doch gar keine "tri-strip-verfechter" da 🙂


Anmelden zum Antworten