mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
37 lines
1.2 KiB
GLSL
37 lines
1.2 KiB
GLSL
|
|
|
|
|
|
in vec4 v_color; // lightCol
|
|
in vec4 v_generic; // [rgb gamma + a gamma, shadiness, 0, 0]
|
|
in vec2 v_texCoords;
|
|
uniform sampler2D u_texture;
|
|
out vec4 fragColor;
|
|
|
|
const vec2 boolean = vec2(0.0, 1.0);
|
|
|
|
uniform vec4 shadeCol;
|
|
//uniform float shadiness = 1.0;
|
|
|
|
vec4 shadeVec = vec4(vec3(1.0 + 3.333 * v_generic.y), 1.0);
|
|
|
|
void main() {
|
|
vec4 cloudCol = v_color;
|
|
float rgbGamma = uintBitsToFloat(floatBitsToUint(v_generic.x) & 0xffff0000u);
|
|
float aGamma = uintBitsToFloat((floatBitsToUint(v_generic.x) & 0x0000ffffu) << 16);
|
|
vec4 gamma = vec4(rgbGamma, rgbGamma, rgbGamma, aGamma);
|
|
|
|
vec4 range = vec4(vec3(min(rgbGamma, 1.0 / rgbGamma)), 1.0);
|
|
vec4 offset = vec4(vec3(max(0.0, 1.0 - rgbGamma)), 0.0);
|
|
|
|
// cloud colour format:
|
|
// r: bw diffuse map, g: normal, b: normal, a: bw diffuse alpha
|
|
vec4 inCol = texture(u_texture, v_texCoords);
|
|
vec4 rawCol0 = range * pow(inCol, gamma) + offset;
|
|
vec4 rawCol = pow(rawCol0, shadeVec);
|
|
|
|
// do gradient mapping here
|
|
vec4 ccol = mix(shadeCol, cloudCol, rawCol.r);
|
|
vec4 outCol = fma(ccol, boolean.yyyx, rawCol * boolean.xxxy);
|
|
|
|
fragColor = outCol * fma(cloudCol, boolean.xxxy, boolean.yyyx);
|
|
} |