swwmgz_m/shaders/glsl/Envmap.fp

43 lines
1.2 KiB
GLSL

// equirectangular envmap + gradient rim
#define RECIPROCAL_PI2 0.15915494
#ifndef RIMSTEP
#define RIMSTEP .5
#endif
#ifndef ENVFACT
#define ENVFACT 1.
#endif
#ifndef RIMFACT
#define RIMFACT 1.
#endif
void SetupMaterial( inout Material mat )
{
vec3 norm = normalize(vWorldNormal.xyz);
vec3 eye = normalize(uCameraPos.xyz-pixelpos.xyz);
vec3 rvec = normalize(reflect(eye,norm));
vec2 uv = vec2(atan(rvec.z,rvec.x)*RECIPROCAL_PI2+.5,asin(rvec.y)*RECIPROCAL_PI2+.5);
vec2 uv2 = vec2(atan(rvec.z,abs(rvec.x))*RECIPROCAL_PI2+.5,asin(rvec.y)*RECIPROCAL_PI2+.5);
vec3 envcol = textureGrad(tex,uv,dFdx(uv2),dFdy(uv2)).rgb*ENVFACT;
#ifdef RIM_LIGHTING
float rim = smoothstep(RIMSTEP,1.,1.-abs(dot(eye,norm)));
vec3 rimcol = texture(rimtex,vec2(.25+.5*rim,.5)).rgb;
envcol = mix(envcol,rimcol,rim*RIMFACT);
#endif
#ifdef BARRIER_MAP
vec3 grad = texture(bartex,vec2(0.,vTexCoord.t*5.+timer)).rgb;
envcol = (envcol+grad)*.25;
#endif
mat.Base = vec4(envcol,1.);
mat.Normal = ApplyNormalMap(vTexCoord.st);
}
vec4 ProcessLight( Material mat, vec4 color )
{
#ifdef AMBIENT_GLOW
float glow = .75+.25*sin(timer*8);
return vec4(vec3(glow),color.a);
#else
return color;
#endif
}