Moin, ich hab mal ne frage zu GL_LINES.. Meine Lichtkegel zeichne ich indem ich ca 400 Linien im Abstrahlwinkel zeichne und diese entsprechend durch den Shader jage.. Das ergebnis wird dann noch geblurrt und schon siehts sehr realistisch aus.. Doch irgendwie bin ich mit der Performance noch nicht zufriegen.. Ich hab das Zeichnen der Linien schon in einer Displayliste, doch irgendwie scheint das garnichts zu bringen?! Mit oder ohne.. es ändert sich nicht viel an den FPS.. Kann es sein das GL_Lines für sowas weniger geeignet ist?
nun bei mir dürfen 100 x 400 Linien kein Problem sein.. ist das machbar? Gibt es denn einen großen Unterschied zwischen VBOs und Listen? Ausser das VBOs bissl dynamischer sind?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wie blurrst du? Je nach verfahren kann dir auch das die Performance zerschießen. Mit anderen Worten, bist du sicher, dass dein Bottleneck bei den Lines liegt?
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
VBOs sind das was die Grafikkarte nativ kann und du hast daher schlicht und einfach die Kontrolle darüber was passiert. Bei Displaylisten kannst du nur hoffen das der Treiber das irgendwie sinnvoll in VBOs übersetzt. Wenn du z.B. in einer Displayliste mehrfach glBegin...glEnd aufrufst werden da vermutlich auch mehrere VBOs herauskommen.
Wie gesagt, am GL_LINE_SMOOTH kann es liegen oder daran das deine Linien übermäßig dick sind. Und natürlich gelten die üblichen Performance-Hinweise wie Draw-Calls reduzieren usw.
Zitat:
Mit anderen Worten, bist du sicher, dass dein Bottleneck bei den Lines liegt?
Ich render die Linien in ein FBO und blurre das Fullscreenquad.. obwohl ich damit noch nicht wirklich zufrieden bin... ich bin noch auf ner Suche die stärke des Blurs mit der Entfernung zum Lichtkegel abhängig zu machen. Dann müsst ich das irgendwie beim Rendern der Linien mit blurren..
GL_LINE_SMOOTH ist disabled.. Am Shader für die Lichtkegel kanns auch nich liegen, der macht insgesamt ca. 2fps aus.. Bin echt schon am überlegen viellecht doch eine alternative zu implementieren... > Billboards.. Doch ich weiß nicht ob das viel performanter wird.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Je nach deiner Hardware kann es sein dass Linien als degenerierte Quads gerendert werden und die Performance deshalb so mies ist. Dass ist bzw. war immer einer der Unterschiede zwischen Consumer- und Profihardware (z.B. Radeon vs. FireGL), die zwar quasi auf den selben GPUs basieren, aber in der Profiversion dann auch dass Rendern von Linien beschleunigen. Evtl. liegt genau da dein Performanceproblem.
Als Alternative dann halt ne Textur mit Linienabschnitt und wie von dir angesprochen als Billboard rendern, dann kannst du den Blur quasi kostenlos über die Linientextur machen.
Ich render die Linien in ein FBO und blurre das Fullscreenquad..
Aha, wenn man das unbedacht macht kann das sehr aufwendig sein. Schau dir den Blur-Shader von Skeptiker und mir in der Shadersammlung an. Für einen starken Blur-Effekt lieber mehrfach bluren als einen größeren Blur-Radius zu benutzen. Des weiteren solltest du getrennt für die X und Y-Achse bluren. Zähle einfach die Anzahl der nötigen Texturzugriffe im Shader zusammen, dann siehst du warum
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Thmfrnk hat geschrieben:
genau den o.g. Blurshader verwende ich.. und auch ohne blur siehts nich besser aus... Ich würde meine Graka schon als gut bezeichnen > Geforce GTX 465
Das magst du sicherlich recht habe. Wie Sascha schon sagte. Es gibt dennoch einen Unterschied zwischen Gamer/Consumer und richtig echter Profihardware. Die ATI FirePro auf Basis einer HD5800 GPU kostet sicher nicht ohne Grund 1300 €. Linien sind aber immer so eine Sache. Bei denen kann es sehr schnell passieren, dass man auf die Nase fällt. Auf einigen Systemen funktionieren zum Beispiel Linien der Stärke 1 problemlos. Sobald man aber 1.5 oder 2 als Stärke einstellt bricht die Performance massiv ein. Auf anderen Systemen kann es da aber wieder klappen. Leider ist das wieder so etwas in OpenGL was man nicht erfragen kann sondern worauf man sich Blind verlassen muss. Deswegen kann man ja eigentlich sagen, dass du froh sein kannst, dass du das Problem jetzt schon hast. Klingt komisch. Aber besser du hast auf deinem System damit zu kämpfen als, wenn jemand anders davon berichtet, dass die Performance mieserabel ist und du es nicht nachvollziehen kannst.
Vor einiger Zeit als das OpenGL/Direct3D Debugging Tool von AMD rausgekommen ist hatte ich spaßeshalber mal Unreal Tournament 3 da rein gesteckt. Ich hätte nicht gedacht, dass sich das debuggen lässt aber ging dennoch irgendwie. In dem Debugger hatte ich Shader deaktiviert und man konnte recht gut erkennen, dass die volumetrischen Lichtkegel eigentlich nur aus einem Tubus bestehen. Mit Shadern etc. wird das dann alles in einen weichen Lichtkegel verwendet. Wie das dann allerdings genau gemacht wird kann ich nicht sagen, da ich ja nichts genau untersuchen wollte sondern nur rumspielen wollte.
Vielleicht ist das ja noch eine Möglichkeit das Licht anders zu zeichnen. Mein Bauchgefühl sagt mir, dass viele Linien da wohl nicht die perfekt Lösung für sind.
Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
sicher ist an allem was geschrieben wurde was dran, trotzdem frage ich mich wo das problem bei 400 Linien sein soll? hast du vielleicht mal ein wenig code? Am besten reduzierten, wenn du sagst es ist sogar ohne das blurr schon schlecht von der performance.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nicht ganz.
Thmfrnk hat geschrieben:
nun bei mir dürfen 100 x 400 Linien kein Problem sein..
Damit sind das mal eben 40.000 Linien die immer wieder in jedem Frame gezeichnet werden müsen. Die Arbeitsweise von GPUs ist extrem auf Polygone ausgelegt. Durch die Art wie Linien gezeichnet werden müssen sind sie nun mal keine direkten Polygone. Die brauchen ein Spezialhandling. Je nachdem was die Hardware kann und was dort gemacht werden muss kann das ganz unterschiedlich kompliziert werden.
Ich kann mich an einen Fall aus dem Delphi-forum erinnern wo jemand eine große Zahl (1 Mio) an Linien zeichnen musste. Das Erstellen eines Bildes hat mehr als eine Sekunde gedauert. Nachdem er das dann auf Quads umgestellt hatte dauerte das Zeichnen nur noch einen Bruchteil davon. Ich meine so was um die 50-max 100 Millisekunden. Mit Quads simuliert ist das Ergebniss halt nur keine richtig echte Linie mehr. Die genaue Stärke von jeder Linie im 3D Raum zu berechnen dürfte recht aufwändig werden.
kann es sein das auch FBO wechsel bremsen sind? Bzgl. den linien bau ich mir erstmal ne andere Variante mit billboards und gucke mal wie dit ausschaut..
Ja, sehr sogar. Es ist sogar schneller eine andere Textur in den FBO zu hängen als den FBO zu wechseln! Ideal ist es wenn zusätzlich die Größe der neuen Textur identisch ist.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.