#version 330 core in vec2 UV; in vec3 normIn; in vec3 camDirIn; in vec3 lightDirIn; out vec4 color; uniform sampler2D rendertex; uniform sampler2D scanlinestex; const float Tuning_Overscan = 1.08; const float Tuning_Dimming = 0.0; const float Tuning_Satur = 1.13; const float Tuning_ReflScalar = 0.3; const float Tuning_Barrel = 0;//0.12; const float Tuning_Scanline_Brightness = 0.55; const float Tuning_Scanline_Opacity = 0.55; const float Tuning_Diff_Brightness = 0.75; const float Tuning_Spec_Brightness = 0.5;//0.35; const float Tuning_Spec_Power = 50.0; const float Tuning_Fres_Brightness = 0.0;//1.0; uniform vec2 resolution; uniform vec3 frameColor; vec4 sampleCRT(vec2 uv) { vec2 CRTMask_Scale = vec2(320.0,200.0) / vec2(2.0, 1.0); vec2 scanuv = uv * CRTMask_Scale; vec3 scantex = texture(scanlinestex, scanuv).rgb; scantex += Tuning_Scanline_Brightness; scantex = mix(vec3(1,1,1), scantex, Tuning_Scanline_Opacity); vec2 overscanuv = (uv * Tuning_Overscan) - ((Tuning_Overscan - 1.0f) * 0.5f); overscanuv = overscanuv - vec2(0.5, 0.5); float rsq = (overscanuv.x*overscanuv.x) + (overscanuv.y*overscanuv.y); overscanuv = overscanuv + (overscanuv * (Tuning_Barrel * rsq)) + vec2(0.5,0.5); vec3 comptex = texture(rendertex, overscanuv).rgb; vec4 emissive = vec4(comptex * scantex, 1); float desat = dot(vec4(0.299, 0.587, 0.114, 0.0), emissive); emissive = mix(vec4(desat, desat, desat, 1), emissive, Tuning_Satur); return emissive; } void main() { vec3 norm = normalize(normIn); vec3 camDir = normalize(camDirIn); vec3 lightDir = normalize(lightDirIn); float diffuse = clamp(dot(norm, lightDir), 0.0f, 1.0f); vec4 colordiff = vec4(0.175, 0.15, 0.2, 1) * diffuse * Tuning_Diff_Brightness; vec3 halfVec = normalize(lightDir + camDir); float spec = clamp(dot(norm, halfVec), 0.0f, 1.0f); spec = pow(spec, Tuning_Spec_Power); vec4 colorspec = vec4(0.25, 0.25, 0.25, 1) * spec * Tuning_Spec_Brightness; float fres = 1.0 - dot(camDir, norm); fres = (fres*fres) * Tuning_Fres_Brightness; vec4 colorfres = vec4(0.45, 0.4, 0.5, 1) * fres; vec4 emissive = sampleCRT(UV); vec4 nearfinal = colorfres + colordiff + colorspec + emissive; //vec4 final = nearfinal * mix(vec4(1,1,1,1), vec4(0,0,0, 0), Tuning_Dimming); color = nearfinal; }