Skip to content
This repository has been archived by the owner on Oct 2, 2020. It is now read-only.

Commit

Permalink
Tonemapping improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
WhyAreAllTheseTaken committed Nov 14, 2019
1 parent 7f92310 commit ed57728
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 5 deletions.
8 changes: 5 additions & 3 deletions RPGOnline2/shaders/hdr.frg
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@ uniform sampler2D texel;

uniform float exposure;
uniform float gamma;
uniform float pre_map_curve;
uniform float post_map_multiply;

void main() {
vec2 loc = gl_TexCoord[0].st;
vec4 hdrColor = texture2D(texel, loc);

vec3 hdrColor2 = pow(hdrColor.rgb, vec3(1.5));
vec3 hdrColor2 = pow(hdrColor.rgb, vec3(pre_map_curve));

vec3 mapped = vec3(1.0) - exp(-hdrColor2 * exposure);

mapped = mapped * 1.9;

mapped = pow(mapped, vec3(1.0 / gamma));

mapped = mapped * post_map_multiply;

gl_FragColor = vec4(mapped, 1.0);
}
32 changes: 30 additions & 2 deletions RPGOnline2/src/io/github/tomaso2468/rpgonline/post/HDRPost.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@
import io.github.tomaso2468.rpgonline.render.Shader;

public class HDRPost extends ShaderPost {
private float exposure_last = Float.NaN;
private float exposure = 1f;
private float gamma_last = Float.NaN;
private float gamma = 1.2f;
private float pre_map_curve_last = Float.NaN;
private float pre_map_curve = 1.7f;
private float post_map_mul_last = Float.NaN;
private float post_map_mul = 1.45f;

public HDRPost() {
super(HDRPost.class.getResource("/generic.vrt"), HDRPost.class.getResource("/hdr.frg"));
Expand All @@ -13,8 +19,22 @@ public HDRPost() {
@Override
public void updateShader(Shader shader) {
super.updateShader(shader);
shader.setUniform("exposure", exposure);
shader.setUniform("gamma", gamma);
if (exposure != exposure_last) {
shader.setUniform("exposure", exposure);
this.exposure_last = exposure;
}
if (gamma != gamma_last) {
shader.setUniform("gamma", gamma);
this.gamma_last = gamma;
}
if (pre_map_curve != pre_map_curve_last) {
shader.setUniform("pre_map_curve", pre_map_curve);
this.pre_map_curve_last = pre_map_curve;
}
if (post_map_mul != post_map_mul_last) {
shader.setUniform("post_map_multiply", post_map_mul);
this.pre_map_curve_last = post_map_mul;
}
}

public float getExposure() {
Expand All @@ -32,4 +52,12 @@ public float getGamma() {
public void setGamma(float gamma) {
this.gamma = gamma;
}

public float getPreMapCurve() {
return pre_map_curve;
}

public void setPreMapCurve(float pre_map) {
this.pre_map_curve = pre_map;
}
}

0 comments on commit ed57728

Please sign in to comment.