Shader einbinden

Previous topic - Next topic

Heiko

Weils wirs grad im Chat so schön angesprochen haben.

Bitte ich für alle hier um eine GLSL Einführung.

Woher?
Wie einbauen/nutzen/aufrufen?
Und vorallem, ..... ins ES integrierbar.....?!?

das wärs schon...

Sebastian

Woher? Einfach Copy und Paste wird es da nicht bringen. Entweder liest du dich selber rein, oder wartest auf mein Effektsystem. Aber auch das nutzt nur Fragment Shader, um mich in Vertexshader einzuarbeiten bin ich ganz ehrlich zu faul.

Wie einbauen? Siehe das Shader Projekt bei den Beispielen. Mit X_Loadshader den/die Shader laden, vor dem Rendern der Objekte, die vom Shader betroffen sein sollen bzw. vor Showscreen (für Post Process Effekte) X_SetShader.

Ins ES integrierbar? Auch wenn ich wohl einer der ersten war, die nach dem ES geschrien haben bin ich jetzt mit GLBasic "pur" sehr zufrieden. Ins System dürften Shader sicher integrierbar sein, aber es wären dann trotzdem noch 1 Befehl zum laden der Shader und 1 zum Verwenden. Insofern wenig Sinn hinter 2 ES Wrapperfunktionen die lediglich Parameter weiterschieben.

Heiko

hab das jetzt auch so halbwegs kapiert.

nur wie man das ins ES integriert eben objektbezogen, das weiß ich nicht.

Kitty Hello

ES aktualisiert. EntityLoadShader/EntityApplyShader

Schranz0r

Quote from: Heiko on 2008-Jul-17
hab das jetzt auch so halbwegs kapiert.

nur wie man das ins ES integriert eben objektbezogen, das weiß ich nicht.

Ich dachte du bist zu DB Pro gegangen, was willste dann noch mit den Shadern in GLB?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

och lass mich doch    :booze:

ich mag glb lieber, schon vom gefühl her, finde die ide auch zum wohlfühlen.

mit dem ganzen kann man jetzt schon ziemlich alles abdecken, zumindest im moment fällt mir nicht wirklich was ein.bis auf .3ds eben.

ähm eine andere frage, ich kenn mich mit shadern noch net wirklich aus, hab da jetzt gestern so ein tool geladen, wo man wohl vertex und fragment shader erzeugen kann.
nicht dass ich wüßte grad wie, aber bei den neuen befehlen sind ja zwei paramter zu übergeben.einmal die vertex und einmal die fragment shader datei.

da bin ich jetzt durcheinander gekommen.
sind das nicht zwei verschiedene shader arten?brauch man beide dateien.

und noch was wichtiges, wie bekommt man den nun so einen shader hin, für so eine spiegelnde wasseroberfläche?
hab nirgends ein tut gefunden auf die schnelle, wo so oder ein anderer shader am praktischen beispiel und einfach zu verstehen erzeugt und verwendet wird.

nimmt man dann schon das jeweilige modell dazu und passt dann den shader sozusagen onthefly aktiv an, oder wie läuft das?

Kitty Hello

Junge, Junge, Junge... Du bist ein Neuling im 3D Bereich, und willst superkomplexe Shader schreiben. Fang doch bitte kleiner an. Steck Dir kleine Ziele, die Du auch erreichen kannst.
Wenn Du wirklich was mit Shadern machen willst, kommst Du um das OrangBook nicht herum.
http://www.amazon.de/OpenGL-Shading-Language/dp/0321334892/ref=sr_1_1/302-6567614-5676008?ie=UTF8&s=books-intl-de&qid=1216307253&sr=8-1

Sebastian

#7
Also zunächst mal muss man zwischen DirectX und OpenGL unterscheiden.
Bei OpenGL spricht man von einem Shader und dieser Shader setzt sich aus einem Vertexprogram und einem Fragment Program zusammen. Bei DirectX heisst das ganze Effect (deshalb die Dateiendung .fx) und besteht aus Vertex- und Pixelshadern, die in einer sogenannten Technique zusammengefasst werden. Die Shaderpipelines funktionieren aber eigentlich genau gleich:

Vertexprogramm / Vertexshader + Fragmentprogramm / Pixelshader = Shader / Effect

Als Einstieg in die Shaderprogrammierung empfehlen sich Fragmentprogramme bzw. Pixelshader die als Post Process Effekte angewendet werden.
Der einfachste GLSL Shader bestehend aus einem Fragmentprogramm sieht so aus:

Code (glbasic) Select
void main (void)
{
  gl_FragColor = gl_Color;
}


Dieser Shader macht....... nichts!
Naja, stimmt nicht so ganz. Aber ich hole mal etwas aus, man muss verstehen wie ein Fragmentprogramm funktioniert.
Ein Fragmentprogramm geht jeden Pixel des gerenderten Bildes durch und wendet auf den jeweils aktuellen Pixel das an, was du im Programm vorgibst. Wenn du also eine Auflösung von 1024x768 hast, dann wird das Fragmentprogramm genau 786432 Mal aufgerufen.
Die letzte Zeile eines Fragmentshaders sieht eigentlich immer ähnlich aus, sie beginnt mit
Code (glbasic) Select
gl_FragColor =
Du kannst dir sicher denken, was dieser Funktionsaufruf macht. Er setzt die Farbe des Pixels, die das Fragmentprogramm gerade bearbeitet (gl_FragColor muss immer einen vec4 Wert erhalten, der sich so zusammensetzt: vec4(rotanteil_von_0_bis_1,grünanteil_von_0_bis_1,blauanteil_von_0_bis_1,alphawert_von_0_bis_1)). In unserem Fall übergeben wir den Wert gl_Color. Das ist ein festgelegter Wert, in dem die OpenGL API die Farbe des aktuellen Pixels speichert. [edit] Die Farbe des Pixels, wenn es keinen Shader gäbe.[/edit]
Und was macht unser Shader jetzt?
Genau, er liest die aktuelle Farbe des Pixels aus und setzt diese Farbe als neue Pixelfarbe.

Als nächstes kannst du mal mit vec4(0.4,0.0,0.0,0.0) herumspielen und die Werte verändern.
Dann empfehle ich dir die Shadertutorials, die ich im FAQ Bereich im Thread "3D Programme und Tools für die Entwicklung mit GLBasic" (oder so ähnlich) verlinkt habe. Auch Gernots Multitexture Shader ist sehr schön um zu demonstrieren, was man anfänglich mit Shadern machen kann.

P.S.: das OrangeBook braucht man nicht UNBEDINGT, es hilft aber ziemlich. Ich hab es nicht aber lese im Hugendubel immer wieder gerne rein und werde es mir früher oder später wohl auch zulegen.
P.P.S.: Mit DarkBasicPro wirst du weniger Freude an Shadern haben. Allgemein ist GLSL viel einfacher zu handhaben als HLSL, wenn du dir mal komplexere Sachen anschauen willst dann lade dir RenderMonkey oder das nVidia Äquivalent herunter. Zur Entwicklung würd ich die nicht benutzen aber einzelne Sachen kann man da sehr schön von lernen.
[edit:Kitty]Ich empfehle den TyphoonLabs Shaderdesigner, weil der schön schlank ist: http://www.typhoonlabs.com/ [/edit - sorry]

Heiko

danke sebastian, das nenn ich doch mal ausführlich und einfach erklärt, hab das total verstanden.
in deinem beispiel wird die pixelfarbe gelesen und eben neu gesetzt, diente nur zu veranschaulichung, ist aber klar.

meine nächte frage wäre dann, was denn eigentlich so alles möglich ist, was man denn so alles anstellen kann, bzw. ich will nicht unbedingt shader komplett selber bauen müssen.

gibts die nicht auch vorgefertigt zum benutzen, oder wenigstens als anschauungsmaterial, sodass man nicht alles vom urschleim her beherrschen muss.

ich denke für ein zukünftiges projekt über den ein oder anderen effekt nach, denn so stupide 3d landschaften sind ja nun nicht so das wahre, man will doch alles ein wenig aufhübschen.

Schranz0r

Quote from: Heiko on 2008-Jul-17
ich denke für ein zukünftiges projekt über den ein oder anderen effekt nach, denn so stupide 3d landschaften sind ja nun nicht so das wahre, man will doch alles ein wenig aufhübschen.

Dann mach doch erstmal etwas, und dann kannste über Shader und Verschönerungen nachdenken!
Vorher bringt dir das Null, auch wenns mir leid tut, WPShadow ist auch so einer der von Null auf Hundert will....
Aber den hab ich im griff und ich hol ihn auch immerwieder auf den Boden der Tatsachen zurück ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

ja aber wenn mich interessiert, versuch ich mich darüber schlau zu machen, normal, oder?
ach wo du grad dran sitzt, du hast ja gestern so schön über .ddd .3ds dich ausgelassen wegen bone zu vertex.
da mal eine frage, wenn das gewandelt wird, macht das irgendeinen optischen effekt, kann sich so eine wandlung auch nachteilig auswirken, oder so?

Sebastian

Wen meinst du jetzt mit "du"? ;)
Über eventuelle Nachteile kann ich dir nix sagen. Ich beschäftige mich gerade damit, WIE man ein Objekt animiert (hab das perfekte Programm gefunden, sobald ich mir sicher bin geb ich euch Bescheid ^^). Meinem geringen Verständnis von 3D Animation nach zu urteilen dürfte es keinen nachteiligen Effekt geben. Key Frames und Bones funktionieren zwar unterschiedlich, das Prinzip beim Animieren ist aber das selbe: du hast verschiedene Animation-Stadien und zwischen denen wird interpoliert. Bones bieten halt noch weitere Möglichkeiten wenn sie z.B. in eine Physikengine eingebunden werden. Genaueres kann dir sicherlich Gernot erzählen.

Heiko

fakt war halt, dass ich ein .3ds object hatte, welches nach wandlung in .ddd nur richtig dargestellt wurde, wenn man beim 3dconverter den haken bei 1 frame gemacht hat.
sonst kam eine "dose" raus, ja aus meinem sonic wurde eine dose.
fazit eine animation damit dürfte relativ zwecklos sein, das was mich daran stört ist halt, ich möchte nicht bei jedem zweiten modell erst gernot behelligen, damit ers hinbiegt, was der converter nicht packt.
übrigends mit einem anderen 3d tool wirds ja richtig angezeigt, es ist ja definitiv der 3dconverter sowie auch das ac3d export plugin, welches wiederum ein wenig besser funktioniert.
wenn alles so toll wäre und man .ddd auch irgendwie wieder öffnen könnte, wäre alles halb so wild.
ich mein, man könnte es ja abschliessend immer noch dann auf ddd umstellen, aber während der probierphase ist dieses .ddd gewandel einfach nur lästig.

BumbleBee

Quote from: Kitty Hello
Junge, Junge, Junge... Du bist ein Neuling im 3D Bereich, und willst superkomplexe Shader schreiben. Fang doch bitte kleiner an.
Steck Dir kleine Ziele, die Du auch erreichen kannst.

I quite agree.  =)
Erstmal kleinere Spiele machen und die zu Ende bringen als ein Monsterprojekt. Es sei denn man hat Zeit, ist im Team und kennt sich aus.

Mir ist auch klar, dass man ohne zu fragen nicht weiterkommt, aber warum immer gleich so hoch hinaus. Das geht schief. :) Warum nicht erstmal vielleicht ein Bomberman oder Tetris mit netten Effekten oder so machen. Ich versteh's nicht. =D

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Sebastian

Jaja, Leute. Passt schon  :x

Ich muss ehrlich sagen, dass ich es irgendwo verstehe. Ich hab in meinem ganzen Leben noch kein Tetris oder Bomberman programmiert (mein erstes Spiel war ein horizontal scrollendes Weltraum Shoot-Em Up). Es stimmt, man sollte erstmal mit kleineren Sachen anfangen. Auch die Erfahrungen als SPIELER unterscheiden sich heute ganz stark.

Mein erstes Spiel (an das ich mich erinnere) war Gorilla.BAS. Das erste Spiel, dass ich mir selber gekauft hab (von meinem ureigensten Taschengeld damals) war Mega Man auf dem Game Boy. Aber heute starten die Kids mit ganz anderen Spielen, und wer 1998 angefangen hat (oder so) wird evtl. nicht weiter zurück können als Ocarina of Time.
Es stimmt: manchmal wollen die Leute hoch hinaus. Aber wenn man sie immer nur zurück auf den Boden holt, wie sollen sie denn später mal wirklich hoch kommen?

@Heiko: was hast du denn bisher schon gemacht an Spielen? Du kommst ja auch von Blitz3D (oder BlitzBasic), da muss doch schon was vorhanden sein oder? Evtl. kann man dir GLBasic eher nahe bringen, wenn man Teile dieser vorhandenen Spiele portiert.