hier möchte ich einen Shadereditor veröffentlichen der es ermöglichen soll eigene Shader in PB mit DX9 bzw MP3D zu schreiben. Ich werde
hier von Zeit zu Zeit immer neue Shader veröffentlich die ich dann näher erläutern werde. Wer Lust kann gerne eigene Shader hier einbringen
Den compilierter Shadereditor v0.5 zum ausführen und testen gibt es hier:
http://www.flasharts.de/mpz/MP_ShaderEditor.exe
Der Quelltext des Shadereditors v0.3 wird auch in der zukünftigen MP3D_31 mitgeliefert
http://www.flasharts.de/mpz/MP_Shadereditor.pb
Was sind Shader?
Shader sind Assembler Programme die direkt im Grafikprozessor der Grafikkarte ausgeführt werden.
Man unterscheidet Vertexshader und Pixelshader.
Vertexshader arbeiten mit der Geometrie der zu rendernden Modelle, dass heißt sie können die Vertexdaten (Eckpunkte) verändern.
Pixelshader arbeiten mit dem zu rendernden Pixeln selber zusammen, dass heißt sie können die Bildpunkte des gerenderten Objektes ändern.
Ebenfalls ist es möglich die Tiefenwerte zu manipulieren.
Was kann man mit Shadern machen ?
Höhere Effekte wie Normalmapping, Bloom, Softshadows, Bluring, CelShading und andere nur vorstellbare Effekte sind mit Shadern möglich.
Der Fantasie sind keine Grenzen gesetzt.
Warum sollte ich die Effekte in Vertex Shadern oder Pixel-Shader und nicht direkt PB schreiben ?
Der Grund dafür ist der direkte und unkomplizierte Zugriff auf die Renderdaten und die damit verbundenen Geschwindigkeitsgewinne.
Nachteile
Wenn man Shader benutzt wird die Lichtberechnung von DirectX nicht genutzt, da muss man
sich also selber raushelfen in dem man eine Lichtberechnung in den Shader einbaut.
Was soll dieses Tutorial erklären ?
Dieses Tutorial soll erklären wie wie ein Shader aufgebaut ist und wie man die benötigte Unterstützung für Pixel Shader und Vertex Shader in
PB mit DX9 oder einfacher in MP3D Programme einbaut um die High Level Shader Language (HLSL) von Microsoft nutzen zu können.
Der Shadereditor
Hiermit kann man bis zu 10 Texturen laden und ein Mesh. Standdardmäßig gibt es einen Würfel deren Vertex Eckpunkte
eingefärbt sind. Das Ergebnis sieht man als lichtabhängigen farbverlaufenden Würfel. Desweiteren kann man 3 Slider
Variable in Echtzeit verändern und es wird eine time Variable an den Shader übergeben. Die Position des Cursors wird angezeigt.
Bei einem Shaderfehler springt der Cursor zu dem Fehler. FPS wird angezeigt
Es gibt zwei Shadertechniken die getestet werden können:
1) Der normal Shader der auf eien Mesh angewendet wird. Dieser beeinflußt die VertexPunkte und Flächen des Meshs
2) Der postprocessing Shader der die Darstellung des Render Bildschirms verändert. Hier ist eine Vertexrechteckfläche
mit textur0 vorgegeben die über den Shader verändert werden kann.
Grundaufbaue eines Shaders, Beispielhaft:
Variablendefinition
Vertexshader
Pixelshader
Auszuführende Technik
Hier der erste einfachste Shader mit Kurzerklärung den es gibt
Simple_Wireframe_Shader.fx -> Name der Datei
Technique0 -> Names der auszuführenden Technik
pass p0 -> heißt nur eine Schleife wird berechnet
FillMode = wireframe -> Mesh wird im Wireframe gezeichnet
Code: Alles auswählen
technique Technique0
{
pass p0
{
FillMode = wireframe;
}
}
mesh object:
worldViewProj -> typ matrix -> WorldView Matrix of Mesh
worldViewProjI -> typ matrix -> inverse WorldView Matrix of Mesh
matWorld -> typ matrix -> WorldView Matrix of Mesh
matWorldI -> typ matrix -> inverse WorldView Matrix of Mesh
light object:
lightDir -> typ 3 x float -> light direction
matLightWorld -> typ matrix -> World Matrix of light
camera object:
matCamView -> typ matrix -> camera view matrix
matCamViewI -> typ matrix -> inverse camera view matrix
matCamProj -> typ matrix -> camera projections matrix
vecEye -> typ 3 x float -> position of camera
texture object:
texture0 -> typ texture -> texture
texture1 -> typ texture -> texture
texture2 -> typ texture -> texture
texture3 -> typ texture -> texture
texture4 -> typ texture -> texture
texture5 -> typ texture -> texture
texture6 -> typ texture -> texture
texture7 -> typ texture -> texture
texture8 -> typ texture -> texture
texture9 -> typ texture -> texture
time object:
time -> typ float -> time in ms
slider object:
Var1 -> typ float(0 To 1) -> see gui of program
Var2 -> typ float(0 To 1) -> see gui of program
Var3 -> typ float(0 To 1) -> see gui of program
postfx -> typ float -> 0 = shader, 1 = postprocessing shader
mouse -> ty float2 -> GLSL comaptible mousefunction
Auflistung aller HLSL Funktionen
http://msdn.microsoft.com/en-us/library/ff471376.aspx
Ich hoffe Ihr habt Spaß und Lust an dem Tutorial
Gruß Michael