Odal
2006-04-14, 16:48:11
Für Oblivion gibts ja ein "FakeHDR" Plugin
nun würde mich mal interessieren was dieses Shaderprogramm ungefähr tut...
im Spiel hat man den Anschein das es eine Art Iriissimulation durchführt....eben mit den Typischen Bloom nachteilen (keinen hohen Farbcontrast zwischen Overbright stellen und normal stellen)
ausserdem läuft das ding recht zähflüssig...kann da vielleicht mal jemand drüberschauen ob sich was optimieren lässt?
das FakeHDR plugin gibts hier (http://www.tessource.net/files/file.php?id=2773)
enthalten ist auch noch eine andere d3d9.dll welche man ins Oblivion verzeichnis schmeissen muss
//These variables will get set automatically
texture tex1;
texture tex2;
float2 rcpres;
float currentlevel;
sampler s0 = sampler_state {
AddressU = Clamp;
AddressV = Clamp;
texture = <tex1>;
};
sampler s1 = sampler_state { texture = <tex2>; };
//Use these to modify the behaviour of the dll
bool AffectMenus=true;
int ToggleKey=107;
float ReactionSpeed=0.5;
//Use these to modify the behaviour of the shader
static const int g_cKernelSize = 13;
static const float BloomScale = 0.75;
static const float HDRScale = -0.7;
static const float HDRAdjust = 0.2;
float2 PixelKernelH[g_cKernelSize] =
{
{ -6, 0 },
{ -5, 0 },
{ -4, 0 },
{ -3, 0 },
{ -2, 0 },
{ -1, 0 },
{ 0, 0 },
{ 1, 0 },
{ 2, 0 },
{ 3, 0 },
{ 4, 0 },
{ 5, 0 },
{ 6, 0 },
};
float2 PixelKernelV[g_cKernelSize] =
{
{ 0, -6 },
{ 0, -5 },
{ 0, -4 },
{ 0, -3 },
{ 0, -2 },
{ 0, -1 },
{ 0, 0 },
{ 0, 1 },
{ 0, 2 },
{ 0, 3 },
{ 0, 4 },
{ 0, 5 },
{ 0, 6 },
};
static const float BlurWeights[g_cKernelSize] =
{
0.002216,
0.008764,
0.026995,
0.064759,
0.120985,
0.176033,
0.199471,
0.176033,
0.120985,
0.064759,
0.026995,
0.008764,
0.002216,
};
float4 UpCombine( in float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 ColorOrig = tex2D( s0, Tex );
float4 adjust = (currentlevel-0.5)*HDRScale;
ColorOrig *= 1+adjust;
ColorOrig += tex2D( s1, Tex );
ColorOrig.a = 1;
return clamp(ColorOrig,0,1);
}
float4 Bloom( in float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 Color = 0;
for (int i = 0; i < g_cKernelSize; i++)
{
Color += tex2D( s1, Tex + (PixelKernelH[i]*rcpres) ) * BlurWeights[i];
Color += tex2D( s1, Tex + (PixelKernelV[i]*rcpres) ) * BlurWeights[i];
}
return clamp(Color * BloomScale,0,1);
}
float4 HDRBrightPass( in float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 color = tex2D( s0, Tex );
float4 adjust = (color-currentlevel)-HDRAdjust;
color = clamp((adjust*adjust*adjust*adjust*adjust)*8,0,1);
color.a = 1;
return color;
}
technique T0
{
pass p0
{
PixelShader = compile ps_2_0 HDRBrightPass();
}
pass p1
{
PixelShader = compile ps_2_0 Bloom();
}
pass p2
{
PixelShader = compile ps_2_0 UpCombine();
}
}
nun würde mich mal interessieren was dieses Shaderprogramm ungefähr tut...
im Spiel hat man den Anschein das es eine Art Iriissimulation durchführt....eben mit den Typischen Bloom nachteilen (keinen hohen Farbcontrast zwischen Overbright stellen und normal stellen)
ausserdem läuft das ding recht zähflüssig...kann da vielleicht mal jemand drüberschauen ob sich was optimieren lässt?
das FakeHDR plugin gibts hier (http://www.tessource.net/files/file.php?id=2773)
enthalten ist auch noch eine andere d3d9.dll welche man ins Oblivion verzeichnis schmeissen muss
//These variables will get set automatically
texture tex1;
texture tex2;
float2 rcpres;
float currentlevel;
sampler s0 = sampler_state {
AddressU = Clamp;
AddressV = Clamp;
texture = <tex1>;
};
sampler s1 = sampler_state { texture = <tex2>; };
//Use these to modify the behaviour of the dll
bool AffectMenus=true;
int ToggleKey=107;
float ReactionSpeed=0.5;
//Use these to modify the behaviour of the shader
static const int g_cKernelSize = 13;
static const float BloomScale = 0.75;
static const float HDRScale = -0.7;
static const float HDRAdjust = 0.2;
float2 PixelKernelH[g_cKernelSize] =
{
{ -6, 0 },
{ -5, 0 },
{ -4, 0 },
{ -3, 0 },
{ -2, 0 },
{ -1, 0 },
{ 0, 0 },
{ 1, 0 },
{ 2, 0 },
{ 3, 0 },
{ 4, 0 },
{ 5, 0 },
{ 6, 0 },
};
float2 PixelKernelV[g_cKernelSize] =
{
{ 0, -6 },
{ 0, -5 },
{ 0, -4 },
{ 0, -3 },
{ 0, -2 },
{ 0, -1 },
{ 0, 0 },
{ 0, 1 },
{ 0, 2 },
{ 0, 3 },
{ 0, 4 },
{ 0, 5 },
{ 0, 6 },
};
static const float BlurWeights[g_cKernelSize] =
{
0.002216,
0.008764,
0.026995,
0.064759,
0.120985,
0.176033,
0.199471,
0.176033,
0.120985,
0.064759,
0.026995,
0.008764,
0.002216,
};
float4 UpCombine( in float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 ColorOrig = tex2D( s0, Tex );
float4 adjust = (currentlevel-0.5)*HDRScale;
ColorOrig *= 1+adjust;
ColorOrig += tex2D( s1, Tex );
ColorOrig.a = 1;
return clamp(ColorOrig,0,1);
}
float4 Bloom( in float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 Color = 0;
for (int i = 0; i < g_cKernelSize; i++)
{
Color += tex2D( s1, Tex + (PixelKernelH[i]*rcpres) ) * BlurWeights[i];
Color += tex2D( s1, Tex + (PixelKernelV[i]*rcpres) ) * BlurWeights[i];
}
return clamp(Color * BloomScale,0,1);
}
float4 HDRBrightPass( in float2 Tex : TEXCOORD0 ) : COLOR0
{
float4 color = tex2D( s0, Tex );
float4 adjust = (color-currentlevel)-HDRAdjust;
color = clamp((adjust*adjust*adjust*adjust*adjust)*8,0,1);
color.a = 1;
return color;
}
technique T0
{
pass p0
{
PixelShader = compile ps_2_0 HDRBrightPass();
}
pass p1
{
PixelShader = compile ps_2_0 Bloom();
}
pass p2
{
PixelShader = compile ps_2_0 UpCombine();
}
}