Browse Source

added parametrable hue/brightness/contrast to postfx and found a pretty decent scanline scheme

master
parent
commit
956e5d5c59
2 changed files with 33 additions and 29 deletions
  1. +24
    -19
      neercs/video/postfx.lolfx
  2. +9
    -10
      neercs/video/render.cpp

+ 24
- 19
neercs/video/postfx.lolfx View File

@@ -17,6 +17,7 @@ uniform vec2 screen_size;
uniform float time;
uniform float deform;
uniform vec3 filter;
uniform vec3 color;
uniform vec3 retrace;
uniform vec2 offset;
uniform float noise;
@@ -27,7 +28,6 @@ uniform vec4 moire_v;
uniform bool scanline;
uniform vec4 scanline_h;
uniform vec4 scanline_v;
uniform vec2 smooth;
uniform float flash;
uniform float sync;

@@ -67,8 +67,8 @@ void main(void)

vec2 rnd=vec2(rand(vec2(p.x+time,p.y-time)),rand(vec2(p.x-time,p.y+time)));

vec2 o=(offset-offset*2.0*rnd.x)/screen_size; // offset
vec3 source=get_color(texture,z+o); // offset added to source
vec2 o=(offset-offset*2.0*rnd.x)/screen_size; // offset
vec3 source=get_color(texture,z+o); // offset added to source
vec3 glass1=get_color(texture,z1);
vec3 glass2=get_color(texture,z2);

@@ -79,33 +79,38 @@ void main(void)
ca.y=get_color(texture,vec2(z.x+o.x ,z.y+o.y)).y;
ca.z=get_color(texture,vec2(z.x+o.x+v,z.y+o.y)).z;

vec3 color=source+glass1*glass1*0.25+glass2*glass2*0.25;
vec3 c=source+glass1*glass1*0.25+glass2*glass2*0.25;

color*=filter; // filter
color=smoothstep(smooth.x,smooth.y,color); // smoothstep
color+=flash; // flash
color+=ca; // chromatic aberration
color-=retrace.x*mod(z.y*retrace.y+time*retrace.z,1.0); // retrace
color-=(vec3(rnd.x-rnd.y))*noise; // noise
float a=(c.x+c.y+c.z)/3.0;
vec3 g=vec3(a,a,a);
c=mix(c,g,color.z); // gray
c*=filter; // filter
c*=color.x; // brightness
c=0.5+(c-0.5)*color.y; // contrast

c+=flash; // flash
c+=ca; // chromatic aberration
c-=retrace.x*mod(z.y*retrace.y+time*retrace.z,1.0); // retrace
c-=(vec3(rnd.x-rnd.y))*noise; // noise
if(moire)
{
color*=moire_h.x+moire_h.y*sin(z.y*float(screen_size.y*moire_h.z))*sin(0.5+z.x*float(screen_size.x*moire_h.w)); // moire h
color*=moire_v.x+moire_v.y*sin(z.x*float(screen_size.x*moire_v.z))*sin(0.5+z.y*float(screen_size.y*moire_v.w)); // moire v
c*=moire_h.x+moire_h.y*sin(z.y*float(screen_size.y*moire_h.z))*sin(0.5+z.x*float(screen_size.x*moire_h.w)); // moire h
c*=moire_v.x+moire_v.y*sin(z.x*float(screen_size.x*moire_v.z))*sin(0.5+z.y*float(screen_size.y*moire_v.w)); // moire v
}
else
{
color*=(moire_h.x+moire_v.x)*0.5;
c*=(moire_h.x+moire_v.x)*0.5;
}
if(scanline)
{
color*=scanline_h.x+scanline_h.y*cos(z.y*float(screen_size.y*scanline_h.z+scanline_h.w)); // scanline h
color*=scanline_v.x+scanline_v.y*cos(z.x*float(screen_size.x*scanline_v.z+scanline_v.w)); // scanline v
c*=scanline_h.x+scanline_h.y*cos(z.y*float(screen_size.y*scanline_h.z+scanline_h.w)); // scanline h
c*=scanline_v.x+scanline_v.y*cos(z.x*float(screen_size.x*scanline_v.z+scanline_v.w)); // scanline v
}
else
{
color*=(scanline_h.x+scanline_v.x)*0.5;
c*=(scanline_h.x+scanline_v.x)*0.5;
}
color*=mask; // vignetting
color*=letterbox(z,-0.75,0.95); // letnoiseterbox
gl_FragColor=vec4(color,1.0);
c*=mask; // vignetting
c*=letterbox(z,-0.75,0.95); // letnoiseterbox
gl_FragColor=vec4(c,1.0);
}

+ 9
- 10
neercs/video/render.cpp View File

@@ -105,17 +105,17 @@ vec2 glow_small(1.0f,1.0f); // small glow radius [normal,deform]
//---------------------------------[IDEAS] http://www.youtube.com/watch?v=d1qEP2vMe-I
float postfx_deform = 0.625f; // deformation ratio
vec3 postfx_filter(0.875f,0.75f,1.0f);// color filter [red,green,blue]
vec3 postfx_color(1.75f,1.75f,0.5f); // color modifier [brightness,contrast,gray]
vec3 postfx_retrace(0.025f,2.0f,4.0f);// retrace [color,length,speed]
vec2 postfx_offset(3.0f,3.0f); // random line [horizontal,vertical]
float postfx_noise = 0.125f; // noise
float postfx_aberration = 3.0f; // chromatic aberration
bool postfx_moire = true; // moire
vec4 postfx_moire_h(0.75f,-0.25f,1.0f,2.0f);
vec4 postfx_moire_v(0.75f,-0.25f,0.0f,1.0f);
vec4 postfx_moire_h(0.75f,-0.25f,0.0f,1.0f);
vec4 postfx_moire_v(0.75f,-0.25f,1.0f,1.5f);
bool postfx_scanline = true; // scanline
vec4 postfx_scanline_h(0.75f,-0.25f,2.0f,0.0f);// vertical scanline [base,variable,repeat]
vec4 postfx_scanline_v(0.75f, 0.25f,0.0f,2.0f);// horizontal scanline [base,variable,repeat]
vec2 postfx_smoothstep(0.025f,0.625f);// smoothstep [lower,upper]
vec4 postfx_scanline_h(0.75f, 0.25f,0.0f,2.0f);// vertical scanline [base,variable,repeat x,repeat y]
vec4 postfx_scanline_v(0.75f,-0.25f,2.0f,0.0f);// horizontal scanline [base,variable,repeat x,repeat y]

Shader *shader_simple;
Shader *shader_blur_h, *shader_blur_v;
@@ -144,6 +144,7 @@ ShaderUniform shader_postfx_texture,
shader_postfx_time,
shader_postfx_deform,
shader_postfx_filter,
shader_postfx_color,
shader_postfx_retrace,
shader_postfx_offset,
shader_postfx_noise,
@@ -154,7 +155,6 @@ ShaderUniform shader_postfx_texture,
shader_postfx_scanline,
shader_postfx_scanline_h,
shader_postfx_scanline_v,
shader_postfx_smoothstep,
shader_postfx_flash,
shader_postfx_sync;

@@ -239,6 +239,7 @@ int Render::InitDraw(void)
shader_postfx_time = shader_postfx->GetUniformLocation("time");
shader_postfx_deform = shader_postfx->GetUniformLocation("deform");
shader_postfx_filter = shader_postfx->GetUniformLocation("filter");
shader_postfx_color = shader_postfx->GetUniformLocation("color");
shader_postfx_retrace = shader_postfx->GetUniformLocation("retrace");
shader_postfx_offset = shader_postfx->GetUniformLocation("offset");
shader_postfx_noise = shader_postfx->GetUniformLocation("noise");
@@ -249,7 +250,6 @@ int Render::InitDraw(void)
shader_postfx_scanline = shader_postfx->GetUniformLocation("scanline");
shader_postfx_scanline_h = shader_postfx->GetUniformLocation("scanline_h");
shader_postfx_scanline_v = shader_postfx->GetUniformLocation("scanline_v");
shader_postfx_smoothstep = shader_postfx->GetUniformLocation("smooth");
shader_postfx_flash = shader_postfx->GetUniformLocation("flash");
shader_postfx_sync = shader_postfx->GetUniformLocation("sync");

@@ -322,10 +322,9 @@ void Render::TickDraw(float seconds)
m_shader_postfx = !m_shader_postfx;
timer_key = timer;
}
if (Input::GetButtonState(286/*SDLK_F5*/)&&(timer-timer_key>timer_key_repeat))
if (Input::GetButtonState(286/*SDLK_F5*/))
{
Pause();
timer_key = timer;
}

Entity::TickDraw(seconds);
@@ -559,6 +558,7 @@ void Render::Draw3D()
shader_postfx->SetUniform(shader_postfx_time, fx_angle);
shader_postfx->SetUniform(shader_postfx_deform, postfx_deform);
shader_postfx->SetUniform(shader_postfx_filter, postfx_filter);
shader_postfx->SetUniform(shader_postfx_color, postfx_color);
shader_postfx->SetUniform(shader_postfx_retrace, postfx_retrace);
shader_postfx->SetUniform(shader_postfx_offset, postfx_offset);
shader_postfx->SetUniform(shader_postfx_noise, postfx_noise);
@@ -569,7 +569,6 @@ void Render::Draw3D()
shader_postfx->SetUniform(shader_postfx_scanline, postfx_scanline);
shader_postfx->SetUniform(shader_postfx_scanline_h, postfx_scanline_h);
shader_postfx->SetUniform(shader_postfx_scanline_v, postfx_scanline_v);
shader_postfx->SetUniform(shader_postfx_smoothstep, postfx_smoothstep);
shader_postfx->SetUniform(shader_postfx_flash, flash_value);
shader_postfx->SetUniform(shader_postfx_sync, (float)fabs(beat_value*cosf((main_angle-beat_angle)*8.0f)));
fs_quad();


Loading…
Cancel
Save