@@ -117,27 +117,34 @@ uniform float exposure;
117
117
uniform float tonemap_mix;
118
118
uniform int tonemap_type;
119
119
120
+
120
121
vec3 toneMap(vec3 color)
121
122
{
122
123
#ifndef NO_POST
123
- float exp_scale = texture(exposureMap, vec2 (0.5 ,0.5 )).r;
124
-
125
- color *= exposure * exp_scale;
124
+ vec3 linear_input_color = color;
126
125
127
- vec3 clamped_color = clamp (color.rgb, vec3 (0.0 ), vec3 (1.0 ));
126
+ float exp_scale = texture(exposureMap, vec2 (0.5 ,0.5 )).r;
127
+ float final_exposure = exposure * exp_scale;
128
+ vec3 exposed_color = color * final_exposure;
128
129
130
+ vec3 tonemapped_color = exposed_color;
129
131
switch (tonemap_type)
130
132
{
131
133
case 0 :
132
- color = PBRNeutralToneMapping(color );
134
+ tonemapped_color = PBRNeutralToneMapping(exposed_color );
133
135
break ;
134
136
case 1 :
135
- color = toneMapACES_Hill(color );
137
+ tonemapped_color = toneMapACES_Hill(exposed_color );
136
138
break ;
137
139
}
138
140
139
- // mix tonemapped and linear here to provide adjustment
140
- color = mix (clamped_color, color, tonemap_mix);
141
+ vec3 exposed_linear_input = linear_input_color * final_exposure;
142
+ color = mix (exposed_linear_input, tonemapped_color, tonemap_mix);
143
+
144
+ color = clamp (color, 0.0 , 1.0 );
145
+ #else
146
+ color *= exposure * texture(exposureMap, vec2 (0.5 ,0.5 )).r;
147
+ color = clamp (color, 0.0 , 1.0 );
141
148
#endif
142
149
143
150
return color;
@@ -147,20 +154,24 @@ vec3 toneMap(vec3 color)
147
154
vec3 toneMapNoExposure(vec3 color)
148
155
{
149
156
#ifndef NO_POST
150
- vec3 clamped_color = clamp ( color.rgb, vec3 ( 0.0 ), vec3 ( 1.0 )) ;
157
+ vec3 linear_input_color = color;
151
158
159
+ vec3 tonemapped_color = color;
152
160
switch (tonemap_type)
153
161
{
154
162
case 0 :
155
- color = PBRNeutralToneMapping(color);
163
+ tonemapped_color = PBRNeutralToneMapping(color);
156
164
break ;
157
165
case 1 :
158
- color = toneMapACES_Hill(color);
166
+ tonemapped_color = toneMapACES_Hill(color);
159
167
break ;
160
168
}
161
169
162
- // mix tonemapped and linear here to provide adjustment
163
- color = mix (clamped_color, color, tonemap_mix);
170
+ color = mix (linear_input_color, tonemapped_color, tonemap_mix);
171
+
172
+ color = clamp (color, 0.0 , 1.0 );
173
+ #else
174
+ color = clamp (color, 0.0 , 1.0 );
164
175
#endif
165
176
166
177
return color;
0 commit comments