Update REMDER (Dx9)
This commit is contained in:
46
FLARDATA/Shader/postProcessLightScatter.fp
Normal file
46
FLARDATA/Shader/postProcessLightScatter.fp
Normal file
@@ -0,0 +1,46 @@
|
||||
//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
|
||||
//If you use the supplied shader files you may not modify them unless you state in them what you changed
|
||||
//and also mention the source or who the author is.
|
||||
//Code based on https://fabiensanglard.net/lightScattering/index.php which is based on
|
||||
//"Volumetric Light Scattering as a Post-Process" GPU Gems 3 (2005) and
|
||||
//"Light Shaft Rendering" ShadersX3 (2004).
|
||||
|
||||
#version 330
|
||||
#define MAX_NUM_LIGHTS $MAX_NUM_LIGHTS
|
||||
in vec2 TexCoords;
|
||||
|
||||
uniform float exposure;
|
||||
uniform float decay;
|
||||
uniform float density;
|
||||
uniform float weight;
|
||||
uniform vec2 lightPositionOnScreen[MAX_NUM_LIGHTS];
|
||||
uniform sampler2D myTexture;
|
||||
uniform int numActiveLights;
|
||||
|
||||
const int NUM_SAMPLES = 75;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 result = vec4(0);
|
||||
|
||||
for (int lightIndex = 0; lightIndex < MAX_NUM_LIGHTS && lightIndex < numActiveLights; lightIndex++ )
|
||||
{
|
||||
vec2 deltaTextCoord = vec2( TexCoords.st - lightPositionOnScreen[lightIndex].xy );
|
||||
vec2 textCoord = TexCoords.st;
|
||||
deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density;
|
||||
float illuminationDecay = 1.0;
|
||||
|
||||
for(int i=0; i < NUM_SAMPLES ; i++)
|
||||
{
|
||||
textCoord -= deltaTextCoord;
|
||||
vec4 sample = texture2D(myTexture, textCoord );
|
||||
sample *= illuminationDecay * weight;
|
||||
result += sample;
|
||||
illuminationDecay *= decay;
|
||||
}
|
||||
}
|
||||
|
||||
result=min(result,vec4(NUM_SAMPLES*weight));
|
||||
result *= exposure;
|
||||
gl_FragColor = result;
|
||||
}
|
||||
Reference in New Issue
Block a user