playcanvas
Version:
PlayCanvas WebGL game engine
4 lines (2 loc) • 1.05 kB
JavaScript
var tonemappingAces2PS = "\nuniform exposure: f32;\n\n// ACES approximation by Stephen Hill\n\n// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\nconst ACESInputMat: mat3x3f = mat3x3f(\n vec3f(0.59719, 0.35458, 0.04823),\n vec3f(0.07600, 0.90834, 0.01566),\n vec3f(0.02840, 0.13383, 0.83777)\n);\n\n// ODT_SAT => XYZ => D60_2_D65 => sRGB\nconst ACESOutputMat: mat3x3f = mat3x3f(\n vec3f( 1.60475, -0.53108, -0.07367),\n vec3f(-0.10208, 1.10813, -0.00605),\n vec3f(-0.00327, -0.07276, 1.07602)\n);\n\nfn RRTAndODTFit(v: vec3f) -> vec3f {\n let a: vec3f = v * (v + vec3f(0.0245786)) - vec3f(0.000090537);\n let b: vec3f = v * (vec3f(0.983729) * v + vec3f(0.4329510)) + vec3f(0.238081);\n return a / b;\n}\n\nfn toneMap(color: vec3f) -> vec3f {\n var c: vec3f = color * (uniform.exposure / 0.6);\n c = ACESInputMat * c;\n\n // Apply RRT and ODT\n c = RRTAndODTFit(c);\n c = ACESOutputMat * c;\n\n // Clamp to [0, 1]\n return clamp(c, vec3f(0.0), vec3f(1.0));\n}\n";
export { tonemappingAces2PS as default };