swwmgz_m/shaders/glsl/Envmap.fp

25 lines
970 B
GLSL

// equirectangular envmap + gradient rim
#define RECIPROCAL_PI2 0.15915494
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*EnvParams.x;
float rim = smoothstep(EnvParams.z,1.,1.-abs(dot(eye,norm)));
vec3 rimcol = textureLod(rimtex,vec2(.25+.5*rim,.5),0.).rgb;
envcol = mix(envcol,rimcol,rim*EnvParams.y);
#ifdef BARRIER_MAP
vec3 grad = texture(bartex,vec2(0.,vTexCoord.t*5.+timer)).rgb;
envcol = (envcol+grad)*.25;
#endif
mat.Base = vec4(envcol,1.);
#ifdef AMBIENT_GLOW
float glow = .75+.25*sin(timer*8.);
mat.Glow = vec4(vec3(glow),1.);
#endif
mat.Normal = ApplyNormalMap(vTexCoord.st);
}