Skip to content

Commit

Permalink
feat(elitedangerous): add UpgradeToneMapPerceptual()
Browse files Browse the repository at this point in the history
  • Loading branch information
mqhaji committed Feb 6, 2025
1 parent c8fe0f4 commit ed27641
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/games/elitedangerous/addon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ renodx::utils::settings::Settings settings = {
.label = "Grading Application",
.section = "Color Grading",
.tooltip = "Chooses method to apply grading for HDR.",
.labels = {"Luminance", "Per Channel"},
.labels = {"Luminance", "Per Channel", "Perceptual"},
.is_enabled = []() { return RENODX_TONE_MAP_TYPE != 0; },
},
new renodx::utils::settings::Setting{
Expand Down
35 changes: 34 additions & 1 deletion src/games/elitedangerous/common.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,44 @@ float3 UpgradeToneMapByLuminance(float3 color_hdr, float3 color_sdr, float3 post
return lerp(color_hdr, color_scaled, post_process_strength);
}

float3 UpgradeToneMapPerceptual(float3 untonemapped, float3 tonemapped, float3 post_processed, float strength) {
float3 lab_untonemapped = renodx::color::ictcp::from::BT709(untonemapped);
float3 lab_tonemapped = renodx::color::ictcp::from::BT709(tonemapped);
float3 lab_post_processed = renodx::color::ictcp::from::BT709(post_processed);

float3 lch_untonemapped = renodx::color::oklch::from::OkLab(lab_untonemapped);
float3 lch_tonemapped = renodx::color::oklch::from::OkLab(lab_tonemapped);
float3 lch_post_processed = renodx::color::oklch::from::OkLab(lab_post_processed);

float3 lch_upgraded = lch_untonemapped;
lch_upgraded.xz *= renodx::math::DivideSafe(lch_post_processed.xz, lch_tonemapped.xz, 0.f);

float3 lab_upgraded = renodx::color::oklab::from::OkLCh(lch_upgraded);

float c_untonemapped = length(lab_untonemapped.yz);
float c_tonemapped = length(lab_tonemapped.yz);
float c_post_processed = length(lab_post_processed.yz);

if (c_untonemapped > 0) {
float new_chrominance = c_untonemapped;
new_chrominance = min(max(c_untonemapped, 0.25f), c_untonemapped * (c_post_processed / c_tonemapped));
if (new_chrominance > 0) {
lab_upgraded.yz *= new_chrominance / c_untonemapped;
}
}

float3 upgraded = renodx::color::bt709::from::ICtCp(lab_upgraded);
return lerp(untonemapped, upgraded, strength);
}

float3 UpgradeToneMap(float3 color_hdr, float3 color_sdr, float3 post_process_color, float post_process_strength) {
if (RENODX_TONE_MAP_RESTORATION_METHOD == 1.f) {
return UpgradeToneMapPerChannel(color_hdr, color_sdr, post_process_color, post_process_strength);
} else if (RENODX_TONE_MAP_RESTORATION_METHOD == 2.f) {
return UpgradeToneMapPerceptual(color_hdr, color_sdr, post_process_color, post_process_strength);
} else {
return UpgradeToneMapByLuminance(color_hdr, color_sdr, post_process_color, post_process_strength);
}
return UpgradeToneMapByLuminance(color_hdr, color_sdr, post_process_color, post_process_strength);
}

float3 DisplayMapAndScale(float3 color) {
Expand Down

0 comments on commit ed27641

Please sign in to comment.