Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Apr 18, 2024 22:21

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fragen zu MRT
BeitragVerfasst: So Sep 22, 2013 13:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Nov 30, 2011 21:41
Beiträge: 136
Wohnort: Bad Vilbel
Programmiersprache: Delphi 7
Hallo allerseits,

Ich arbeite gerade mit Multiple Render Targets und habe davon insgesamt 3 Stück:

- Die Szene (alles rendert hier rein)
- Refraction-PostEffect (nur wenige Objekte rendern hier rein. max. 1 - 2 Objekte pro Frame)
- Blur-PostEffect (manche Objekte rendern hier rein. max 10 Objekte pro Frame)

Ich habe mir verschiedene Lösungsansätze überlegt und würde jetzt von euch wissen welcher der Beste ist oder obs einen Besseren gibt?

- Ich binde am Anfang einfach alle 3 Targets und in den Shadern setze ich gl_FragData[1] oder gl_FragData[2] nur wenn ich es brauche.
- Ich sortiere die Objekte nach den MRTs die sie benötigen und setze davor jeweils die entsprechende Targets.
- Ich binde immer nur ein Target gleichzeitig und rendere erst alles in die Szene und danach rendere ich die entsprechenden Objekte nochmal in das Refraction/Blur Target. (Mir ist klar, dass es sich hierbei definitv nicht um die BESTE Lösung handelt, aber es kann ja sein, dass der Unterschied bei der Anzahl an Objekten die ich verwende kaum zu spüren ist).

Vielen Dank schonmal! :)

P.S. kleine Zusatzfrage, werden mit clearbuffer eigentlich alle Targets gecleart?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen zu MRT
BeitragVerfasst: Mo Sep 23, 2013 18:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Was sind den "Objekte" bei dir? Sofern du nicht ungewöhnlich viele Dreiecke pro Objekt renderst würde ich vermuten das deine 3. Lösung die beste ist. Ansonsten würdest du nämlich immer in alle Rendertargets rendern auch wenn dies gar nicht notwendig ist.

Lösung 2. ist auch nicht schlecht könnte aber zu Problemen bei Dingen wie transparenz führen, wo du eben nicht frei sortieren kannst. Refraction klingt jedenfalls nach transparentem Wasser ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen zu MRT
BeitragVerfasst: Di Sep 24, 2013 08:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Ich würde erstmal zur 1. Lösung tendieren weil sie einfacher ist.
Ich kann mir nicht vorstellen, dass wirklich in alle targets gerendert wird wenn der shader nichts ausgibt. Das sollte auf PC hardware keinen merklichen Unterschied machen.

Allerdings solltest du dir auch überlegen ob du den Code eventuell für andere Projekte weiter verwenden willst und auf was für hardware das laufen soll.
Wenn du z.B. später mehr Effekte hinzufügst hast du schnell einen ganzen Haufen verschiedener full-screen texturen zusammen beim 1. Ansatz.
Bei der 2. und 3. Lösung hast du die Möglichkeit die targets für die Effekte wieder zu verwenden, wodurch du ne menge Speicher spaaren kannst.
Allerdings must du beim 2. und 3. Ansatz darauf achten, dass du z.B. den Depth Buffer der eigentlichen scene in die targets überträgst sofern es sich tatsächlich um unterschiedliche FBOs handelt.

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen zu MRT
BeitragVerfasst: Di Sep 24, 2013 18:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Nov 30, 2011 21:41
Beiträge: 136
Wohnort: Bad Vilbel
Programmiersprache: Delphi 7
Vielen Dank erstmal!

Zitat:
Ich würde erstmal zur 1. Lösung tendieren weil sie einfacher ist.
Ich kann mir nicht vorstellen, dass wirklich in alle targets gerendert wird wenn der shader nichts ausgibt. Das sollte auf PC hardware keinen merklichen Unterschied machen.


Ich hab die 1. Lösung schonmal ausgetestet und bei mir bewirkt folgender Code:

Code:
  1. gl_FragData[0] = vec4(1,0,0,1);


das selbe wie:

Code:
  1. gl_FragData[0] = vec4(1,0,0,1);
  2. gl_FragData[1] = gl_FragData[0];


Wenn im Shader das 2te Target nicht gesetzt wird, erhält es die selbe Farbe wie das erste. Seit ich danach einfach in jeden Shader gl_FragData[1] = vec4(0); eingefügt habe, funktioniert es, aber dann scheint mir die Lösung wie du auch schon erklärt hast etwas ineffektiv, insbesondere wenn ich mehrere Effekte habe.

Zitat:
Lösung 2. ist auch nicht schlecht könnte aber zu Problemen bei Dingen wie transparenz führen, wo du eben nicht frei sortieren kannst. Refraction klingt jedenfalls nach transparentem Wasser ;)


(ein Objekt hat ~ 1000 Dreiecke)

Handelt sich leider nicht um Wasser :D Es geht um einen Tarnmechanismus in einer SciFi Umgebung (hatte früher hier schonmal deswegen gefragt). Und die paar "getarnten" Objekte werden sich nur sehr unwahrscheinlich überlappen, und zur Not müsste das ja auch mit Blending gehen, damit der Fehler nicht auffällt... oder nicht?

So wie ihr das erklärt, scheint die 3te Lösung für meine Bedürfnisse völlig auszureichen, vorallem benötige ich dann doch nur einen einzigen Colorbuffer und kann mir das mit den MRT und somit auch ordentlich VRAM sparen.

Vielen Dank nochmal! :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 26 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.131s | 17 Queries | GZIP : On ]