Sign in to follow this  
evillgames

Chapter 27. Motion Blur as a Post-Processing Effect bugs

Recommended Posts

hey

 

my blur effect shivers when i move mouse.... this does occur when i have various fps... 

 

if i move camera by keyboard it is ok

if i connect mouse to fps - it is ok too - but it is not correct from logical point

 

here i just did: mouseX +=1

 

and it shivers.. can not understand WHY

 

i guess that have to be GENTLY with different fps...

 

here is movie - cuzz images does not give info

 

 

https://dl.dropbox.com/u/5862637/moblur/moblurSHIT.flv
(30mb)

 

shaders:

 

vs gbuffer
// moblur

 









gl_TexCoord[5] = gl_Position;
gl_TexCoord[6] = prevMVP * gl_Vertex;
 

 


ps gbuffer







// out velocity for motion blur
vec2 a = gl_TexCoord[5].xy / gl_TexCoord[5].w;
vec2 b = gl_TexCoord[6].xy / gl_TexCoord[6].w;

gl_FragData[2].xy = (a - b) * 0.5 + 0.5;
gl_FragData[2].xy = pow(gl_FragData[2].xy, 3.0);

 



ps blur

 










#extension GL_ARB_texture_rectangle: enable

uniform sampler2DRect sceneSampler;
uniform sampler2DRect depthTexture; <------------ here is veltex actually

uniform int g_numSamples;
uniform float velocityScale;

void main()
{
vec2 scale = vec2(1024.0,768.0);

vec2 velocity = texture2DRect(depthTexture, gl_FragCoord.xy ).rg;

velocity = pow(velocity, 1.0 / 3.0);
velocity = velocity * 2.0 - 1.0;
velocity*=velocityScale;

// float speed = length(velocity*scale);
int nSamples = g_numSamples;//(int)clamp(speed, 1.0, (float)g_numSamples);

vec4 oResult = texture2DRect(sceneSampler, gl_FragCoord.xy);

for (int i = 1; i < nSamples; ++i)
{
vec2 offset = velocity * (float(i) / float(nSamples - 1) - 0.5);
oResult += texture2DRect(sceneSampler,gl_FragCoord.xy + offset*scale);
}

gl_FragColor = oResult / float(nSamples);

//gl_FragColor=velocity.xyxy;
}

 

velocity tex is GL_RG32F

 

 

float currentFps = 1.0/timer->frametime;
float targetFps = 30;
float velocityScale = currentFps / targetFps;

maxSamples = 16;

 

 

float oldMVP3D[16];
MultMatrices_GL(world->current_cam->prevModelview,world->current_cam->Projection4x4GL,oldMVP3D);
glUniformMatrix4fvARB(constructGBufferShader.m_paramsHash["prevMVP"], 1, GL_FALSE, oldMVP3D);

 

 

void camera_s::BuildModelview()
{

for(i=0;i<16;i++)
        prevModelview[i]=modelview[i];


Mat4x4 result;
result.identity();

// in q3 +z is up, -z is down
result.rotateX(-pitch);
result.rotateY(-roll);
result.rotateZ(-yaw);
result.translate(-pos[0],-pos[1],-pos[2]);

result.ConvertToGl(modelview);
}

Edited by evillgames

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this