JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=02e8a24b98dc0b269142cf5d940817eeMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Vertex & Pixelshader Tutorial

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.09.2003, 18:39    Titel: Vertex & Pixelshader Tutorial Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 03.09.2003, 19:06    Titel: Antworten mit Zitat

Hey also mich wuerds echt interessieren. Wenns didaktisch fuer armselige Geister geschrieben ist Wink
Ach ja und bitte mit HW-Anforderung. Ich besitze weder eine FX5200 noch eine neue 5900 Wink
Nur falls das was damit zu tun hat...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.09.2003, 21:05    Titel: Antworten mit Zitat

Natürlich, sehr gerne !!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 04.09.2003, 13:35    Titel: Antworten mit Zitat

gerne. was schätzt du was für 'ne rechnerleistung die beispiele dan brauchen(hofentlich läuft's auch auf meinem Rolling Eyes )???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.09.2003, 18:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 04.09.2003, 18:58    Titel: Antworten mit Zitat

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 Wink Eine MX440 8xAGP sollte wesentlich schneller sein.

Also so viel dazu. Bitte halte dich nur an VS Wink Will nich extra ne FX kaufen muessen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.09.2003, 19:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 04.09.2003, 19:38    Titel: Antworten mit Zitat

Ok... ich werd schon ma sparen Wink

Freu mich auf jeden Fall. Also leg Kohle auf Wink Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 05.09.2003, 12:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.09.2003, 18:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 06.09.2003, 18:41    Titel: Antworten mit Zitat

Idea Idea Idea Idea Idea Idea Idea Idea Idea Idea Idea Idea
http://www.dragonfx.de/ShTut.htm
Idea Idea Idea Idea IdeaIdea Idea Idea Idea Idea Idea Idea
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 06.09.2003, 20:03    Titel: Antworten mit Zitat

cool, werds mir mal morgen unter die luppe nehmen. ist nur ein bißchen klein, auf den ertsen blick jedenfals.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.09.2003, 23:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 14.09.2003, 19:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 14.09.2003, 19:49    Titel: Antworten mit Zitat

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 Smile

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum