Update leenkx/Shaders/std/tonemap.glsl
This commit is contained in:
		| @ -1,4 +1,3 @@ | ||||
|  | ||||
| vec3 uncharted2Tonemap(const vec3 x) { | ||||
| 	const float A = 0.15; | ||||
| 	const float B = 0.50; | ||||
| @ -36,3 +35,51 @@ vec3 acesFilm(const vec3 x) { | ||||
| vec3 tonemapReinhard(const vec3 color) { | ||||
| 	return color / (color + vec3(1.0)); | ||||
| } | ||||
|  | ||||
| // Blender AgX Implementation  | ||||
| // Troy Sobotka https://github.com/sobotka/AgX | ||||
|  | ||||
| // AGX Simple | ||||
| vec3 tonemapAgXSimple(vec3 x) { | ||||
|     const vec3 AgX_A = vec3(0.5, 0.5, 0.5); | ||||
|     const vec3 AgX_B = vec3(0.5, 0.5, 0.5); | ||||
|     const vec3 AgX_C = vec3(1.0, 1.0, 1.0); | ||||
|     const vec3 AgX_D = vec3(0.0, 0.0, 0.0); | ||||
|     const vec3 AgX_E = vec3(0.0, 0.0, 0.0); | ||||
|     const vec3 AgX_F = vec3(1.0, 1.0, 1.0); | ||||
|      | ||||
|     return (x * (AgX_A * x + AgX_B)) / (x * (AgX_C * x + AgX_D) + AgX_E) + AgX_F; | ||||
| } | ||||
|  | ||||
| // AGX Full Contrast Approx | ||||
| vec3 agxDefaultContrastApprox(vec3 x) { | ||||
|     vec3 x2 = x * x; | ||||
|     vec3 x4 = x2 * x2; | ||||
|     return + 15.5     * x4 * x2 | ||||
|            - 40.14    * x4 * x | ||||
|            + 31.96    * x4 | ||||
|            - 6.868    * x2 * x | ||||
|            + 0.4298   * x2 | ||||
|            + 0.1191   * x | ||||
|            - 0.00232; | ||||
| } | ||||
| // AGX Full Look | ||||
| vec3 agxLook(vec3 x, float strength) { | ||||
|     const vec3 slope = vec3(1.0); | ||||
|     const vec3 power = vec3(1.35); | ||||
|     const vec3 sat = vec3(1.4); | ||||
|     vec3 lw = vec3(0.2126, 0.7152, 0.0722); | ||||
|     float luma = dot(x, lw); | ||||
|     return pow(x * slope, power) * sat - (pow(luma * slope, power) * (sat - 1.0)); | ||||
| } | ||||
|  | ||||
| // AGX Full | ||||
| vec3 tonemapAgXFull(vec3 x) { | ||||
|     // x *= 2.0 * (1.0/0.8); // Brightness scale to match Blender's default | ||||
|     x = clamp(x, 0.0, 65504.0); | ||||
|     x = log2(x + 1.0); | ||||
|     x = agxDefaultContrastApprox(clamp(x * 0.5 - 10.5, -12.0, 12.0));     | ||||
|     x = mix(x, agxLook(x, 0.5), 0.5); | ||||
|     x = clamp(x, 0.0, 1.0); | ||||
|     return pow(x, vec3(1.0/2.2));  | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user