MP3D: Programm zur Erstellung von PixelShadern

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

MP3D: Programm zur Erstellung von PixelShadern

Beitrag von mpz »

Hi Leute,

Ich möchte Euch heute ein Programm vorstellen welches ich mit meiner MP3D Lib erstellt habe. Es ist damit möglich Pixelshader zu erstellen und zu testen. Die erzeugten Pixelshader können dann mit der MP3D Lib verwendet werden. Man kann mit der MP3D Lib den Shader kompilieren und Ihn dann dauerhaft verwenden. Die Ausführungsgeschwindigkeit ist abhängig von der Grafikkarte. Ein Bild mit 1024 * 1024 Punkte 16 Bit dauert bei mir im Durchschnitt 3 ms. Ich habe Euch schon mal 54 Shader zum Testen beigelegt :) . Die Stärke der Shader ist u-a. auch die Echtzeitveränderungen (welche ich aber derzeit in diesem Programm noch nicht integriert habe). Der Hilfebutton hat noch keine Funktion. Wer hat Lust eine Hilfe zu schrieben und mir z.B. als Code zuzusenden (z.B. Messagerequester)?

PixelShadererstellungsprogramm
http://em.q-soft.ch/files/get/O4YMiXohg ... shader.zip

Hier eine kleine Einführung. Das Programm kann zwei Grafiken laden die als TextureA und TextureB bezeichnet werden. Weiter gibt es drei Variable Var1.f, Var2.f und Var3.f welche über Slider gesteuert werden können. Der Wertebereich geht hier von 0-1 (Float) und voreingestellt ist 0.5 (Mitte)

Beispielshader:
Erstellung eines Shaders: Dieser wird in Textform geschrieben und entspricht der C Sprache

1) Übergabe der Variablen

Code: Alles auswählen

texture TextureA;
Hier wird die Textur TextureA definiert. Bei Variablen muss auf Gross/Kleinschrift geachtet werden!

Code: Alles auswählen

float Var1;
Hier wird die "Slider Variabel" definiert und übergeben

2) Behandlung der Textur innerhalb des des Shaders

Code: Alles auswählen

sampler Sampler1 = sampler_state
{
    texture   = <TextureA>;
    AddressU  = Clamp;
    AddressV  = Clamp;
    MipFilter = None;
    MagFilter = None;
    MinFilter = None;
};
Die Funktionen AddressU etc. definieren die Eigenschaften der Textur im Shader

3) Funktion invers

Code: Alles auswählen

float4 PSInverse(float2 Tex : TEXCOORD0) : COLOR
{
    return 1.0f - tex2D(Sampler1, Tex);
}
PSInverse -> Name der Funktion
float2 Tex : TEXCOORD0 -> Doublefloat entspricht den Texturkoordinaten. Hier muss man nicht mühselig
eine for next schleife schreiben

return 1.0f - tex2D(Sampler1, Tex); -> Texturrückgabe heißt der Farbwert von rgba entspricht
255,255,255,255 und wird mit den negativen wirklichen Farbwerten der der Textur subtrahiert

3) Funktion Helligkeit
Beispiel für Heligkeitshader

Code: Alles auswählen

return  tex2D(Sampler1, Tex)*Var1*2;
Var1 = 0.5(Slidermitte) * 2 = 1 alle Farben werden einfach mit 1 multipliziert. Slider Hoch = multiplizierten mit bis zu 2 = heller oder bis zu 0 = dunkler

4) Ausführen der Funktion

Code: Alles auswählen

technique t1
{
    pass p1  
    {
        PixelShader = compile ps_2_0 PSInverse();
    }
}
technique t1 -> Man kann eine große Shader- Textdatei schreiben und verschieden Funktionen aufrufbereit integrieren. Das Programm benutzt immer den t1 Namen zum ausführen
pass p1 -> Anzahl der durchläufe p1 = 1. Bei komplexeren Shadern hat man verschiedene Schleifen/Schritte und benötigt dann mehrere Durchläufe
PixelShader = compile ps_2_0 PSInverse(); -> Je nach Grafikkarte kann man mehr und komplexere Befehle verwenden
Hier der fertige Shader um eine Textur zu invertieren

Fertiger Shader

Code: Alles auswählen

texture TextureA;
sampler Sampler1 = sampler_state
{
    texture   = <TextureA>;
};

float4 PSInverse(float2 Tex : TEXCOORD0) : COLOR
{
    return 1 - tex2D(Sampler1, Tex);
}

technique t1
{
    pass p1  
    {
        PixelShader = compile ps_2_0 PSInverse();
    }
}


Gruß Michael
Working on - MP3D Engine -
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Programm zur Erstellung von PixelShadern

Beitrag von Kaeru Gaman »

kein Code, kein Tip, kein Trick.

ist dein ShaderCreator in PB geschrieben?
dann hätte er noch eine Chance aufs Feedback Forum, ansonsten gehört das hier zu Ressourcen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: Programm zur Erstellung von PixelShadern

Beitrag von mpz »

Hi Kaeru,

Die Shader können mit der MP3D lib (ist komplett in PB geschrieben.) direkt, aber auch ohne meine Lib mit DX9 Routinen in PB verwendet werden ( Ein paar DX Routinen zu Shadern habe ich ja mal veröffentlicht). Das ShaderCreator Programm wird als Quellcode in der nächsten MP3D Lib veröffentlicht.

Hier erkläre ich (jedenfall meiner Meinung nach) wie man einen Shader schreibt, was ich schon als Code, Tipp und Trick ansehen würde :mrgreen: :

Die weitere 54 Shader zur Grafikveränderung liegen in der zip Datei bei. Man muss nicht immer dlls nehmen um Grafiken zu manipulieren. Hier hat man dann die Rechenpower der Grafikkarte und nicht nur der lahmen Cpu(s).

Wenn du meinst das es in einem anderen Bereich besser aufgehoben ist verschieben es einfach, ich habe nichts dagegen.

Gruß Michael
Working on - MP3D Engine -
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Programm zur Erstellung von PixelShadern

Beitrag von Kaeru Gaman »

es ist kein Tip zu PB sondern zu deiner closed source Lib. dass man shader überall verwenden kann, ist mir schon klar,
aber hier ist weder der PB-SourceCode für den Shader-Creator, noch ein Tip wie man das mit nativem PB machen kann.

Wenn uns User darauf hinweisen, dass sich ein Thread im falschen Forum befindet, und wir das nachvollziehen können, dann werden wir auch tätig.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten