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.
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 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
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.
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 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
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..
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!
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.