Was ist der Flaschenhals?



  • Mal eine kleine Frage:

    Wenn meine Grafikanwendung bei 640*480 genauso schnell läuft wie bei 1440*900, kann ich dann davon ausgehen, dass die Grafikkarte nicht der Performanceflaschenhals ist? Es also eher bei CPU liegt und ich dort optimieren muss?

    Danke,
    Tim



  • Nicht unbedingt.
    Der Flaschenhals könnte z.B. auch das Vertex-Processing sein.

    PS: Hast du auch V-Sync abgeschaltet?



  • TomasRiker schrieb:

    PS: Hast du auch V-Sync abgeschaltet?

    Jap. Also zumindest schwangt die Frequenz meines TFTs nich zwischen 40 und 500 hz 😛

    Was meinst du mit Vertex Processing?

    Ich hab mir einfach nur gedacht, da die Grafikkarte bei 1440*900 viel mehr zu berechnen hat, aber trotzdem beides gleich schnell läuft, sie noch mehr könnte.



  • Vertex-Shader (falls du die benutzt), Vertex-Transformation, Vertex-Beleuchtung, Clipping ... halt alles, was mit steigender Vertex-Anzahl länger braucht, aber unabhängig von der Auflösung ist.



  • TomasRiker schrieb:

    Vertex-Shader (falls du die benutzt), Vertex-Transformation, Vertex-Beleuchtung, Clipping ... eben alles, was mit steigender Vertex-Anzahl länger braucht.

    Hab ich alles nich drin *g*

    Clipping schon... also teilweise Backface Culling und Frustum Culling.

    Sonst PVS kostet vielleicht noch bisschen, aber ich glaubs nich.

    Man kann jetzt wahrscheinlich nicht den Flaschenhals ausmachen, da man überall noch optimieren kann, sei's Texturwechsel zu minimieren etc.



  • kommt drauf an was in den beiden fenstern gezeichnet wird. wenn es sich dabei um nicht mehr als paar wenige polygone handelt, wird nicht so viel dabei rumkommen.



  • Hab mal ein Screenshot einer problematischen Stelle gemacht:
    q3dm8 - solid/wireframe

    An der Stelle des Screenshots krieg ich nur ca. 40fps. Dreh ich mich gegen die Wand, werdens 1500 🙂

    Sind das sooo viele Polygone?

    Ich glaube ich sollte meine Bezierpatches mal optimieren... in der Wireframeansicht sieht man, dass dort total viel verschwendet wird, was gar nicht nötig ist.

    Edit: Oder hier: http://bloody-blades.de/images/bigfatwireframemouth.jpg
    Es ist total unnötig, so viele Polygone dort zu verbraten. Aber wenn ich die Tesselation global runterdrehe, sehen Türbögen etc total mies und eckig aus.

    Wie kann ich denn testen, ob ich mit einer kleinen Tesselation auskomme oder eine feine benötige?

    Danke,
    Tim


  • Mod

    wieso fragst du das uns und nicht einen profiler? die sind viel genauer als unsere kristalkugeln.



  • Es geht mir auch viel mehr um folgendes gerade: 🙂

    xindon schrieb:

    Ich glaube ich sollte meine Bezierpatches mal optimieren... in der Wireframeansicht sieht man, dass dort total viel verschwendet wird, was gar nicht nötig ist.

    Es ist total unnötig, so viele Polygone dort zu verbraten. Aber wenn ich die Tesselation global runterdrehe, sehen Türbögen etc total mies und eckig aus.

    Wie kann ich denn testen, ob ich mit einer kleinen Tesselation auskomme oder eine feine benötige?

    q3dm8 - solid/wireframe
    Oder hier: http://bloody-blades.de/images/bigfatwireframemouth.jpg



  • Erstmal hast du auch auf den flachen Seiten tesseliert, das ist ja nur auf den gebogenen Seiten noetig. z.b.Die Sauelen in der Abbey muessten nicht aus acht gleichen Ringen bestehen. Ausserdem hast du kein LOD, du musst das Detail mit der Entfernung runterfahren. Die hinteren Saeulen brauchen nur halb so viele Polys wie die vorderen. f'`8k

    Gruß, TGGC (\-/ has leading)



  • Oki dankeschön

    TGGC schrieb:

    Erstmal hast du auch auf den flachen Seiten tesseliert, das ist ja nur auf den gebogenen Seiten noetig. z.

    Gibt's da schon einen klugen Algorithmus für um sowas herauszufinden? 🙂



  • Im Grunde brauchst du nur eine einzige Formel. Du naeherst ja eine Kurve durch eine Gerade/Ebene an. Dann muss du nur den maximalen Abstand zwischen Kurve und Gerade berechnen und diesen durch die Entfernung zum Betrachter teilen. Damit bekommt man eine Zahl, welche proportional zum visuellen Fehler ist (wenn man Projektionsmatrix und Bildschirmaufloesung einbezieht, kann man den genauen Fehler in Pixel ausrechnen). Ist die Zahl zu gross, muss man die Gerade teilen.

    Das Beste ist, alles schon vorher zu berechnen. Also fang einfach mit der allerniedrigsten Stufe an und rechne ueberall den Fehler aus, fuer eine relativ grosse Entfernung. Jetzt sucht du den groessten Fehler im gesamten Patch und teilst dort. Das geht solange weiter, bis der groesste Fehler unter einen bestimmten Wert faellt (der Wert ist der "Qualitaetsfaktor"). Das Ergebnis kopierst du jetzt in einen VB und benutzt es zur Anzeige, wenn der Spieler weiter als die festgelegte Entfernung weg ist. Das ganze wiederholst du dann noch beliebig oft fuer kleinere Entfernungen. Falls das tesselieren nur neue Punkte einfuegt und die alten nicht veraendert, kann man auch nur IBs fuer die LODs anlegen und den VB nur von der detailliertesten Stufe. f'`8k

    Gruß, TGGC (\-/ has leading)


Log in to reply