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: 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.