// Common color space and tone mapping functions. // sRGB to Linear approximation // Note: Assumes input is in sRGB color space. fn sRGB(t: vec3) -> vec3 { return mix(1.055 * pow(t, vec3(1.0/2.4)) - 0.055, 12.92 * t, step(t, vec3(0.0031308))); } // ACES Filmic Tone Mapping (Approximate) // A common tone mapping algorithm used in games and film. fn aces_approx(v_in: vec3) -> vec3 { var v = max(v_in, vec3(0.0)); v *= 0.6; let a = 2.51; let b = 0.03; let c = 2.43; let d = 0.59; let e = 0.14; return clamp((v * (a * v + b)) / (v * (c * v + d) + e), vec3(0.0), vec3(1.0)); } // HSV to RGB conversion const hsv2rgb_K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); fn hsv2rgb(c: vec3) -> vec3 { let p = abs(fract(c.xxx + hsv2rgb_K.xyz) * 6.0 - hsv2rgb_K.www); return c.z * mix(hsv2rgb_K.xxx, clamp(p - hsv2rgb_K.xxx, vec3(0.0), vec3(1.0)), c.y); }