PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HLSL-Shader


aths
2004-02-05, 09:52:06
Ich möchte einen sehr einfachen Shader schreiben, der drei Texturen nutzt: Base- und Detailmap sollen gemischt werden, wobei der Alpha-Kanal der Basemap die Stärke der Detailmap angibt. Das ganze soll mit einer Lightmap multipliziert werden. Diesen Shader möchte ich auf 2_0 und 2_X kompilieren.

Wie heißt der Compiler (Exe-Name) im DX9SDK?

Wo findet man eine kleine Einführung in HSLS, um einen solchen Shader schreiben zu können? Die Shader (HSLS-Code, die "Assembler-Programme" sollen nicht tatsächlich eingesetzt werden, sondern nur als Beispiel dienen.


Wird das mit der Detail-Map überhaupt so gemacht, oder missbraucht man Normalen oder eine zweite Material-Farbe für den Alpha-Blendwert?

Demirug
2004-02-05, 11:13:12
Der Compiler ist FXC.EXE.

HLSL Beschreibung ist im SDK enthalten oder nimm die Cg-Anleistung.

Was Detailmaps angeht kannst du da alles machen was dir sinnvoll erscheint. Es gibt auch Fälle da wird mit einem festen Verhältniss gearbeitet. Es kommt eben immer auf die Situation an.

Bei sowas simplen wirst du aber wahrscheinlich keinen unterschied zwischen 2.0 und 2.x erkennen können.

ScottManDeath
2004-02-05, 12:07:37
Wenn du "nur rumspielen" möchtest ist der "Effectedit" aus dem SDK ganz praktisch. Eine Art "Mini-IDE", man schreibt den Shader und sieht das ganze dann sofort da es nach jeder Änderung kompiliert wird. Wenn es dann läuft, dann wie Demirug schon gesagt hat das ganze mit fxc oder cgc (für CG) kompilieren.

aths
2004-02-05, 15:53:43
Original geschrieben von Demirug
Der Compiler ist FXC.EXE. Hm, mein SDK kennt nur maximal 2_0. Brauche ich ein neues, oder reicht ein neuer Compiler?

Demirug
2004-02-05, 16:52:09
Original geschrieben von aths
Hm, mein SDK kennt nur maximal 2_0. Brauche ich ein neues, oder reicht ein neuer Compiler?

Meiner kann bis 3_0. :D

Ob der Compiler aleine reicht weiss ich nicht sicher. Eigentlich sollte es gehen.

Xmas
2004-02-05, 18:32:50
Original geschrieben von Demirug
Meiner kann bis 3_0. :D
Welcher, der FXC oder der andere ;)

Brillus
2004-02-05, 19:05:57
für das 2.X bruachst du das SommerSDK Update

Demirug
2004-02-05, 19:29:03
Original geschrieben von Xmas
Welcher, der FXC oder der andere ;)

Der FXC.

aths
2004-02-06, 07:12:27
Original geschrieben von Demirug
Bei sowas simplen wirst du aber wahrscheinlich keinen unterschied zwischen 2.0 und 2.x erkennen können. Ich denke, 2_X sorgt dafür, dass nach 2 T-Ops erst mal arithmetische Ops folgen, während 2_0 zunächst alle Texturen sampelt (da gibt es ja hier keine Abhängigkeiten.)

Demirug
2004-02-06, 07:20:42
Original geschrieben von aths
Ich denke, 2_X sorgt dafür, dass nach 2 T-Ops erst mal arithmetische Ops folgen, während 2_0 zunächst alle Texturen sampelt (da gibt es ja hier keine Abhängigkeiten.)

Stimmt, du hattest ja noch was von einer Lightmap geschrieben womit es 3 Texturen wären. Gibt wohl doch einen kleinen Unterschied.

aths
2004-02-06, 07:23:38
Ist der neue FXC geheim, oder könntest du den an meine Adresse schicken?

Gibt es btw überhaupt eine 2. Material-Farbe?

Ich verzweifel noch bezüglich eines Frameworks. Wo finde ich Beispiele, wo mit HLSL z. B. einfach Multitexturing gemacht wird? Die Exercises in der DX9SDK-Doku nutzen nur 1_1 und nur asm.

Demirug
2004-02-06, 07:54:14
Original geschrieben von aths
Ist der neue FXC geheim, oder könntest du den an meine Adresse schicken?

Ist Teil des Betas und ich kann in deswegen nicht rausgeben.

Gibt es btw überhaupt eine 2. Material-Farbe?

Es gibt eine zweite Vertex Farbe. Alles andere ist in Verbindung mit programmierbaren Shadern egal weil man sich ja alles so bauen kann wie man es braucht. Solange man die Limits nicht sprengt.

Ich verzweifel noch bezüglich eines Frameworks. Wo finde ich Beispiele, wo mit HLSL z. B. einfach Multitexturing gemacht wird? Die Exercises in der DX9SDK-Doku nutzen nur 1_1 und nur asm.

Im letzen Update ist in der Dokumentation ein relative grosses Kapitel über HLSL drin.

Zudem gibt es da ja auch noch die Cg Dokus mit vielen Beispielen. http://developer.nvidia.com/object/cg_toolkit.html

aths
2004-02-06, 08:24:17
Original geschrieben von Demirug
Ist Teil des Betas und ich kann in deswegen nicht rausgeben.Dann muss ich wohl das DX9bSDK ziehen ...

edit: Habs installiert, aber der FXC kennt nach wie vor noch kein 2_X-Target??

Original geschrieben von Demirug
Es gibt eine zweite Vertex Farbe. Heißt die zufällig COLOR1?

Mit in float3 color0 : COLOR0, holt man sich die die erste Farbe. Wie holt man sich eine Textur? Doch nicht etwa mit TEXCOORD0?

Demirug
2004-02-06, 12:15:28
Original geschrieben von aths
Dann muss ich wohl das DX9bSDK ziehen ...

edit: Habs installiert, aber der FXC kennt nach wie vor noch kein 2_X-Target??

2_A ist das was du suchst. Und wenn das nicht vorhanden ist dann hst du ein falsches SDK.

Heißt die zufällig COLOR1?

Mit in float3 color0 : COLOR0, holt man sich die die erste Farbe. Wie holt man sich eine Textur? Doch nicht etwa mit TEXCOORD0?

Ja die zweite VertexFarbe hat COLOR1. TEXCOORD0 ist die texturkoordinate. Zum ausslesen muss man aber noch einen Sampler haben.


struct PS_DATA
{
float3 LightVector: TEXCOORD0;
float2 BumpMapCoordinate : TEXCOORD3;
};

float4 main (const PS_DATA fragment,
uniform sampler2D BumpMap,
uniform samplerCUBE EnvTex) : COLOR
{
float3 BumpMapValue = tex2D (BumpMap,fragment.BumpMapCoordinate).xyz;
float3 BumpNormal = BumpMapValue; // (BumpMapValue-float3(0.5, 0.5, 0.5))*2;
float3 EnvCoordinate = reflect(fragment.LightVector,BumpNormal);
float3 TextureValue = texCUBE (EnvTex, EnvCoordinate).rgb;
float3 Result = TextureValue;
return float4(Result.x,Result.y,Result.z,0);
}

ScottManDeath
2004-02-06, 16:15:40
Mein Template Projekt welches ich für meine CG Demos genommen habe....

http://sund.de/schott/storage/cg_template.jpg

....kannst du hier (http://sund.de/schott/storage/cg_template.zip) herunterladen.

Macht nix spektakuläres ausser einer einfachen Modulation des Specular Lichtes mit einer GlossMap.

Der Vertex Shader macht ein Point Light und die Fragment Shader modulieren das ganze mit den Texturen

Falls du damit experimentiern willst musst du aufpassen das die Parameternamen nicht geändert werden, da diese fest einkodiert sind genauso wie die Texturnamen.

Bei Bedarf könnte ich es auch flexibler machen, z.B. support für mehr Texturen, mehr Shader.....


Das GUI enthält noch Elemente die für andere Projekte verwendet wurden, deshalb passiert nicht immer etwas ;)

P.S.
Das die Wolkentextur so grausam aussieht muss wohl an den AF optimierungen der 5X.XX Treiber liegen, auf der Ti4600 sieht das so aus wie es sein sollte. :ratlos: