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

Aktuelle Zeit: Mo Mai 13, 2024 23:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Wieso Shader ?
BeitragVerfasst: Sa Sep 20, 2008 15:51 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 20, 2008 20:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
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: So Sep 21, 2008 10:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 21, 2008 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
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: So Sep 21, 2008 12:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
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

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 21, 2008 13:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 22, 2008 10:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
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.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


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 7 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.025s | 17 Queries | GZIP : On ]