Shader über Effect_load

Posted By: Elfi

Shader über Effect_load - 10/22/04 20:40

Nach langen probieren um Effekte auf meinen Wänden zu bekommen bin ich zum Schluß gekommen es funktioniert gar nicht...oder sagen wir so es bleibt alles schwarz. Ich steh mit dieser Meinung sicherlich nicht alleine da. Conitec bietet es an kann aber keine wirkliche Hilfe dazu anbieten nichtmal ein Tutor.
Jetzt seit Ihr gefragt

Demon
Posted By: mpde

Re: Shader über Effect_load - 10/22/04 20:52

ja damit stehst du nicht alleine, meine frage ist: wie bekommt man es hin ein simplen bumpmapping effect auf die levelblocks zu legen, der auch funktioniert und auch irgendwie von den statischen lichtquellen beeinflusst wird und nicht einfach nur detailmapping ist sondern eben bumpmapping ... oder geht das vieleicht doch nicht.

gruss

mpde
Posted By: ello

Re: Shader über Effect_load - 10/22/04 21:18

hast du d3d_automaterial=1; gesetzt? und hast du das material so benannt wie die textur in deinem level?? und hast du die material skins(falls sie im shader verwendet werden) richtig eingestellt?
Posted By: Elfi

Re: Shader über Effect_load - 10/22/04 21:27

jo hab ich.....alles probiert aber ich hab nur schwarze Wände und es liegt unter 15 FPS. Die FX Dateien sind von FXComposer. Ich weis nicht mehr weiter. Ich möchte gern die plastic.fx von Composer auf meinen Wänden nutzen aber dat geht nich.
Posted By: ello

Re: Shader über Effect_load - 10/22/04 21:32

nö, geht auch nicht. das musst du an 3dgs anpassen;)
Posted By: Elfi

Re: Shader über Effect_load - 10/22/04 21:41

ja toll aber wie? Ich bin halt ein Newbie und versteh halt nicht alles wie Ihr. Es steht nichts im Handbuch darüber wie man es umschreibt. Oder ist es mir entgangen?. Kann nicht mal jemand ein Tutor darüber schreiben damit wir als Newbies auch was davon haben?
Ich würde gern so etwas sammeln was funktioniert und dann zu einen Tutorial als pdf erstellen. Hilfe eurer seits vorausgesetzt.

So sieht der Code des plastic.fx Datei aus:

1: Was muss ich ändern/löschen
2. Wie ist der Befehl an die Engine damit sie es versteht


/*********************************************************************NVMH3****
File: $Id: //sw/devtools/FXComposer1.0/SDK/MEDIA/HLSL/plasticD.fx#6 $

Copyright NVIDIA Corporation 2002
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.


Comments:
A phong-shaded plastic surface. The highlight is done in VERTEX shading --
not as a texture.

Vertex-shaded plastic using directional lights

******************************************************************************/

/************* UNTWEAKABLES **************/

float4x4 WorldIT : WorldInverseTranspose < string UIWidget="None"; >;
float4x4 WorldViewProj : WorldViewProjection < string UIWidget="None"; >;
float4x4 World : World < string UIWidget="None"; >;
float4x4 ViewI : ViewInverse < string UIWidget="None"; >;

/************* TWEAKABLES **************/

float4 LightDir : Direction <
string Object = "DirectionalLight";
string Space = "World";
> = {1.0f, -1.0f, 1.0f, 0.0f};

float4 LightColor <
string UIName = "Light Color";
string UIWidget = "Color";
> = {1.0f, 1.0f, 1.0f, 1.0f};

float4 AmbiColor : Ambient
<
string UIName = "Ambient Light Color";
string UIWidget = "Color";
> = {0.2f, 0.2f, 0.2f, 1.0f};

float4 SurfColor : Diffuse
<
string UIName = "Surface Color";
string UIWidget = "Color";
> = {0.9f, 0.5f, 0.9f, 1.0f};

float SpecExpon : SpecularPower
<
string UIWidget = "slider";
float UIMin = 1.0;
float UIMax = 128.0;
float UIStep = 1.0;
string UIName = "specular power";
> = 22.0;

/************* DATA STRUCTS **************/

/* data from application vertex buffer */
struct appdata {
float3 Position : POSITION;
// float4 UV : TEXCOORD0;
float4 Normal : NORMAL;
};

/* data passed from vertex shader to pixel shader */
struct vertexOutput {
float4 HPosition : POSITION;
// float2 UV : TEXCOORD0;
float4 diffCol : COLOR0;
float4 specCol : COLOR1;
};

/*********** vertex shader ******/

vertexOutput plasticDVS(appdata IN) {
vertexOutput OUT;
float3 Nn = normalize(mul(IN.Normal, WorldIT).xyz);
float4 Po = float4(IN.Position.xyz,1);
float3 Pw = mul(Po, World).xyz;
OUT.HPosition = mul(Po, WorldViewProj);
float3 Ln = normalize(-LightDir); // potentially already normalized
float ldn = dot(Ln,Nn);
float diffComp = max(0,ldn);
float4 diffContrib = SurfColor * ( diffComp * LightColor + AmbiColor);
OUT.diffCol = diffContrib;
OUT.diffCol.w = 1.0;
// OUT.UV = IN.UV.xy;
float3 Vn = normalize(ViewI[3].xyz - Pw);
float3 Hn = normalize(Vn + Ln);
float hdn = pow(max(0,dot(Hn,Nn)),SpecExpon);
OUT.specCol = hdn * LightColor;
return OUT;
}

/********* pixel shader isn't needed ********/

// float4 plasticDPS(vertexOutput IN) : COLOR { return (IN.diffCol + IN.specCol); }

/*************/

technique ps11
{
pass p0
{
VertexShader = compile vs_1_1 plasticDVS();
ZEnable = true;
ZWriteEnable = true;
CullMode = None;
//PixelShader = compile ps_1_1 plasticDPS();
SpecularEnable = true;
ColorArg1[ 0 ] = Diffuse;
ColorOp[ 0 ] = SelectArg1;
ColorArg2[ 0 ] = Specular;
AlphaArg1[ 0 ] = Diffuse;
AlphaOp[ 0 ] = SelectArg1;
}
}

/***************************** eof ***/
Posted By: Christoph_B

Re: Shader über Effect_load - 10/23/04 00:49

mhh, wenn ich den effekt in effectedit lad, is aber auch alles nur schwarz, aber ekin fehler drin
Posted By: Elfi

Shader über Effect_load - 10/23/04 23:46

ich möchte gern diesen effect den ihr hier seht in meinen 3dgs anwenden (Specular). aber bis jetzt wie ich sehe hat niemand wirklich hier eine richtige antwort darauf. ich habe alles probiert aber es bleibt alles nur schwarz. und so gehts vielen. manchmal denke ich das ist nur bauernfängerei mit dem shader. dat funtzt doch gar nicht. dat einzige was ich bis jetzt habe ist das bumpmapping aber selbst das ist mit dem licht nicht beeinflussbar und sieht nach dx8 aus.


Posted By: Christoph_B

Re: Shader über Effect_load - 10/24/04 00:53

In Antwort auf:

manchmal denke ich das ist nur bauernfängerei mit dem shader. dat funtzt doch gar nicht





ist es nicht, es ist nur dumm(sry), dass immer alle denken:"so, ich kann jetzt n bisschen c script, dann kann DX doch ned schwer sein". Ist es aber! und shader sind sozusagen der höhepunkt der DX programmierung, bis man die kann, muss man eben üben, üben, üben...nur die besten können die eben und die haben auch mehr zu tun als immer allen leuten, die denken es wäre so einfach, zu sagen wies geht. so, nimms mit ned übel, aber das musste raus.
Posted By: mpde

Re: Shader über Effect_load - 10/24/04 02:03

----------------------------------------------------------------------
DirectX9 shaders
Shader code now supports the HLSL (aka Cg) language. It's a C based
language just like C-Script, and should make shader programming much
easier for C-Script programmers.
----------------------------------------------------------------------

ich weiss nicht wie es dir geht aber wenn ich das lese geht mir eigentlich durch den kopf das 3dgs die hlsl shader unterstützen sollte, vorrausgesetzt eine com version eine graka die ebenfalls shader unterstützt nicht war.

nun giebt es da auch noch einen super befehl der diese effect files (fx) einliest, um denke ich jetzt mal dem anfänger die sache etwas leichter zu machen.
was sind denn nun diese fx files ... ja das sind files die man mit z.bsp rendermonky, fx composer oder oder exportieren kann ist eigentlich eine tolle sache oder, nur stellt sich mir die frage warum funktioniert das eigentlich nicht. was muss man ändern in den files damit es funktioniert den beim einlesen giebt es ja nicht mal ne fehlermeldung oder so was, es ist einfach nichts zu sehen, es bleibt alles schwarz
Posted By: Christoph_B

Re: Shader über Effect_load - 10/24/04 16:58

In Antwort auf:

was sind denn nun diese fx files ... ja das sind files die man mit z.bsp rendermonky, fx composer oder oder exportieren kann





es gibt auch .fx files von 3dgs, nicht nur von rendermonkey und diesen programmen
Posted By: mpde

Re: Shader über Effect_load - 10/24/04 17:40

Hallo!

Sicherlich... CHB2 giebt es fx files von 3DGS und und und... man kann ja auch ein Text als fx Datei speichern. Aber wenn ich jetzt mal von den anderen Tools ausgehe sind die fx Files bereits richtig compilert und wenn man sie mit dem Tool FXEdit das dem DXSDK beiliegt prüfen tut Fehlerfrei (wenn man die Texturen und Modele neu zuweist).

Meine Frage war eigentlich nicht: hey schreib mir mal einer schnell einen Shader ich will Doom3 kopieren... sondern ich wollte nur mal Wissen wie es anderen User'n die sich mit Shadern beschäftigen geht und vieleicht ein wenig Hilfestellung, damit ich und andere die sich diesen
Thread durchlesen weiter voran kommen, weil denke ich mal darüber nichts im neuen Manual was hoffentlich bald erscheint stehen wird.

Mfg
Mpde
Posted By: XeXeS

Re: Shader über Effect_load - 10/24/04 21:02

Hallo,

du willst eine Hilfestellung ich kann dir eine geben. Lerne erstmal mit DirectX umzugehen und wie eine Grafikarte aufgebaut ist und wie sie Funktioniert. Lass dir mal den Ablauf erklären wie eine Scene gerendert Wird von Vertex über das Polygone bis hin zum Multitexturing Effekt der FFP und dann schließlich zum fertigen Pixel auf dem Bildschirm. Lerne verstehen wie farben Funktionieren und warum man einen Farbpixel als 4D Vektor angeben kann und und und .... Wenn du wirklich Saderprogrammierung verstehen wilst dann solltest du ich auf eine lange Lehrzeit vorbereiten. Niemand hier wird dir das alles erklären das musst du dir erarbeiten es bringt dir rein Garnichts wenn du Shaderprogrammieren wilst und keine Ahnung von den oben genannten dingen hast.

Zu den X Files. 3DGS Unterstützt seit der letzten Version dank der DirectX 9 Unterstützung sehrwohl die HLSL. Vorher war dies nicht der Fall da es das in DirectX 8 noch nicht gab wobei wir auch hier wieder beim Thema DirectX landen.

Jede Engine stellt bestimmte Informationen wie z.B. das Produkt aus Welt- , View- und Projektionsmatrix. Natürlich brauchst du für Shader auch imense Kenntnisse der 3D Mathematik einfache Winkelfunktionen reichen dir da zu meist nicht mehr aus. Du solltest dich also auch mit:

- Vektorrechungen
- Matrizenrechnungen

beschäftigen.

Aber wieder zu den Bereitgestellten Informationen. Jedeengine setzt diese Informationen in eine bestimmte Variable. Diese ist vom benutzer nicht festgelegt wenn jetzt z.B. In der einen Engine bzw. Programm die Variable WorldViewProjection und in der A6 WorldViewProj heist ist das etwas was der Computer nicht erkennen kann also er weiß nicht das damit ein und das selbe gemeint ist.

Aber wie gesagt lern erstmal die einfachen sachen der Programmierung und Mathematik dann lerne Vektorrechnungen und Matrizenrechnungen sowie den Aufbau einer 3D Scene und den kompletten Rendervorgang mit den Verschiedenen abläufen und dann was die Vertexshader machen müssen um die FFP zu ersetzen und ganz zum Schluss wie man mit Shaderversionen un den Registern der Grafikkarte erfolgreiche und erstaunliche Grafikeffekte also Shader programmiert.

Abschliesende Worte.

- Shader ist ein sehr fragwürdige Bezeichnung. Weil sie nicht immer direkt was mit Shading am hut haben. In OpenGL wurde der Name besser gewählt dort heißt es nicht Pixel und Vertexshader sondern ganz allgemein Pixel und Vertexprogramm. Da wir uns hier abermit DirectX beschäftigen und dort dies eben als Shader gilt sollten wir diese Namenskonvetionen auch beibehalten.
© 2024 lite-C Forums