33#include "./psycho_test17_custom.hlsl"
44#include "./shared.h"
55
6-
76float NR (float x, float sigma, float n) {
87 float ax = abs (x);
98 float xn = pow (max (ax, 0.0f ), n);
@@ -221,34 +220,39 @@ float3 CustomPsychoV17Peak(
221220 float peak_value,
222221 float mid_gray_scale = 1.f ,
223222 int gamut_compression_mode = 1 ) {
224- bool valid_current_average = (current_average > 0.0f ) && !isnan (current_average) && !isinf (current_average);
225- bool valid_target_average = (target_average > 0.0f ) && !isnan (target_average) && !isinf (target_average);
226-
227- if (!valid_target_average) {
228- return 0.0f .xxx;
223+ if (!(target_average > 0.0f )) {
224+ return 0.0f ;
229225 }
230226
231- if (!valid_current_average ) {
227+ if (!(current_average > 0.0f ) ) {
232228 current_average = target_average;
233229 }
234230
235231 float3 bt709_scene = untonemapped_bt709 * RENODX_TONE_MAP_EXPOSURE;
236- bool has_valid_anchor = valid_current_average && valid_target_average;
237- float boosted = has_valid_anchor ? (target_average / current_average) : 1.0f ;
238- if (has_valid_anchor) {
239- bt709_scene *= boosted;
232+
233+ if (target_average >= peak_value) {
234+ return min (bt709_scene, peak_value);
240235 }
241236
237+ float boost = 1.f ;
238+ if (!(current_average > 0.0f )) {
239+ current_average = target_average;
240+ } else {
241+ boost = renodx::math::DivideSafe (target_average, current_average, 1.0f );
242+ }
243+
244+ bt709_scene *= boost;
245+
242246 float3 lms_in = renodx::color ::lms::from::BT709 (bt709_scene);
243247 float yf_input = renodx::color ::yf::from::LMS (lms_in);
244248 float yf_midgray = renodx::color ::yf::from::BT709 (0.18f );
245249 float yf_target = yf_input;
246250
247251 if (RENODX_TONE_MAP_HIGHLIGHTS != 1.f ) {
248- yf_target = renodx::color ::grade::Highlights (yf_target, RENODX_TONE_MAP_HIGHLIGHTS, yf_midgray, 1.f );
252+ yf_target = renodx::color ::grade::Highlights (yf_target, RENODX_TONE_MAP_HIGHLIGHTS, yf_midgray);
249253 }
250254 if (RENODX_TONE_MAP_SHADOWS != 1.f ) {
251- yf_target = renodx::color ::grade::Shadows (yf_target, RENODX_TONE_MAP_SHADOWS, yf_midgray, 1.f );
255+ yf_target = renodx::color ::grade::Shadows (yf_target, RENODX_TONE_MAP_SHADOWS, yf_midgray);
252256 }
253257 if (RENODX_TONE_MAP_CONTRAST != 1.f ) {
254258 yf_target = renodx::color ::grade::ContrastSafe (yf_target, RENODX_TONE_MAP_CONTRAST, yf_midgray);
@@ -257,15 +261,10 @@ float3 CustomPsychoV17Peak(
257261
258262 float yf_scale = renodx::math::DivideSafe (yf_target, yf_input, 1.f );
259263 bt709_scene *= yf_scale;
260- if (has_valid_anchor) {
261- bt709_scene /= boosted;
262- }
263264
264- if (target_average >= peak_value) {
265- return min (bt709_scene, peak_value.xxx);
266- }
265+ bt709_scene /= boost;
267266
268- float anchor_in = has_valid_anchor ? current_average : target_average ;
267+ float anchor_in = current_average;
269268 float anchor_out = target_average;
270269
271270 return renodx::tonemap::psycho::psychotm_test17 (
@@ -288,7 +287,7 @@ float3 CustomPsychoV17Peak(
288287 gamut_compression_mode);
289288}
290289
291- float3 CustomPsychoV17AutoExposure (float3 untonemapped_bt709, float peak, float mid_gray_scale,float current_average, float target_average, bool is_sdr = false ) {
290+ float3 CustomPsychoV17AutoExposure (float3 untonemapped_bt709, float peak, float mid_gray_scale, float current_average, float target_average, bool is_sdr = false ) {
292291 return CustomPsychoV17Peak (
293292 untonemapped_bt709,
294293 current_average,
@@ -299,24 +298,19 @@ float3 CustomPsychoV17AutoExposure(float3 untonemapped_bt709, float peak, float
299298}
300299
301300float3 ProcessTonemap (float3 untonemapped_bt709, float calculated_peak, float mid_gray_scale, float current_average, float target_average, bool is_sdr = false ) {
302- const float white_clip = 100.f ;
303- const int white_curve_mode = 1 ;
301+ if (RENODX_TONE_MAP_TYPE == 0.f ) {
302+ return untonemapped_bt709;
303+ }
304304
305305 mid_gray_scale = lerp (1.f , mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
306306
307- float3 output_color = untonemapped_bt709;
308- if (RENODX_TONE_MAP_TYPE == 1.f ) {
309-
310- output_color = CustomPsychoV17AutoExposure (
311- output_color,
312- calculated_peak,
313- mid_gray_scale,
314- current_average,
315- target_average,
316- is_sdr);
317-
318- }
319- return output_color;
307+ return CustomPsychoV17AutoExposure (
308+ untonemapped_bt709,
309+ calculated_peak,
310+ mid_gray_scale,
311+ current_average,
312+ target_average,
313+ is_sdr);
320314}
321315
322316float3 CustomTonemap (float3 untonemapped_bt709, float mid_gray_scale = 1.f , float current_average = 0.18f , float target_average = 0.18f ) {
@@ -335,7 +329,7 @@ float3 CustomTonemap(float3 untonemapped_bt709, float mid_gray_scale = 1.f, floa
335329 return output_color;
336330}
337331
338- float3 CustomTonemapSDR (float3 untonemapped_bt709, float mid_gray_scale, float current_average, float target_average) {
332+ float3 CustomTonemapSDR (float3 untonemapped_bt709, float mid_gray_scale, float current_average = 0.18f , float target_average = 0.18f ) {
339333 float calculated_peak = 1.f ;
340334 calculated_peak = CUSTOM_SDR_BLACK_CRUSH_FIX == 1 ? renodx::color ::correct::GammaSafe (calculated_peak) : calculated_peak;
341335
0 commit comments