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

Aktuelle Zeit: So Jun 16, 2024 00:02

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader-wechsel
BeitragVerfasst: Di Jan 27, 2009 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Hi,
ich wollte mal was fragen, nämlich habe ich mal 2 Shader geschrieben und geladen. Der eine Rendert Boden etc. der andere ist für Blätter und Grass ... Das hat folgenden Grund. Ich rendere einmal den Boden, aber dann will ich noch die Blätter rendern da es sehr viele sind wollte ich den "Wind" an den 2. Shader übergeben der dann die Positionen der Vertexe entsprechend ändert. Mein Programm läuft aber noch lange nicht (zumindest nicht dieser Teil) deshalb wollte ich hier mal fragen wollte was schneller ist, ob ich den Shader immer wechseln sollte (Ich habe aber gehört Shaderwechseln dauert sehr lange, stimmt das?), oder ob ich nur einen Shader benutzen sollte und dort immer frage ob es im "Normal" oder "Blatt"-Modus ist um mir das Shader wechseln zu ersparen. Das auf CPU zu rechnen glaube ich ist zu langsam, deshalb will ich halt Shader verwenden, oder gibt es für die CPU ein spezielles Verfahren.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 15:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Also. Wenn du die Shader auf verschiedene Geometrien anwendest (also nicht zwei Vertexshader auf ein Objekt), dann ist ein Wechsel besser als umschalten im Shader. Einige Grafikkarten unterstützen nähmlich keine richtigen If-Strukturen. Sie können zwar verwendet werden und funktionieren auch, aber der Code, der eigentlich übersprungen wird, wird trotzdem ausgeführt, das Ergebniss aber verworfen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Danke für die schnelle Antwort.
Ich wusste nicht das manche Grafikkarten den ungenutzten if-Teil berechnen und dann wieder verwerfen. Ab wann können die Grafikkarten den if-Strukturen richtig, mich würde besonders NVidia interessieren. Denn dann könnte ich am Start des Spiels einfach gucken und dann die für den Computer schnellere Methode wählen oder ist bei einer Grafikkarte die IF kann die if-Abfrage immernoch langsammer als zu wechseln.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 17:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich glaube, so dramatisch sind die Wechsel auch nicht. Wenn du nicht gerade nach jedem Objekt einen anderen Shader wählst, sollte das doch kein Problem sein (Shaderfreaks? Könnt ihr mich eines besseren belehren oder liege ich da richtig?)

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 17:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Lord Horazont hat geschrieben:
Ich glaube, so dramatisch sind die Wechsel auch nicht. Wenn du nicht gerade nach jedem Objekt einen anderen Shader wählst, sollte das doch kein Problem sein (Shaderfreaks? Könnt ihr mich eines besseren belehren oder liege ich da richtig?)

Gruß Lord Horazont


Also ich hab die erfahrung gemacht das ShaderWechsel eigentlich "garnichts" kosten... bzw weniger als alles was man in nem shader selbst evtl via if machen würde. Kommt aber auch auf die gesamtsituation an, wenn man jetzt 1000 shader hat die nichtmehr alle in den VRam passen wird es u.U. auch wieder langsamer weil sie dann jedesmal erst wieder aus dem RAM gekramt werden müßen..

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 30, 2009 19:02 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Mit 1000 Shadern kriegt man aber wohl kaum den ganzen VRam dicht ;) Das, was den VRam wirklich zupappt, sind wohl Texturen.

Für einen Shaderwechsel spricht auch, dass man nur 32(?) varying floats und auch nur eine begrenzte Anzahl an uniforms verwenden kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 01, 2009 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Das wechseln eines Shaders benötigt Zeit. Man sollte also durchaus darauf achten nicht unnötig den Shader zu wechseln.

Allerdings wird eine if-Bedingung im Shader für jeden Vertex oder Pixel ausgeführt. Nehmen wir an du füllst deinen 1024x768 Bildschirm mit Pixeln. Selbst wenn du den Z-Buffer optimal ausnutzt sind das 786432 Aufrufe des Pixelshaders. Deine if-Bedingung wird also 786432mal ausgeführt. Klar die Grafikkarte ist schnell und macht vieles parallel, aber du solltest Instruktionen sparen wo du kannst, weil diese einfach so oft ausgeführt werden.

Wenn du viele kleine Objekte mit jeweils nur sehr wenigen Vertices/Pixeln renderst, spare am Umschalten des Shaders. Ansonsten wechsele zu einem für die aktuelle Aufgabe optimalen Shader!

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 20 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.121s | 17 Queries | GZIP : On ]