Shader Optimieren

Posted By: mpde

Shader Optimieren - 10/26/04 00:11

Hallo!

eine kleine frage an die profis unter euch, nach dem ich es nun endlich doch geschafft habe einen dx9 shader auf die levelgeometrie zu legen wollte ich mal fragen ob es eine möglichkeit gibt, diesen zu opimieren in punkto framrate weil diese recht langsam ist.

mfg
mpde
Posted By: Joey

Re: Shader Optimieren - 10/26/04 00:20

du müsstest ihn wohl umschreiben!

desto weniger instruktionen er verwendet, desto schneller ist er auch.

joey.
Posted By: mpde

Re: Shader Optimieren - 10/28/04 06:25

ja danke dir aber bitte ein tip was sollt ich hier umschreiben damit die framrate nicht so absackt, funktioniert tuts ja auf levelblocks aber so langsam... wäre für tips dankbar

//**************************************************************//
// SpotlightWithBump
//--------------------------------------------------------------//
float4x4 matWorldViewProj : ViewProjection;//view_proj_matrix : ViewProjection;
float4 matWorld;//view_position : ViewPosition;
float4 lightDir = { 0.9f, 0.9f, 0.9f, 0.9f }; // Min/Max -10 <> 10 { 0.80f, -1.40f, 0.38f, 1.00f }
float spread = {25.00f}; // Min/Max 0.00 <> 100.00 default 23.00
float sharpness = {0.25f}; // Min/Max 0.00 <> 50.00 default 26.00

struct Lit_object_Vertex_Shader_VS_OUTPUT
{
float4 Pos: POSITION;
float2 texCoord: TEXCOORD0;
float3 lightVec: TEXCOORD1;
float3 lightDir: TEXCOORD2;
float3 viewVec: TEXCOORD3;
};

Lit_object_Vertex_Shader_VS_OUTPUT Lit_object_Vertex_Shader_main
(float4 Pos: POSITION,
float3 normal: NORMAL,
float2 texCoord: TEXCOORD0,
float3 binormal: BINORMAL,
float3 tangent: TANGENT)
{
Lit_object_Vertex_Shader_VS_OUTPUT Out;

Out.Pos = mul( Pos, matWorldViewProj);
Out.texCoord = texCoord;

float3 lightVec = lightDir - Pos.xyz;
// Transform light vector into tangent-space
Out.lightVec.x = dot(lightVec, tangent);
Out.lightVec.y = dot(lightVec, binormal);
Out.lightVec.z = dot(lightVec, normal);

// Transform light direction into tangent-space
Out.lightDir.x = dot(lightDir, tangent);
Out.lightDir.y = dot(lightDir, binormal);
Out.lightDir.z = dot(lightDir, normal);

float3 viewVec = matWorld - Pos;
// Transform view vector into tangent-space
Out.viewVec.x = dot(viewVec, tangent);
Out.viewVec.y = dot(viewVec, binormal);
Out.viewVec.z = dot(viewVec, normal);

return Out;
}

texture entSkin1;
sampler BaseMap = sampler_state
{
Texture = (entSkin1);
//// ADDRESSU = WRAP;
//// ADDRESSV = WRAP;
//// MAGFILTER = LINEAR;
//// MINFILTER = ANISOTROPIC;
//// MIPFILTER = LINEAR;
//// MAXANISOTROPY = 16;
};

texture mtlSkin1;
sampler BumpMap = sampler_state
{
Texture = (mtlSkin1);
//// ADDRESSU = WRAP;
//// ADDRESSV = WRAP;
//// MAGFILTER = LINEAR;
//// MINFILTER = ANISOTROPIC;
//// MIPFILTER = LINEAR;
//// MAXANISOTROPY = 16;
};
float4 Lit_object_Pixel_Shader_main
(float2 texCoord: TEXCOORD0,
float3 lightVec: TEXCOORD1,
float3 lightDir: TEXCOORD2,
float3 viewVec: TEXCOORD3) : COLOR
{
float4 base = tex2D(BaseMap, texCoord);
float3 bump = tex2D(BumpMap, texCoord) * 2 - 1;

// Standard lighting
float3 lVec = normalize(lightVec);
float diffuse = saturate(dot(lVec, bump));
float specular = pow(saturate(dot(reflect(normalize(-viewVec), bump), lVec)), 16);

// The angle between light vector and spotlight direction
// defines the spot.
float spot = saturate(sharpness * pow(saturate(dot(lVec, -lightDir)), spread));

return (diffuse * base + specular) * spot + 0.25 * base;
}

//--------------------------------------------------------------//
// Technique Section for HLSL Illumination Effects
//--------------------------------------------------------------//
technique SpotlightWithBump
{


pass Lit_object
{
VertexShader = compile vs_1_1 Lit_object_Vertex_Shader_main();
PixelShader = compile ps_2_0 Lit_object_Pixel_Shader_main();
}

}

mindestens shader 2.0

mfg

mpde
Posted By: Joey

Re: Shader Optimieren - 10/28/04 23:25

du benutzt sehr viel HLSL code... was macht dein shader denn überhaupt? wenn du nämlich z.b. nur detailmapping willst, such nach einem einfacheren (wurde vorher schon irgendwo angesprochen).

mfg, joey.
Posted By: mpde

Re: Shader Optimieren - 10/29/04 00:13

In Antwort auf:

... was macht dein shader denn überhaupt?




spotlicht das auf metalflächen einen richtig toole glanzeeffect zaubert, und dazu ganz normales bumpmapping... bei ganz normalen modellen geht es eigentlich noch mit der framerate aber auf levelblocks ist es einfach zu langsam... schade das keiner ne lösung weiss

mfg

mpde
Posted By: Joey

Re: Shader Optimieren - 10/29/04 02:38

ich denke dass es einfach zu viel ist für deine graka, models füllen z.b. ja nur 'nen teil von deinem bildschirm aus.
kommentier einfach mal teile von deinem shader aus, und schau welcher teil der langsamste ist.
mit dem ergebnis kann man dann schon mehr anfangen.
Posted By: Pappenheimer

Re: Shader Optimieren - 10/29/04 12:09

Du könntest es auch auf ein paar kleine wenige Flächen in der Levelgeometrie beschränken, um einfach ein paar Highlightszu setzen, die den Eindruck gesamten Levels aufwerten.
Posted By: Christoph_B

Re: Shader Optimieren - 10/30/04 17:00

In Antwort auf:

ich denke dass es einfach zu viel ist für deine graka, models füllen z.b. ja nur 'nen teil von deinem bildschirm aus.






jo, selbst auf meiner FX 5700 ULTRA nur 25 fps. Aber das bumpmapping an sich ist gar nicht sichtbar irgendwie, oder?
Posted By: mpde

Re: Shader Optimieren - 10/30/04 17:28

In Antwort auf:


Aber das bumpmapping an sich ist gar nicht sichtbar irgendwie, oder?




Hallo !

Stelle mal die textur im WED die Du dem block zugewiesen hast auf flat dann wirst Du es auch bumpen sehn.

Warum es nur dann funzt wäre meine nächste frage gewesen.

Ich habe auch noch andere Shader ausprobiert und irgendwie... bin mir jetzt nicht sicher sind nur die HLSL Shader so langsam. Die ASM Shader sind wesentlich schneller.

mfg

mpde
© 2024 lite-C Forums