139 lines
3.2 KiB
GLSL
139 lines
3.2 KiB
GLSL
// Wrapper to allow easy sampling for material texture layers
|
|
uniform sampler2D tex_layer_0;
|
|
uniform sampler2D tex_layer_1;
|
|
uniform sampler2D tex_layer_2;
|
|
uniform sampler2D tex_layer_3;
|
|
uniform sampler2D tex_layer_4;
|
|
uniform sampler2D tex_layer_5;
|
|
|
|
#define HIGH_SAMPLING 4.0
|
|
#define MEDIUM_SAMPLING 2.0
|
|
#define LOW_SAMPLING 1.0
|
|
|
|
vec4 sampleTextureLayer0(vec2 uv)
|
|
{
|
|
return texture(tex_layer_0, uv);
|
|
}
|
|
|
|
vec4 multi_sampleTextureLayer0(vec2 uv, float distance)
|
|
{
|
|
|
|
vec4 l_col = sampleTextureLayer0(uv * LOW_SAMPLING);
|
|
vec4 m_col = sampleTextureLayer0(uv * MEDIUM_SAMPLING);
|
|
vec4 h_col = sampleTextureLayer0(uv * HIGH_SAMPLING);
|
|
|
|
/* debug
|
|
l_col = vec4(1.0, 0.0, 0.0, 1.0);
|
|
m_col = vec4(0.0, 1.0, 0.0, 1.0);
|
|
h_col = vec4(0.0, 0.0, 1.0, 1.0);*/
|
|
|
|
// From Low to medium
|
|
float factor = distance * 0.02;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
vec4 f_col = mix(m_col, l_col, factor);
|
|
|
|
// From medium to high
|
|
factor = distance * 0.1;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
|
|
f_col = mix(h_col, f_col, factor);
|
|
|
|
return f_col;
|
|
}
|
|
|
|
vec4 sampleTextureLayer1(vec2 uv)
|
|
{
|
|
return texture(tex_layer_1, uv);
|
|
}
|
|
|
|
vec4 sampleTextureLayer2(vec2 uv)
|
|
{
|
|
return texture(tex_layer_2, uv);
|
|
}
|
|
|
|
vec4 multi_sampleTextureLayer2(vec2 uv, float distance)
|
|
{
|
|
|
|
vec4 l_col = sampleTextureLayer2(uv * LOW_SAMPLING);
|
|
vec4 m_col = sampleTextureLayer2(uv * MEDIUM_SAMPLING);
|
|
vec4 h_col = sampleTextureLayer2(uv * HIGH_SAMPLING);
|
|
|
|
// From Low to medium
|
|
float factor = distance * 0.02;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
vec4 f_col = mix(m_col, l_col, factor);
|
|
|
|
// From medium to high
|
|
factor = distance * 0.1;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
|
|
f_col = mix(h_col, f_col, factor);
|
|
|
|
return f_col;
|
|
}
|
|
|
|
vec4 sampleTextureLayer3(vec2 uv)
|
|
{
|
|
return texture(tex_layer_3, uv);
|
|
}
|
|
|
|
vec4 multi_sampleTextureLayer3(vec2 uv, float distance)
|
|
{
|
|
|
|
vec4 l_col = sampleTextureLayer3(uv * LOW_SAMPLING);
|
|
vec4 m_col = sampleTextureLayer3(uv * MEDIUM_SAMPLING);
|
|
vec4 h_col = sampleTextureLayer3(uv * HIGH_SAMPLING);
|
|
|
|
// From Low to medium
|
|
float factor = distance * 0.02;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
vec4 f_col = mix(m_col, l_col, factor);
|
|
|
|
// From medium to high
|
|
factor = distance * 0.1;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
|
|
f_col = mix(h_col, f_col, factor);
|
|
|
|
return f_col;
|
|
}
|
|
|
|
vec4 sampleTextureLayer4(vec2 uv)
|
|
{
|
|
return texture(tex_layer_4, uv);
|
|
}
|
|
|
|
vec4 multi_sampleTextureLayer4(vec2 uv, float distance)
|
|
{
|
|
|
|
vec4 l_col = sampleTextureLayer4(uv * LOW_SAMPLING);
|
|
vec4 m_col = sampleTextureLayer4(uv * MEDIUM_SAMPLING);
|
|
vec4 h_col = sampleTextureLayer4(uv * HIGH_SAMPLING);
|
|
|
|
// From Low to medium
|
|
float factor = distance * 0.02;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
vec4 f_col = mix(m_col, l_col, factor);
|
|
|
|
// From medium to high
|
|
factor = distance * 0.1;
|
|
factor = pow(factor, 2.5);
|
|
factor = clamp(factor, 0.0, 1.0);
|
|
|
|
f_col = mix(h_col, f_col, factor);
|
|
|
|
return f_col;
|
|
}
|
|
|
|
vec4 sampleTextureLayer5(vec2 uv)
|
|
{
|
|
return texture(tex_layer_5, uv);
|
|
}
|