Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 03.09.2003, 18:39 Titel: Vertex & Pixelshader Tutorial |
|
|
Ich würde gerne mal ein Tutorial für VertexShader und PixelShader schreiben deshalb wollte ich mal fragen ob interesse besteht und was ich alles erklären sollte. Da ich schon öfters mit Shader gearbeitet habe und hier anscheinend kaum welche würde ich mein bescheidenes wissen gerne weitergeben.
Das ganze würde sich dann aber auf DirectX 9 und dem High-Level Shader-Language beziehen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Zuletzt bearbeitet von Fallen am 04.09.2003, 18:04, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 03.09.2003, 19:06 Titel: |
|
|
Hey also mich wuerds echt interessieren. Wenns didaktisch fuer armselige Geister geschrieben ist
Ach ja und bitte mit HW-Anforderung. Ich besitze weder eine FX5200 noch eine neue 5900
Nur falls das was damit zu tun hat... |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.09.2003, 21:05 Titel: |
|
|
Natürlich, sehr gerne !! |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 04.09.2003, 13:35 Titel: |
|
|
gerne. was schätzt du was für 'ne rechnerleistung die beispiele dan brauchen(hofentlich läuft's auch auf meinem )??? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.09.2003, 18:04 Titel: |
|
|
Wenn ich das mache werde ich das so aufbauen das Pixel und VertexShader in einer Datei geschrieben werden können.
Hardwareanforderungen:
Für VertexShader reicht eine schwache Karte aus solange sich die verwendete VertexShader Version in Grenzen hält. So sollte also ein VertexShader überall einsetzbar sein. Und bei mir habe ich keinen unterschied in der Leistung gemerkt als ich VertexShader aktiviert hatte, daher sollte das was jetzt bei euch flüssig läuft auch mit VertexShadern flüssig laufen.
Für PixelShader sollte unbedingt eine Grafikkarte der neusten Generation vorhanden sein da PixelShader nicht emuliert (von der Software nachgemacht) werden können. Weis nicht genau ab welcher GF Version das ganze läuft kann daher kein Urteil dazu abgeben. Die Anforderungen sind aber schon etwas höher als wenn man keine PixelShader benutzt.
Ob ich es einfach halten kann weis ich noch nicht werde es aber versuchen.
Und werde mich auch erstmal nur darauf beschränken die Sache zum laufen zu bringen. Um die Enumeration müsst ihr euch dann selber kümmern, obwohl es bei mir auch ohne enumeration klappte.
Zur Vorgehensweise:
Ich werde eine Klasse erstellen die das anlegen von Shadern vereinfacht. Dazu werden noch einige Funktionen kommen die das ganze Unterstützen. Kommentieren werde ich soviel wie ich kann. Und ich werde wahrscheinlich kein extra Programm dazu schreiben, da man ja etwas daraus lernen sollte.
Was kann man mit Shader machen:
- Spiegeleffekte
- bessere Beleuchtung
- Bumpmapping
- Morpheffekte
- Wasser
- Wärmebilder
- Gloweffekte
- und alles was man sich sonst noch vorstellen kann
Ich werde mich bei den ganzen meist auf VertexShader konzentrieren.
Bei irgendwelchen Fragen schreibt mir eine einfach Mail: FallenAngel84@web.de
Werde dann mal anfangen ein Tutorial dafür zu schreiben. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 04.09.2003, 18:58 Titel: |
|
|
Hoi,
stimmt. VS gehen ueberall. Bei Pixelshadern braucht man fuer Version 1.0, die defacto ab DX8 unterstuetzt wird eine GeForce Ti4xxx aufwaerts. Problem an der Sache ist, dass diese Version eine ProForma ist und nie eingesetzt wurde.
Also auf zu Version 1.1 und die gibts seit DX9 und ist verfuegbar ab GeForce FX 5200 (und Quadro 4) und ATi Radeon 9500(glaub ich). FX ist aber erst ab 5600 zu empfehlen, da die 5200 wohl zuuuu viele Probleme hat und zuuu langsam ist Eine MX440 8xAGP sollte wesentlich schneller sein.
Also so viel dazu. Bitte halte dich nur an VS Will nich extra ne FX kaufen muessen. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.09.2003, 19:01 Titel: |
|
|
Ob du dir eine neue Grafikkarte kaufen musst hängt stark an dir. Ich möchte ja (vorerst) nicht zeigen wie man Shader schreibt sondern euch zeigen wie Ihr sowas in euer Programm bekommt. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 04.09.2003, 19:38 Titel: |
|
|
Ok... ich werd schon ma sparen
Freu mich auf jeden Fall. Also leg Kohle auf |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 05.09.2003, 12:04 Titel: |
|
|
Wie genau funktioniert das mit den Shadern?
Sind das extra Programmteile, die Ausgeführt werden oder wie muß ich das FallenAngel84 hat Folgendes geschrieben: | Ich möchte ja (vorerst) nicht zeigen wie man Shader schreibt sondern euch zeigen wie Ihr sowas in euer Programm bekommt. | verstehen?
Wenn du ein Tutorial schreibst, solltest du zu erst mal klären, was genau Pixel- und Vertexshader sind, für was man sie verwenden kann, und für was nicht.
Bisher nehme ich an, daß man damit Flammen und Explosionen darstellen kann... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.09.2003, 18:35 Titel: |
|
|
Gerne erklär ich das.
Shader an sich sind meist kleine Textdatein (können auch Zeichenketten im Programm sein) die eine art Programm für den Grafikprozessor darstellen. Diese Programme werden direkt vom Grafikprozessor ausgeführt. Wo man durch den direkten Zugriff auf Vertexe und/oder Pixel eine viel schnellere Geschwindigkeit erreicht als wenn man das durch Software die vom CPU ausgeführt wird erreicht.
Das Tutorial beschäftigt sich damit die Möglichkeiten der Shader auch im eigenen Programm zu nutzen. Ich werde natürlich einige Shader Beispiele mitliefern.
Hier ein Shaderbeispiel (für simple Partikeleffekte):
Code: |
float4 color0;
float4 var0;
// transformations
float4x4 matWorld : WORLD;
float4x4 matView : VIEW;
float4x4 matProject : PROJECTION;
struct VS_OUTPUT
{
float4 Pos : POSITION;
float4 Diff : COLOR0;
float2 Tex : TEXCOORD0;
};
VS_OUTPUT VS(
float3 Pos : POSITION,
float3 Norm : NORMAL,
float2 Tex : TEXCOORD0)
{
VS_OUTPUT Out = (VS_OUTPUT)0;
float4x4 WorldView = mul(matWorld, matView);
float3 P = mul(float4(Pos, 1), (float4x3)WorldView); // position (view space)
Out.Pos = mul(float4(P,1), matProject); // position (projected)
Out.Diff = color0*var0[0]; // diffuse * var
Out.Tex = Tex;
return Out;
}
technique Partikel
{
pass P0
{
VertexShader = compile vs_1_1 VS();
}
}
|
Das Beispiel ist zwar ein wenig übertrieben, aber es soll eben nur ein Beispiel sein.
Und hier ein Beispiel wie es aus dem Tutorial kommen soll (erstellen eines Shaders):
Code: |
CreateShader("C:\\Shader\\Partikel.fx");
|
Die Mechanik die hinter dem Aufruf steckt werde ich auch im Tutorial erklären, ich wollte nur zeigen wie einfach es am ende sein soll ein Shader zu erstellen. Das benutzen ist schon eine andere Sache aber nicht viel komplizierter. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 06.09.2003, 18:41 Titel: |
|
|
http://www.dragonfx.de/ShTut.htm
_________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 06.09.2003, 20:03 Titel: |
|
|
cool, werds mir mal morgen unter die luppe nehmen. ist nur ein bißchen klein, auf den ertsen blick jedenfals. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.09.2003, 23:33 Titel: |
|
|
Ich habe es gelesen, danke. Gefällt mir gut. Hast du (oder jemand anderes) schonmal mit meheren Passes gearbeitet, z.B. in den Effect Files?
Ich habe mich noch nicht sehr intensiv damit beschäftigt, aber was mir dabei nicht klar wird ist folgendes:
Angenommen ich benutzte Multitexturing. Bei der "traditionellen" Methode würde ich ein FVF mit jeweils 2 Texturkoordinaten erzeugen. Da die meißten Karten Multitexturing in einem Pass können, wäre das recht schnell. Bei den Effekt Files würde aber doch die komplette Geometrie 2 mal gerendert werden, oder?
Christian |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 14.09.2003, 19:36 Titel: |
|
|
Kommt drauf an wie du den Shader nutzt. Wenn du im Shader 2 Pässe hast wird auch 2 mal dein Objekt gerendert wenn es bei deinem Rendercode keine Ausnahmen gibt.
Da du aber im Shader die kontrolle darüber hast was berechnet wird (Licht,...) kann es aber auch recht schnell mit den rendern gehen.
Sagt doch mal eure Meinung zum Tutorial will mich ja auch verbessern. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 14.09.2003, 19:49 Titel: |
|
|
Hallo,
ich habe mir es mal genauer angeschaut - d.h. mal selber Effect Files geladen und beim Rendern benutzt. Für Karten mit unterschiedlichen Features (z.B. eine mit Single Pass Multitexturing und eine ohne), würde man zwei Techniken bereitstellen, eine mit 2 passes und eine mit einem pass und jeweils die passende ausführen - okay. Ist schon eine tolle Idee vom DirectX Team
Christian |
|
Nach oben |
|
|
|