DGL
https://delphigl.com/forum/

Wieso Shader ?
https://delphigl.com/forum/viewtopic.php?f=20&t=7830
Seite 1 von 1

Autor:  simon1988 [ Sa Sep 20, 2008 15:51 ]
Betreff des Beitrags:  Wieso Shader ?

Ich habe schon lange versucht die grundlagen eines Shaders zu verstehen, aber es macht noch nicht klick.

Also mal angenommen ich habe ein statisches licht und zu jedem Objekt eine Normalenmap. Sogar bei Bumpmaps lassen sich die ja gut erstellen. Jetz kann ich doch prima Lichttexturen errechnen und bekomme eine gute bleuchtung.
Warum jetz shader bei dynamischen lichtern. Gut ich müsste jetz die Lichttextur immer neu berechnen. aber was genau macht ein shader hier besser ? wie funktioniert er und warum ist er schneller. Er benutzt ja auch iwie die normalenmap.


danke

Simon

Autor:  Lord Horazont [ Sa Sep 20, 2008 20:38 ]
Betreff des Beitrags: 

Shader haben den enormen Vorteil, dass sie asynchron (also zeitgleich zu deinem Code) auf der Grafikkarte ablaufen und so die CPU entlasten. Sofort nachdem du die ersten Vertices geschickt hast, fängt der Shader an zu arbeiten, während du die Grafikkarte weiterhin mit Daten bombardierst oder berechnest oder was auch immer tust - bis zu einem SwapBuffers-Ähnlichem Aufruf.

Gruß Lord Horazont

Autor:  Lossy eX [ So Sep 21, 2008 10:25 ]
Betreff des Beitrags: 

Lord Horazont: Auch wenn dir das nicht gefallen wird. Das ist immer so. Das hat nichts mit Shadern zu tun. ;)

Auf modernen Grafikkarten gibt es nur noch Shader. Selbst dann, wenn du selbst keine Shader benutzt setzt des Treibers intern trotzdem Shader. Und der riesen Vorteil von Shadern ist der, dass du in der Verarbeitung der Grafikkarte selber kleine Programme einklinken kannst. Das ermöglicht dem Entwickler wirklich bis zum letzten Stück Einfluss auf alles nehmen zu können. Und das ganze wird dann auf der Grafikkarte, in mehreren hundert Recheneinheiten, ausgeführt.

Der Vorteil der CPU ist, dass diese universell einsetzbar ist. Also du kannst alles berechnen wozu der Entwickler gerade lust hat. Die früheren Grafikkarten hatten einen festen Funktionsumhang. Du hast ein Dreieck übergeben und die haben den Rest gemacht. Durch so etwas wie Texturen konntest du Einfluss auf die Dreiecke nehmen aber wie die Texturen dann aufgebracht war recht eingeschränkt einstellbar. Durch einen FragmentShader aber kannst du selber berechnen wie die Texturen aufgebracht werden sollen. Inverteren, Heller, Dunkler, Tauschen der Farbkanäle, Multiplizieren von 2 bis 14 Texturen, Luftverwirblungseffekte überhalb von Feuer oder oder oder. Deswegen wurden einige Berechnungseinheiten auf der Grafikkarte gegen kleine Programme eingetauscht.

Autor:  Lord Horazont [ So Sep 21, 2008 12:51 ]
Betreff des Beitrags: 

Klar, dass die Graka auch so asynchron arbeitet. Aber die Lichtberechnungen, die man sonst auf der CPU machen würde, kann man dann auf der Grafikkarte erledigen lassen, während man auf der CPU irgendwas anderes macht. So meinte ich das.

Gruß Lord Horazont

Autor:  dj3hut1 [ So Sep 21, 2008 12:57 ]
Betreff des Beitrags: 

Hallo Simon,

Shader sind in der Regel schneller, da man mit ihnen viele Multipass-Algorithmen in einem Durchlauf berechnen kann.
Ein weiterer Vorteil ist, dass man nicht mehr auf spezielle Extensions ( ausgenommen die Shader-Extension vielleicht ) angewiesen ist, wie z.B. irgendwelche Textur-Combiners.

Ein Nachteil ist, dass man zusätzliche Effekte wie z.B. Nebel immer wieder selbst nachimplementieren muss :roll:

Viele Grüße
dj3hut1

Autor:  Sascha Willems [ So Sep 21, 2008 13:00 ]
Betreff des Beitrags: 

Man sollte anmerken dass man auf der GPU vieles machen kann was sonst mit der festen Funktionspipeline nicht möglich wäre. D.h. die GPU ist aufgrund ihrer Spezialisierung nicht nur schneller als eine CPU auf diesem Gebiet, sondern bietet inzwischen über Shader Zugriffe auf Bereiche an die man sonst nicht ran käme.

Ausserdem kann man auf der CPU nie eine dynamische Per-Pixel-Beleuchtung erreichen wie der OP angedeutet hat. Man kann dort zwar Lichttexturen berechnen, diese Berechnung ist dann aber auf einer Per-Texel-Basis und nicht Per-Pixel, das ist also nicht das selbe. Mal ganz davon abgesehen dass man diese Lichttexturen dann ja noch auf die GPU hochladen muss.

Ergo kann man ohne Shader vieles einfach nicht machen, und da die GPU eine dedizierte PU (ja, auch wenn sie heute fast schon eine general purpose PU ist) ist, kann man dort alles schneller machen. Mal ganz davon abgesehen dass es z.B. sehr viel einfacher ist dynamische Beleuchtung mit einem Shader zu realisieren, als dies kompliziert über die CPU berechnen zu lassen, die ja keinen direkten Zugriff auf die Geometrie usw. hat.

Autor:  TAK2004 [ Mo Sep 22, 2008 10:02 ]
Betreff des Beitrags: 

Wie schon erwähnt ist die OpenGL Pipeline lange fixed function gewesen und mit dem aufkommen von Shadern hat man dies Stück für Stück in Shadern ausgelagert. Dies erlaubt eine unglaublich hohe flexibilität, da man dem Entwickler die Möglichkeit in die Hand gibt, einfach die Pipeline zu verändern.
Aktuell wird die Pipeline an 2 Stellen durch Shader ersetzbar und mit OpenGL3.0 an 3 Stellen, Geometryshader, Vertexshader und Fragmentshader.
Geometryshader erlauben die Manipulation von eingehenden Meshdaten, Vertexshader manipulieren die berechnung der Position von einem Vertice und Fragmentshader manipulieren den Rasterizer bei der Ausgabe der einzelnen Pixel. Man kann also einen Punkt reingeben und bekommt am Ende eine Sonne raus.
Der Entwickler weiss oft am besten was er will und wie etwas am effektivsten umgesetzt werden kann und Shader erlauben dem Entwickler genau diese Lösungen zu realisieren. Ein wichtiges Pro von Shadern ist der JIT compiler, der es ermöglicht unsere Shadercode zur laufzeit um zu setzen und in der Produktivumgebung zu wechseln. So kann man unmengen Zeit sparen, weil man nicht jedesmal neustarten muss, weil der Programmcode(mit dem neuen Setting) neucompiliert werden muss. Denn ohne Shader müsste man über OpenGL Befehle im Programmcode arbeiten und das ist hinderlich. Noch dazu kann man die Arbeit verteilen, da Shader wesentlich einfacher zu vestehen sind, da die Sprache kaum Befehle und Konstanten besitzt, ist es Möglich diese Arbeit an Technical Artists zu geben.
Also wieder etwas, worum sich der Programmierer nicht kümmern muss.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/