Skip to content

Commit e9fffda

Browse files
committed
feat(crimsondesert): UI overhaul, RR detection, improved midgray adjustment, rendering set to recommended values by default, adjusted/fixed presets
1 parent de2c45c commit e9fffda

8 files changed

Lines changed: 248 additions & 239 deletions

src/games/crimsondesert/addon.cpp

Lines changed: 195 additions & 177 deletions
Large diffs are not rendered by default.

src/games/crimsondesert/common.hlsl

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,6 @@ float3 CustomPsychoV17Peak(
232232
float current_average,
233233
float target_average,
234234
float peak_value,
235-
float mid_gray_scale = 1.f,
236235
int gamut_compression_mode = 1) {
237236
if (!(target_average > 0.0f)) {
238237
return 0.0f;
@@ -272,7 +271,6 @@ float3 CustomPsychoV17Peak(
272271
if (RENODX_TONE_MAP_CONTRAST != 1.f) {
273272
yf_target = renodx::color::grade::ContrastSafe(yf_target, RENODX_TONE_MAP_CONTRAST, yf_midgray);
274273
}
275-
yf_target *= mid_gray_scale;
276274

277275
float yf_scale = renodx::math::DivideSafe(yf_target, yf_input, 1.f);
278276
bt709_scene *= yf_scale;
@@ -302,27 +300,23 @@ float3 CustomPsychoV17Peak(
302300
gamut_compression_mode);
303301
}
304302

305-
float3 CustomPsychoV17AutoExposure(float3 untonemapped_bt709, float peak, float mid_gray_scale, float current_average, float target_average, bool is_sdr = false) {
303+
float3 CustomPsychoV17AutoExposure(float3 untonemapped_bt709, float peak, float current_average, float target_average, bool is_sdr = false) {
306304
return CustomPsychoV17Peak(
307305
untonemapped_bt709,
308306
current_average,
309307
target_average,
310308
peak,
311-
mid_gray_scale,
312309
(int)(!is_sdr));
313310
}
314311

315-
float3 ProcessTonemap(float3 untonemapped_bt709, float calculated_peak, float mid_gray_scale, float current_average, float target_average, bool is_sdr = false) {
312+
float3 ProcessTonemap(float3 untonemapped_bt709, float calculated_peak, float current_average, float target_average, bool is_sdr = false) {
316313
if (RENODX_TONE_MAP_TYPE == 0.f) {
317314
return untonemapped_bt709;
318315
}
319316

320-
mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
321-
322317
float3 output_color = CustomPsychoV17AutoExposure(
323318
untonemapped_bt709,
324319
calculated_peak,
325-
mid_gray_scale,
326320
current_average,
327321
target_average,
328322
is_sdr);
@@ -344,14 +338,14 @@ float3 ProcessTonemap(float3 untonemapped_bt709, float calculated_peak, float mi
344338
return output_color;
345339
}
346340

347-
float3 CustomTonemap(float3 untonemapped_bt709, float mid_gray_scale = 1.f, float current_average = 0.18f, float target_average = 0.18f) {
341+
float3 CustomTonemap(float3 untonemapped_bt709, float current_average = 0.18f, float target_average = 0.18f) {
348342
float calculated_peak = RENODX_PEAK_WHITE_NITS / RENODX_DIFFUSE_WHITE_NITS;
349343

350344
if (RENODX_GAMMA_CORRECTION > 0.f) {
351345
calculated_peak = RENODX_GAMMA_CORRECTION == 1.f ? renodx::color::correct::GammaSafe(calculated_peak, true) : GammaCorrectionByLuminosity(calculated_peak, true).x;
352346
}
353347

354-
float3 output_color = ProcessTonemap(untonemapped_bt709, calculated_peak, mid_gray_scale, current_average, target_average, false);
348+
float3 output_color = ProcessTonemap(untonemapped_bt709, calculated_peak, current_average, target_average, false);
355349

356350
if (RENODX_GAMMA_CORRECTION > 0.f) {
357351
output_color = RENODX_GAMMA_CORRECTION == 1.f ? renodx::color::correct::GammaSafe(output_color) : GammaCorrectionByLuminosity(output_color);
@@ -360,11 +354,11 @@ float3 CustomTonemap(float3 untonemapped_bt709, float mid_gray_scale = 1.f, floa
360354
return output_color;
361355
}
362356

363-
float3 CustomTonemapSDR(float3 untonemapped_bt709, float mid_gray_scale, float current_average = 0.18f, float target_average = 0.18f) {
357+
float3 CustomTonemapSDR(float3 untonemapped_bt709, float current_average = 0.18f, float target_average = 0.18f) {
364358
float calculated_peak = 1.f;
365359
calculated_peak = CUSTOM_SDR_BLACK_CRUSH_FIX == 1 ? renodx::color::correct::GammaSafe(calculated_peak) : calculated_peak;
366360

367-
float3 output_color = ProcessTonemap(untonemapped_bt709, calculated_peak, mid_gray_scale, current_average, target_average, true);
361+
float3 output_color = ProcessTonemap(untonemapped_bt709, calculated_peak, current_average, target_average, true);
368362

369363
return output_color;
370364
}

src/games/crimsondesert/grading/postprocess_material_airdash_0x47366B7B.ps_6_6.hlsl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ float4 main(
254254
tonemap_input_color = tonemap_graph_config.color;
255255
}
256256
#endif
257-
float3 tonemapped_bt709 = CustomTonemapSDR(tonemap_input_color, 1.f, histogram_mean, histogram_target_mean);
257+
float3 tonemapped_bt709 = CustomTonemapSDR(tonemap_input_color, histogram_mean, histogram_target_mean);
258258
#if CUSTOM_TONEMAP_DEBUG
259259
if (tonemap_debug_enabled) {
260260
tonemapped_bt709 = DrawTonemapGraph(tonemapped_bt709, tonemap_graph_config);
@@ -274,15 +274,13 @@ float4 main(
274274

275275
if (RENODX_TONE_MAP_TYPE != 0) {
276276
float3 untonemapped_bt709 = float3(_184, _185, _186);
277-
float histogram_mean = 0.18f;
278-
float histogram_target_mean = 0.18f;
279277
const float mid_gray = 0.18f;
280278
float mid_gray_adjusted = SDRToneMap(mid_gray).x;
281-
float mid_gray_scale = mid_gray_adjusted / mid_gray;
282-
mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
279+
mid_gray_adjusted = lerp(0.18f, mid_gray_adjusted, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
280+
283281
float3 tonemap_input_color = untonemapped_bt709;
284282
#if CUSTOM_TONEMAP_DEBUG
285-
renodx::debug::graph::Config tonemap_graph_config = {false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f};
283+
renodx::debug::graph::Config tonemap_graph_config = { false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f };
286284
if (tonemap_debug_enabled) {
287285
tonemap_graph_config = renodx::debug::graph::DrawStart(
288286
float2(SV_Position.xy) + 0.5f,
@@ -293,15 +291,15 @@ float4 main(
293291
tonemap_input_color = tonemap_graph_config.color;
294292
}
295293
#endif
296-
float3 tonemapped_bt709 = CustomTonemapSDR(tonemap_input_color, mid_gray_scale, histogram_mean, histogram_target_mean);
294+
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray, mid_gray_adjusted);
297295
#if CUSTOM_TONEMAP_DEBUG
298296
if (tonemap_debug_enabled) {
299-
tonemapped_bt709 = DrawTonemapGraph(tonemapped_bt709, tonemap_graph_config);
297+
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);
300298
}
301299
#endif
302-
_396 = tonemapped_bt709.r;
303-
_397 = tonemapped_bt709.g;
304-
_398 = tonemapped_bt709.b;
300+
_396 = output_color.r;
301+
_397 = output_color.g;
302+
_398 = output_color.b;
305303
}
306304

307305
else {

src/games/crimsondesert/grading/postprocess_material_loading_0x2A53B072.ps_6_6.hlsl

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ float4 main(
267267
tonemap_input_color = tonemap_graph_config.color;
268268
}
269269
#endif
270-
float3 output_color = CustomTonemapSDR(tonemap_input_color, 1.f, histogram_mean, histogram_target_mean);
270+
float3 output_color = CustomTonemapSDR(tonemap_input_color, histogram_mean, histogram_target_mean);
271271
#if CUSTOM_TONEMAP_DEBUG
272272
if (tonemap_debug_enabled) {
273273
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);
@@ -287,15 +287,13 @@ float4 main(
287287

288288
if (RENODX_TONE_MAP_TYPE != 0) {
289289
float3 untonemapped_bt709 = float3(_266, _267, _268);
290-
float histogram_mean = 0.18f;
291-
float histogram_target_mean = 0.18f;
292290
const float mid_gray = 0.18f;
293291
float mid_gray_adjusted = SDRToneMap(mid_gray).x;
294-
float mid_gray_scale = mid_gray_adjusted / mid_gray;
295-
mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
292+
mid_gray_adjusted = lerp(0.18f, mid_gray_adjusted, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
293+
296294
float3 tonemap_input_color = untonemapped_bt709;
297295
#if CUSTOM_TONEMAP_DEBUG
298-
renodx::debug::graph::Config tonemap_graph_config = {false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f};
296+
renodx::debug::graph::Config tonemap_graph_config = { false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f };
299297
if (tonemap_debug_enabled) {
300298
tonemap_graph_config = renodx::debug::graph::DrawStart(
301299
float2(SV_Position.xy) + 0.5f,
@@ -306,7 +304,7 @@ float4 main(
306304
tonemap_input_color = tonemap_graph_config.color;
307305
}
308306
#endif
309-
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray_scale, histogram_mean, histogram_target_mean);
307+
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray, mid_gray_adjusted);
310308
#if CUSTOM_TONEMAP_DEBUG
311309
if (tonemap_debug_enabled) {
312310
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);

src/games/crimsondesert/grading/postprocess_material_post_load_0x084223E1.ps_6_6.hlsl

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ float4 main(
440440
tonemap_input_color = tonemap_graph_config.color;
441441
}
442442
#endif
443-
float3 output_color = CustomTonemapSDR(tonemap_input_color, 1.f, histogram_mean, histogram_target_mean);
443+
float3 output_color = CustomTonemapSDR(tonemap_input_color, histogram_mean, histogram_target_mean);
444444
#if CUSTOM_TONEMAP_DEBUG
445445
if (tonemap_debug_enabled) {
446446
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);
@@ -460,26 +460,25 @@ float4 main(
460460

461461
if (RENODX_TONE_MAP_TYPE != 0) {
462462
float3 untonemapped_bt709 = float3(_333, _334, _335);
463-
float histogram_mean = 0.18f;
464-
float histogram_target_mean = 0.18f;
465-
const float mid_gray = 0.18f;
466-
float mid_gray_adjusted = SDRToneMap(mid_gray).x;
467-
float mid_gray_scale = mid_gray_adjusted / mid_gray;
468-
mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
469-
float3 tonemap_input_color = untonemapped_bt709;
463+
464+
const float mid_gray = 0.18f;
465+
float mid_gray_adjusted = SDRToneMap(mid_gray).x;
466+
mid_gray_adjusted = lerp(0.18f, mid_gray_adjusted, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
467+
468+
float3 tonemap_input_color = untonemapped_bt709;
470469
#if CUSTOM_TONEMAP_DEBUG
471-
renodx::debug::graph::Config tonemap_graph_config = {false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f};
472-
if (tonemap_debug_enabled) {
473-
tonemap_graph_config = renodx::debug::graph::DrawStart(
474-
float2(SV_Position.xy) + 0.5f,
475-
untonemapped_bt709,
476-
__3__36__0__0__g_sceneColor,
477-
RENODX_PEAK_WHITE_NITS,
478-
100.0f);
479-
tonemap_input_color = tonemap_graph_config.color;
480-
}
470+
renodx::debug::graph::Config tonemap_graph_config = { false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f };
471+
if (tonemap_debug_enabled) {
472+
tonemap_graph_config = renodx::debug::graph::DrawStart(
473+
float2(SV_Position.xy) + 0.5f,
474+
untonemapped_bt709,
475+
__3__36__0__0__g_sceneColor,
476+
RENODX_PEAK_WHITE_NITS,
477+
100.0f);
478+
tonemap_input_color = tonemap_graph_config.color;
479+
}
481480
#endif
482-
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray_scale, histogram_mean, histogram_target_mean);
481+
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray, mid_gray_adjusted);
483482
#if CUSTOM_TONEMAP_DEBUG
484483
if (tonemap_debug_enabled) {
485484
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);

src/games/crimsondesert/grading/postprocessing_0xC4411262.ps_6_6.hlsl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,7 +1372,7 @@ float4 main(
13721372
tonemap_input_color = tonemap_graph_config.color;
13731373
}
13741374
#endif
1375-
float3 output_color = CustomTonemapSDR(tonemap_input_color, 1.f, histogram_mean, histogram_target_mean);
1375+
float3 output_color = CustomTonemapSDR(tonemap_input_color, histogram_mean, histogram_target_mean);
13761376
#if CUSTOM_TONEMAP_DEBUG
13771377
if (tonemap_debug_enabled) {
13781378
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);
@@ -1392,12 +1392,11 @@ float4 main(
13921392

13931393
if (RENODX_TONE_MAP_TYPE != 0) {
13941394
float3 untonemapped_bt709 = float3(_2951, _2952, _2953);
1395-
float histogram_mean = 0.18f;
1396-
float histogram_target_mean = 0.18f;
1395+
13971396
const float mid_gray = 0.18f;
13981397
float mid_gray_adjusted = SDRToneMap(mid_gray).x;
1399-
float mid_gray_scale = mid_gray_adjusted / mid_gray;
1400-
mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
1398+
mid_gray_adjusted = lerp(0.18f, mid_gray_adjusted, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
1399+
14011400
float3 tonemap_input_color = untonemapped_bt709;
14021401
#if CUSTOM_TONEMAP_DEBUG
14031402
renodx::debug::graph::Config tonemap_graph_config = {false, 0, 0.0f, untonemapped_bt709, RENODX_PEAK_WHITE_NITS, 100.0f};
@@ -1411,7 +1410,7 @@ float4 main(
14111410
tonemap_input_color = tonemap_graph_config.color;
14121411
}
14131412
#endif
1414-
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray_scale, histogram_mean, histogram_target_mean);
1413+
float3 output_color = CustomTonemapSDR(tonemap_input_color, mid_gray, mid_gray_adjusted);
14151414
#if CUSTOM_TONEMAP_DEBUG
14161415
if (tonemap_debug_enabled) {
14171416
output_color = DrawTonemapGraph(output_color, tonemap_graph_config);

src/games/crimsondesert/grading/tonemap_0x01E31E13.cs_6_6.hlsl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ void main(
156156
psycho_input_color = tonemap_graph_config.color;
157157
}
158158
#endif
159-
output_color = CustomTonemap(psycho_input_color, 1.f, histogram_mean, histogram_target);
159+
output_color = CustomTonemap(psycho_input_color, histogram_mean, histogram_target);
160160
#if CUSTOM_TONEMAP_DEBUG
161161
if (tonemap_debug_enabled) {
162162
output_color = DrawTonemapGraph(output_color, tonemap_graph_config, RENODX_DIFFUSE_WHITE_NITS / 100.0f);
@@ -179,15 +179,16 @@ void main(
179179
} else {
180180
const float mid_gray = 0.18f;
181181
float mid_gray_adjusted = SDRToneMap(mid_gray).x;
182-
mid_gray_scale = mid_gray_adjusted / mid_gray;
183-
mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
182+
mid_gray_adjusted = lerp(0.18f, mid_gray_adjusted, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
183+
// mid_gray_scale = mid_gray_adjusted / mid_gray;
184+
// mid_gray_scale = lerp(1.f, mid_gray_scale, CUSTOM_TONE_MAP_MIDGRAY_ADJUST);
184185
float3 tonemap_input_color = input_color;
185186
#if CUSTOM_TONEMAP_DEBUG
186187
if (tonemap_debug_enabled) {
187188
tonemap_input_color = tonemap_graph_config.color;
188189
}
189190
#endif
190-
output_color = CustomTonemap(tonemap_input_color, mid_gray_scale);
191+
output_color = CustomTonemap(tonemap_input_color, mid_gray, mid_gray_adjusted);
191192
#if CUSTOM_TONEMAP_DEBUG
192193
if (tonemap_debug_enabled) {
193194
output_color = DrawTonemapGraph(output_color, tonemap_graph_config, RENODX_DIFFUSE_WHITE_NITS / 100.0f);

src/games/crimsondesert/shared.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#define CUSTOM_FLAGS__SNOW_FOG_FIX 0b0001000000000000000u
2525
#define CUSTOM_FLAGS__TONEMAP_DEBUG_BIT0 0b0010000000000000000u
2626
#define CUSTOM_FLAGS__TONEMAP_DEBUG_BIT1 0b0100000000000000000u
27+
#define CUSTOM_FLAGS__RR_ENABLED 0b1000000000000000000u
2728

2829
#define CUSTOM_FLAGS shader_injection.custom_flags
2930

@@ -64,12 +65,13 @@
6465

6566
#define SHADOW_DEBUG_MODE 0 // shader_injection.shadow_debug_mode
6667
#define SHADOW_DISABLE_LAYER 0 // shader_injection.shadow_disable_layer
67-
#define CONTACT_SHADOW_QUALITY ((CUSTOM_FLAGS_AS_UINT & CUSTOM_FLAGS__CONTACT_SHADOW_QUALITY) != 0u ? 1.f : 0.f)
68+
#define CONTACT_SHADOW_QUALITY ((RR_ENABLED == 1.f && (CUSTOM_FLAGS_AS_UINT & CUSTOM_FLAGS__CONTACT_SHADOW_QUALITY) != 0u) ? 1.f : 0.f)
6869
#define FOLIAGE_TRANSMISSION (CONTACT_SHADOW_QUALITY == 1.f ? 1.0f : 0.0f)
69-
#define RT_QUALITY ((float)((CUSTOM_FLAGS_AS_UINT >> 10u) & 0x3u))
70+
#define RT_QUALITY (RR_ENABLED == 1.f ? (float)((CUSTOM_FLAGS_AS_UINT >> 10u) & 0x3u) : 0.f)
71+
#define RR_ENABLED ((CUSTOM_FLAGS_AS_UINT & CUSTOM_FLAGS__RR_ENABLED) != 0u ? 1.f : 0.f)
7072
#define RT_GI_KNEE 2.0f
7173
#define RT_GI_STRENGTH 0.07f
72-
#define MATERIAL_IMPROVEMENTS ((CUSTOM_FLAGS_AS_UINT & CUSTOM_FLAGS__MATERIAL_IMPROVEMENTS) != 0u ? 1.f : 0.f)
74+
#define MATERIAL_IMPROVEMENTS ((RR_ENABLED == 1.f && (CUSTOM_FLAGS_AS_UINT & CUSTOM_FLAGS__MATERIAL_IMPROVEMENTS) != 0u) ? 1.f : 0.f)
7375
#define DIFFUSE_BRDF_MODE (MATERIAL_IMPROVEMENTS == 1.f ? 2.0f : 0.0f)
7476
#define SMOOTH_TERMINATOR (MATERIAL_IMPROVEMENTS == 1.f ? 1.0f : 0.0f)
7577
#define SPECULAR_AA (MATERIAL_IMPROVEMENTS == 1.f ? 1.0f : 0.0f)

0 commit comments

Comments
 (0)