| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * Copyright (C) 2020, Inria
- * GRAPHDECO research group, https://team.inria.fr/graphdeco
- * All rights reserved.
- *
- * This software is free for non-commercial, research and evaluation use
- * under the terms of the LICENSE.md file.
- *
- * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr
- */
- #version 420
- uniform vec3 lightDir;
- uniform vec3 cameraEye;
- layout(binding=0) uniform sampler2D tex;
- layout(binding=1) uniform sampler2D smTex;
- out vec4 out_color;
- in vec2 vertUV;
- in float vertAO;
- in vec3 VtoF_normal;
- in vec3 vertPos;
- float sRGB2LinF(float inF){
- if(inF<0.04045){
- return inF/12.92;
- }
- else{
- return pow((inF+0.055)/(1.055),2.4);
- }
- }
- float lin2sRGBF(float inF){
-
- if(inF<0.0031308){
- return 12.92*inF;
- }
- else{
- return 1.055*pow(inF,1.0/2.4)-0.055;
- }
-
- }
- vec4 sRGB2Lin(vec4 inVec){
- return vec4(sRGB2LinF(inVec.x),sRGB2LinF(inVec.y),sRGB2LinF(inVec.z),inVec.w);
- }
- vec4 lin2sRGB(vec4 inVec){
- return vec4(lin2sRGBF(inVec.x),lin2sRGBF(inVec.y),lin2sRGBF(inVec.z),inVec.w);
- }
- float getFogFactor(float d)
- {
- const float FogMax = 70.0;
- const float FogMin = 10.0;
- if (d>=FogMax) return 1;
- if (d<=FogMin) return 0;
- return 1 - (FogMax - d) / (FogMax - FogMin);
- }
- void main(void) {
- vec2 uv = vertUV;
- uv.y = 1.0 - uv.y; /// \todo TODO: Why Texture are flipped in y ?
- vec4 sky_color_lin = vec4(0.7,1.0,1.2,1.0)*sRGB2Lin(texture(tex, uv));
- float shadowVal=texture(smTex,gl_FragCoord.xy/textureSize(smTex,0).xy).x;
- vec4 sun_color_lin = max(0.0,dot(VtoF_normal,lightDir))*shadowVal*sRGB2Lin(texture(tex, uv))/(vertAO+0.0001);
- float d = distance(cameraEye, vertPos);
- float alpha = getFogFactor(d);
- vec4 composed_color = lin2sRGB(sun_color_lin+0.1*sky_color_lin);
- out_color = mix(composed_color, vec4(0.5,0.5,0.5,1.0), alpha);
- }
|