25 lines
970 B
GLSL
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);
|
|
}
|