#✅RenoDX: Unreal Engine
1 messages · Page 2 of 1
hue shift memes
you probably care more about south of midnight vs. the entire gaming community
@spare bane what do I call beyond blue's original grain. it's default unity. do i call it grain or noise idk the difference"
if (CUSTOM_GRAIN_TYPE) { // film grain
float2 noise_uv = v1.xy * cb0[28].xy + cb0[28].zw;
float random = t0.Sample(s0_s, noise_uv).a;
o0.rgb = renodx::effects::ApplyFilmGrain(
r1.rgb,
noise_uv,
random,
CUSTOM_GRAIN_STRENGTH * 0.015f,
1.f);
} else {
r0.yz = v1.xy * cb0[28].xy + cb0[28].zw;
r0.y = t0.Sample(s0_s, r0.yz).w;
r0.y = r0.y * 2 + -1;
r0.z = saturate(r0.y * 3.40282347e+38 + 0.5);
r0.z = r0.z * 2 + -1;
r0.y = 1 + -abs(r0.y);
r0.y = sqrt(r0.y);
r0.y = 1 + -r0.y;
r0.y = r0.z * r0.y;
r1.rgb - renodx::color::srgb::EncodeSafe(r1.rgb);
r0.yzw = r0.yyy * float3(0.00392156886, 0.00392156886, 0.00392156886) + r1.xyz;
o0.rgb = renodx::color::srgb::DecodeSafe(r0.yzw);
}```
sir, this is unreal engine
oh meant to ask in main thread
its a joke d.w
1k untonemapped, 1k rrt, UE tonemapping RRT=>SDR
the little floaties in 1k untonemapped look purple too
looks like noise/blue-noise, since it layers it on top. grain is sometimes a texture applied on top at least.
if ap1 is part of aces, then yes
rrt did basically nothing
first mistake is working in ap1
second is per channel
that's also a global desaturation they do
twice
not highlights, global
unreal is the gift that keeps on giving
jokes aside, the unreal engine mod as a whole is probably one of the coolest things ever
I remember when you helped me fix my first lutbuilder; I started messing around with a bunch of other games
back when we still had to fix the sample shaders
and now we got this gigachad project
there's nothing in here to really customize saturation either
it's just the result of using UE's tonemapper
it's not like they had a choice to say "desaturate by x %"
and we cant skip it because the color grading is basically fused to it
bob the builder
the future is to start compiling lutbuilders through the unreal editor
like silent hill 2
start knocking out entire versions in a few minutes
idk how kosher that is
speaking of the unreal editor
maybe I should go back to silent hill 2
and try to add those lutbuilders to the mod
well yea I'd dump them from the game
assuming it lets me
the game has shader precompilation
so fi I'm lucky
I can just search for the hashes in the dump folder
UE tonemap by luminance + upgradetonemap
old UE upgrade, new UE upgrade
stupid per channel
the colors are back!
@bold gulch just replacing per-channel SDR tonemapping to by-luminance in UE
I only use it as a 1 click fix for stuff that just feels like a pita otherwise
like in ryza the blue clouds
per channel was the only way I could match them to white/sdr
without griefing everything else
break time. then time to make it a one liner
gl
also I was able to get most .cso files
from silent hil 2
guess I'll fix them up sometime soon ™️
the devkit crashes after ~20s for me in SH2
so I got what I could before it crashed
#include "./shared.h"
static struct UELutBuilderConfig {
float3 untonemapped_ap1;
float3 untonemapped_rrt;
float3 tonemapped_ap1;
float3 tonemapped_bt709;
float3 ungraded_bt709;
float3 graded_bt709;
} RENODX_UE_CONFIG;
void SetUntonemappedAP1(inout float3 color) {
RENODX_UE_CONFIG.untonemapped_ap1 = color;
}
void SetUntonemappedRRT(inout float3 color) {
RENODX_UE_CONFIG.untonemapped_rrt = color;
}
void SetTonemappedAP1(inout float3 color) {
RENODX_UE_CONFIG.tonemapped_ap1 = color;
}
void SetTonemappedBT709(inout float3 color) {
RENODX_UE_CONFIG.tonemapped_bt709 = color;
}
void SetUngradedBT709(inout float3 color) {
RENODX_UE_CONFIG.ungraded_bt709 = color;
}
void SetGradedBT709(inout float3 color) {
RENODX_UE_CONFIG.graded_bt709 = color;
}
float3 UpgradeToneMapAP1(float3 untonemapped_ap1, float3 tonemapped_bt709) {
float3 untonemapped_bt709 = renodx::color::bt709::from::AP1(untonemapped_ap1);
return renodx::draw::ToneMapPass(untonemapped_bt709, tonemapped_bt709);
}
float4 LutBuilderToneMap(float3 untonemapped_ap1, float3 tonemapped_bt709) {
float3 color = UpgradeToneMapAP1(untonemapped_ap1, tonemapped_bt709);
color = renodx::draw::RenderIntermediatePass(color);
color *= 1.f / 1.05f;
return float4(color, 1);
}
float4 CompleteTonemap() {
float3 color = UpgradeToneMapAP1(RENODX_UE_CONFIG.untonemapped_ap1, RENODX_UE_CONFIG.graded_bt709);
color = renodx::draw::RenderIntermediatePass(color);
color *= 1.f / 1.05f;
return float4(color, 1.f);
}
float4 CompleteTonemap(float3 graded_bt709) {
SetGradedBT709(graded_bt709);
return CompleteTonemap();
}
the more you feed into it, the better
gotta add the special options now, like changing to tonemap by luminance
do we still need to find the same colors?
and do the same thng?
I wante do tget started on fixing a few more lutbuilders
but idk if I shoul dwait
its sm6
i think all the color-based grading has already happened in this part, not sure
when we get untonemapped ap1
I'll just wait until you iron some stuff out, this isnt a rush
just a bunch of meme builders I found in silent hill 2's shader precomp
got 10 cs lutbuilders; one of them was already in the addon so I deleted it
if you're going to regex them anyway
here is hlsl -f --use-do-while + .cso
i think i found a HLSL bug 😕
#include "./shared.h"
// clang-format off
static struct UELutBuilderConfig {
float3 untonemapped_ap1;
float untonemapped_ap1_y;
float3 untonemapped_bt709;
float3 untonemapped_rrt;
float3 tonemapped_ap1;
float3 tonemapped_bt709;
float3 ungraded_bt709;
float3 graded_bt709;
} RENODX_UE_CONFIG;
// clang-format on
static bool tonemap_by_luminance = RENODX_TONE_MAP_EXPOSURE != 0.f;
void SetUntonemappedAP1(inout float3 color) {
float3 new_reference = color;
RENODX_UE_CONFIG.untonemapped_ap1 = color;
if (tonemap_by_luminance) {
RENODX_UE_CONFIG.untonemapped_ap1_y = renodx::color::y::from::AP1(color);
color = float3(0, 1, 0); // RENODX_UE_CONFIG.untonemapped_ap1_y;
}
}
void SetUntonemappedRRT(inout float3 color) {
RENODX_UE_CONFIG.untonemapped_rrt = color;
}
void SetTonemappedAP1(inout float3 color) {
RENODX_UE_CONFIG.tonemapped_ap1 = color;
}
void SetTonemappedBT709(inout float3 color) {
RENODX_UE_CONFIG.tonemapped_bt709 = color;
}
void SetUngradedBT709(inout float3 color) {
RENODX_UE_CONFIG.ungraded_bt709 = color;
}
void SetGradedBT709(inout float3 color) {
RENODX_UE_CONFIG.graded_bt709 = color;
}
// float3 UpgradeToneMapAP1(float3 untonemapped_ap1, float3 tonemapped_bt709) {
// float3 untonemapped_bt709 = renodx::color::bt709::from::AP1(untonemapped_ap1);
// return renodx::draw::ToneMapPass(untonemapped_bt709, tonemapped_bt709);
// }
// float4 LutBuilderToneMap(float3 untonemapped_ap1, float3 tonemapped_bt709) {
// float3 color = UpgradeToneMapAP1(untonemapped_ap1, tonemapped_bt709);
// color = renodx::draw::RenderIntermediatePass(color);
// color *= 1.f / 1.05f;
// return float4(color, 1);
// }
float4 CompleteTonemap() {
// RENODX_UE_CONFIG.untonemapped_bt709 = renodx::color::bt709::from::AP1(RENODX_UE_CONFIG.untonemapped_ap1);
// if (tonemap_by_luminance) {
// // convert back
// RENODX_UE_CONFIG.graded_bt709 = RENODX_UE_CONFIG.untonemapped_bt709
// * renodx::math::DivideSafe(
// renodx::color::y::from::BT709(RENODX_UE_CONFIG.graded_bt709),
// renodx::color::y::from::BT709(RENODX_UE_CONFIG.untonemapped_bt709));
// }
float3 color = renodx::draw::ToneMapPass(RENODX_UE_CONFIG.untonemapped_bt709); // , RENODX_UE_CONFIG.graded_bt709);
color = RENODX_UE_CONFIG.untonemapped_ap1;
color = renodx::draw::RenderIntermediatePass(color);
color *= 1.f / 1.05f;
return float4(color, 1.f);
}
float4 CompleteTonemap(float3 graded_bt709) {
SetGradedBT709(graded_bt709);
return CompleteTonemap();
}
i set RENODX_UE_CONFIG.untonemapped_ap1 to the original color, i then change the inout variable to be green
when CompleteTonemap() runs, untonemapped_ap1 is green
something something shared references and pointers
so are we going to need to find more colors now?
copy
thought each builder is going to need all this
float3 untonemapped_ap1;
float untonemapped_ap1_y;
float3 untonemapped_bt709;
float3 untonemapped_rrt;
float3 tonemapped_ap1;
float3 tonemapped_bt709;
float3 ungraded_bt709;
float3 graded_bt709;
ik
but the colors have to come from somewhere
and there where the set functions
where is RENODX_UE_CONFIG coming from? global space
btw while you're working on unreal, can we please get a /games/ folder in the root directory -- and move all the per-game mods into it
its going to get really unwieldly soon
that same file
yeah but is it in global space?
as you see it, i'm just calling #include "C:\Mods\renodx\src\games\unrealengine\common.hlsl" from the main shader
wait, maybe i was dumb
calling it twice in the main shader
you don't need inout anyways
in or nothing is enough
no wait I am reading it wrong oops
seems i redeclared untonemapped_ap1 later in code
the system works
screenshotting...
Current UE method, Current + Grading 0, Newer method (UE tonemap by luminance)
waveform matches better with newer method
@viscid mirage our dice memes can go in the trash
ty shortfuse
back on fiber
so send me a addon64 if you want
or is the demo gone?
no idea
demo should still be around
its been months
so
do we have to do anything new?
when fixing lutbuilders
or its still find 2 colors and enjoy
what was float3 untonemapped_ap1 = whatever is SetUntonemappedAP1(r0.xyz);
and was the other thing is o0 = CompleteTonemap(r3.xyz);
so regex will do it fast
you're basically passing the variables to common.hlsl to do work
watch out for compute shaders
thats what we did before

you are actually passing an inout
like void (float3 poop inout)
meaning the other hlsl file can manipulate untonemapped_ap1
void SetUntonemappedAP1(inout float3 color) {
RENODX_UE_CONFIG.untonemapped_ap1 = color;
if (RENODX_TONE_MAP_TYPE != 0.f && tonemap_by_luminance) {
RENODX_UE_CONFIG.untonemapped_ap1_y = renodx::color::y::from::AP1(RENODX_UE_CONFIG.untonemapped_ap1);
color = RENODX_UE_CONFIG.untonemapped_ap1_y;
}
}
my first attempt at my scuffed UE mod
had a void tonemap
with the colors as in/inout/out
because of the duel tonemap setup
the fast way to make something tonemay by luminance is send it gray
rip RRT red memes
the amount of loss is what matters to me
so South of Midnight was good to test with
but now i have to bake in some custom desaturation probably
which isn't horrible
and ap1 hue memes
btw do you want to fix these CS lutbuilders since you're already working on unreal engine
or should I do it after you change the stuff up
...
btw will these upgradetonemap saturation changes be ported to tonemappass -- so I can get rid of the dice nonsense in other games
no, because all i'm doing is changing vanilla to render by luminance
i mean
unless....
👨🍳


going to sleep on this. something like renodx::draw::GetColored() but less racist
because we need to go back to colored instead of grayscale at some points in the process
r0.xyz = r2.xyz * r2.xyz; // should be colored
r2.xyz = cb0[26].yyy * r2.xyz;
r0.xyz = cb0[26].xxx * r0.xyz + r2.xyz;
r0.xyz = cb0[26].zzz + r0.xyz;
r2.xyz = cb0[42].yzw * r0.xyz; // should be colored
r0.xyz = -r0.xyz * cb0[42].yzw + cb0[43].xyz;
r0.xyz = cb0[43].www * r0.xyz + r2.xyz;
r2.xyz = max(float3(0, 0, 0), r0.xyz);
r2.xyz = log2(r2.xyz);
r2.xyz = cb0[27].yyy * r2.xyz;
r3.xyz = exp2(r2.xyz);
like starfield as well, it wants to sample a lut after tonemapping
honestly dont over think it -- like I would've never made the connection if you didnt mention it
still would be nice to generalize all of what UE does but into renodx::draw
that's what happened before
and why we have renodx::draw
and the special tonemappass one liner
I'm talking about the getcolored thing being "racist"
also, this gives "perfect" hue shifts:
float3 clamped_1k_nits = min(RENODX_UE_CONFIG.untonemapped_bt709, 1000.f / 250.f);
RENODX_UE_CONFIG.untonemapped_bt709 = clamped_1k_nits
* renodx::math::DivideSafe(
renodx::color::y::from::BT709(RENODX_UE_CONFIG.untonemapped_bt709),
renodx::color::y::from::BT709(clamped_1k_nits));
which is straight up what i did in starfield luma
which was clip to 4.f
was going to change : ```diff
if (draw_config.tone_map_hue_shift_method == HUE_SHIFT_METHOD_CLIP) {
-
hue_shifted_color = saturate(color);
-
hue_shifted_color = min(color, HUE_SHIFT_METHOD_MODIFIER);
is min really the best way to go about it?
dice displaymaps the color, so it kind of retains info
while min in clamped_1k nits will either return a color or 1k nit white no?
what about the hue angle stuff that opendrt uses
is it worthile to implement that
cheaper than oklab I assume
I think it's ratio. I was also thinking max channel instead of by luminance
src/dice.hlsl is per luminance no?
This scene is really rough. If i shift too early, too much yellow. If I shift too late, green in yellows on the bottom
copy
But if a good scene to experiment
The 4.f was because it looked right clipped to 1K
And aces probably has some clipping involved
isnt it built in clipping (in a way)
Red and green when equal (clipped) is yellow
something about how a camera at a certain white point/apterature/exposure would capture a bright object
if its super bright, it gets blown out by the camera
I guess blown out and clipped isnt exactly the same
it was on the unreal filmic tonemapper docs page
That's per channel blowout
They stumbled into that because it's per channel. High contrast and per channel is going to blowout regardless
Remember that Unreal SDR is not ACES. It's just high contrast per channel that matches and there you go: highlight blowout
All they had to do was increase contrast
swore I read on the page that it was "intentional" -- unless they made a bug a feature
Emissive values are now physically correct so that as the emissive power increases the color will become lighter, similarly to how colored lights work in the real world. As color gets tone mapped, if the final color is bright enough to start saturating the film / sensor, it will become white.
...
With a high enough emissive power, the color will start to become white, unlike the legacy tonemapper where values would just become overly saturated causing areas of the material to lose its detail.
...
but yea thats blowout
but it reads like they wanted to add it intentionally
and its a "feature"
but they're also okay with red eggs becoming completely orange, and blue eggs becoming super pruple -- so idk if I can trust anything on that site 
guess I got something to watch later
Announce Post: https://forums.unrealengine.com/showthread.php?139698
In the 4.15 build of Unreal Engine, there were updates to the filmic tonemapper to have it match the Academy Color Encoding System (ACES) by default. This tonemapper also enables the engine to target multiple display types including HDR displays and bloom settings have been up...
ya rrt and per channel tonemapping
@spare bane I was watching the UE tonemap video, and the UE devs had a desmos link visible in their chrome
idk if you already have that or not
or if its useful for anything
it has the formula for their aces aproximate and all that
more nerd math
scaling untonemapped back up in bt709 vs scaling in ap1
no grayscale conversion needed yet
An example of why shouldn't chase numbers. Check out the CIE graph.
oof, this looks kinda perfect, i'm scared
vanilla, luminance+luminance, luminance+per-channel
vanilla, luminance+per-channel
this works
now to fix midtones and shadows to not be per channel
and i think i got it
I actually don't completely mind the untonemapped look, but would like to be able to tweak it, but when I enable LUT dumping I'm not getting anything
might be a compute shader. you should try the devkit then
hm, tried disabling drawing on them one by one and couldnt find one that killed the tonemap
the game has no lut, so it's 100% custom
rip
log needs to say something like:
11:55:01:918 [43228] | DEBUG | [RenoDX] mods::swapchain::OnCreateResource(counting target, format: r10g10b10a2_unorm, usage: cc4, index: -1, counted: 0) [0/1]
11:55:01:919 [43228] | INFO | [RenoDX] mods::swapchain::OnCreateResource(Upgrading, flags: 0x0, state: 0x80000000, format: r10g10b10a2_unorm => r16g16b16a16_float, width: 32, height: 32, usage: undefined(cc4), complete: 0)
11:55:01:919 [43228] | INFO | [RenoDX] mods::swapchain::OnInitResource(tracking 0x00000000667a7720, flags: 0, state: 80000000, width: 32, height: 32, format: r16g16b16a16_float, tag: 1)
11:55:01:919 [43228] | INFO | [RenoDX] mods::swapchain::OnCreateResourceView(upgrading, found_upgrade: true, expected: true, view type: texture_3d, view format: r10g10b10a2_unorm => r16g16b16a16_float, resource: 0x00000000667a7720, resource width: 32, resource height: 32, resource format: r16g16b16a16_float, resource usage: shader_resource)
11:55:01:919 [43228] | INFO | [RenoDX] mods::swapchain::OnCreateResourceView(upgrading, found_upgrade: true, expected: true, view type: texture_3d, view format: r10g10b10a2_unorm => r16g16b16a16_float, resource: 0x00000000667a7720, resource width: 32, resource height: 32, resource format: r16g16b16a16_float, resource usage: render_target)
which is upgrade the 10bit 32x32x32 lut to 16bit float
if the word "upgrading" doesn't appear: rip
wouldn't it only be upgrading when I'm running the UE addon?
though, some times devkit will mention it as a built resource
Like which ones show up with the addon/original option?
this is the only one that shows a type
rest are all unknown
I need some help, guys! I tried the Unreal Engine mod with South of Midnight but the picture is washed out when in-game HDR is turned on. When i turn it off the picture looks way better and the mod seems to work. So do i need to keep in-game HDR off for this mod to work? Thanks in advance!
vanilla / upgrading+unclampbt709 / luminance+perchannelblend / +blowout50 / ACES
aces deep fried of course. the problem is this game hard depends on the per-channel blowout in the vanilla game
did you add an option to do the peak scaling per channel but the other stuff (shadows, contrast, etc) by luminance?
messing with this as a hue shift option: ```cpp
} else if (draw_config.tone_map_hue_shift_method == HUE_SHIFT_METHOD_PER_CHANNEL_BLEND) {
hue_shifted_color = color; // "hue shift to original color"
tone_map_config.reno_drt_per_channel = true;
tone_map_config.hue_correction_strength = 0.f;
draw_config.tone_map_hue_shift = saturate(draw_config.tone_map_hue_shift * renodx::color::y::from::BT709(color));
}
basically it's per channel, but by luminance hue (untonemapped hue)
er, something is wrong there, but i'm still figuring it out
it's fine for South of Midnight but the SDR needs to blow out in this game
didn't we have a separate setting to do lum + lum or lum + per chanel back then and then it was removed
so i guess now it's back but just better?
this is different
oh
and no. you just have tonemapping after UE grading was done
this is modifying the UE tonemapping
same logic
const float3 tonemapped_perceptual = renodx::color::ictcp::from::BT709(color);
const float3 untonemapped_perceptual = renodx::color::ictcp::from::BT709(RENODX_UE_CONFIG.untonemapped_bt709);
float untonemapped_chrominance = length(untonemapped_perceptual.yz);
float tonemapped_chrominance = length(tonemapped_perceptual.yz);
float chrominance_loss = 1.f - saturate(untonemapped_chrominance / tonemapped_chrominance);
const float maximum_chrominance_loss = 0.5f;
float3 new_perceptual = untonemapped_perceptual;
new_perceptual.yz = untonemapped_perceptual.yz;
// clamp saturation loss
float correction = max(tonemapped_chrominance / untonemapped_chrominance, 1.f - maximum_chrominance_loss);
new_perceptual.yz *= correction;
float new_chrominance = length(new_perceptual.yz);
// force restore hue
new_perceptual.yz = lerp(new_perceptual.yz, tonemapped_perceptual.yz, correction);
float corrected_chrominance = length(new_perceptual.yz);
new_perceptual.yz *= renodx::math::DivideSafe(new_chrominance, corrected_chrominance, 1.f);
new_perceptual.x = tonemapped_perceptual.x;
color = renodx::color::bt709::from::ICtCp(new_perceptual);
chroma restoration
@bold gulch
now i don't know if i was having trouble with pink because of oklab in general
I am pretty far into South of Midnight, the flickering with renodx happened in earlier levels but changing settings fixed it but in this level it's not going away
any workarounds for this?
can't reproduce this

found a way to reproduce it, at least on my machine. Grading strength 0 causes the flicker, setting it any non-zero fixes gets rid of the flickering.
okay, not non-zero , basically changing the grading to any other value changes it, it started happening at 1. Maybe alt-tabbing is causing it, idk
ignore what I said, it's back again and nothing gets rid of it
yeah, it's something specific to UE, and i'm not sure what it is
maybe; from what I understood ICtCp was made for HDR with wide color gamut in mind; at least on my monitor I never get the "best" look under oklab
haven't found one yet myself; I can toggle settings and it seems stable for a moment and then it picks up again
at first I thought it was something with vrr, then ruled that out. then follwed the path of possible noise and then nothing. I literally watch the CIE graph jump around and it corresponds to the flickering in-game
Yeah same, but luckily it seems to affect some levels and some are completely fine
my settings are maxed out; trying to see if shadow quality affects it or not; just rando shooting at this point. But yea on the same level early on when traversing the town area at the gas station, it just stopped for like 10 mins no flickering
Chapter 10, right? Chapter 11 onwards it’s completely fine.
yup; I messed around some more but nothing to it
not sure if it matters, but I am on the game pass version
but it appears it's probably just a texture flicker issue up to that point
@spare bane noticed something interesting wrt the gamut clipping - in the pause screen it clips far less
Comparisons are ground truth - reno 100 saturation, sk 200% saturation
also it wasn't running the devkit that got the tonemap working, it was the latest version of the ue addon
So something you changed fixed it ig
ShortFuse fixed the decompilation errors in the lutbuilders
That's probably what changed it
That also fixed the magenta issues in Stray and likely Outer Worlds as well
Is this confirmed? I tested the repo build about a month ago in The Outer Worlds SCE and the magenta hue was still there.
Away from my PC so I can't test.
Ahh okay.
First time using the UE multi game mod. For south of midnight, do we need to do anything else other than dropping the addon in the correct folder? Appreciate adding the game as it doesnt seem to be popular
See the UE compatibility list
https://github.com/clshortfuse/renodx/wiki/Mods
also disable in-game HDR
In case someone needs ShortFuse's regex to fix sm5 lutbuilders (#🧩renodx-dev message)
find
(\s+)if \((cb\d+\[\d+\]\.)(x|y|z|w)+ ([!=]= 0\) \{)
replace
$1[branch]\n$1if (asuint($2$3) $4
find
= (cb\d+\[\d+\]\.)(x|y|z|w)+ \?
replace
= (asuint($1$2) != 0u) ?
it's SM5 i think only. the sm6 decompilation wouldn't have that issue
should add that to wiki
i'm working on a rewrite where it wouldn't matter, which is just pass the output type variable
Has anyone compared using this vs native in hogwarts? ^^
You weren’t able to reproduce the flicker in South of Midnight, correct? @spare bane
no..
Just making sure. Going to Terry and make some time tonight to see what’s breaking.. it’s an intermittent issue even on the main menu. Reminds me of Watch Dogs 2 flickering
whatever it is, it's exclusive to UE
Vanilla / Current / PerChannelCorrection
whoops, that blowout 50, though fine for this game
probably tomorrow, still testing

Vanilla / Current / PerChannelCorrection
looks like a better alternative versus doing 50 lut strength
Vanilla / Current / PerChannelCorrection
blue smear is more than red smear in per channel
0x31FE4421 seems modified
like stuff was removed
maybe it's because it samples a lut
i'll do lut stuff later
banisher lut is wrong
New build up on repo.
btw South of Midnight triggers your screensaver if you idle too long in cutscene, dumb devs 🙂
SK can fix that though
Oh, like CP77... real dumb indeed
How are ppl using Reno in Wuwa? I get a ban warning as soon as I launch the game with it and reshade and it closes down
Is Rocket League known for not playing nice with RenoDX or is there something to do in particular ? I can only get gamma correction & color space to work in it. No unclamping (peak slider works tho), game brightness doesn't do anything and ui brightness affects game brightness
rename dxgi.dll to d3d12.dll
dont know if it still works though
gonna give it a true but not sure if it's safe since I already got warned once xd
It’s unreal engine 3 so it’s not supported
Oh, ok, thanks 🙂
Yh UE3 doesn't work with this
XCOM EU / 2 would be nice but those will require custom work
still works. should use the newer reshade that's pinned in #🧩renodx-dev
The game didn't boot for me with whatever I had but the latest did.
People still use screensavers?
I use a black/blank one
For my oled I just swap to an empty hdmi if I'm not using it
That’s far more effort than screen off on your remote or OLED screensaver
turning it off cuts off the display from the pc and I don't like everything resetting when I turn it back on
Screen off does that?
You can set pc to never do that
And combine with black screensaver or screen off on lg remote
this is a monitor
black screensaver doesnt help because I want to have the other monitor active
Yes but if you set never turn off display..
You can just screen off lg remote no?
Also why I am fixing your problem lol, there are solutions
turning off messes with audio, black is good enough for me, but i only use one display
Screen off shouldn’t disconnect display afaik if configured right
Yeah it doesn’t, at least on my LG oled monitor
there are custom screensave apps that will only affect one monitor
The OSD screensaver setting just turns the display black, secondary monitor still remains active
just installed new repo
@spare bane trying to do vanilla/old/new comparisons but this is somehow showing up
what shaders are replaced?
in the log
i found some shaders aren't clamping in vanilla
like true vanilla needs to clamp
yeah, i fixed some inaccurate shaders and apparently some games hard rely on the original lut being rgb10a2
meaning clip
i have to add saturate to the shaders
the japanese ones apparently
it's just vanilla
or a missing shader
and actually not negative
the game has broken colors and rgb10a2 "fixes" it
we send negative colors and it's fine
so something in vanilla math is broken
we're missing a shader in wuwa, i already decompiled it
I was actually gonna pop in here and talk about what I assumed was a bug with Renodx and WuWa but I see some talk's already been happening
its already in the repo build?
i'm working on it
ah
@tired mulch try repo now
Looks like its not clamped anymore, crazy
hmm okay
The blowout restoration slider doesn't seem to be working
in this new build
changing it from between 0-100 doesnt do anything
yep strength at 100
what does strength 0 look like?
blowout restore is working for me
are you using the latest build just now
yeah just updated
weird
blowout restore 100/0
yeah im in the exact same scene and its not working for me
the game decides when it wants to rebuild the lut
it's not every frame for some reason
let me try restarting inbetween shots
yeah its not working
Just gave Chorus a try despite the caveats mentioned on the wiki and it's not that bad I think, but the way some of the sliders affect the gameplay looks are weird. How come this game is so weird for Reno ?
Devs probably modified the render somehow
The more customized UE game uses, the less compatible it is with Reno
With the generic UE build or even custom ones ? Like with this one the highlights controlled by the UI slider, this might not even be addressable by a custom build ?
I meant generic RenoUE
Though even making a custom ones can be a pain
afaik modding in HDR in Avowed was a pain
If the the highlights are being controlled by the ui slider that means that the game’s lutbuilder is in the mod
i think that's more DX12 growing pains (Avowed)
So you either have to find a shader after the lutbuilder that is clamping or it’s just some upgrade that needs to be enabled
avowed has a bunch of output shaders, though we have a better decompiler now
99% sure that means there's no lut builder shader
you're probably on a different path, the mobile tonemap path, which bypasses aces rrt. custom ue config?
My engine ini just has tweals related to draw distance
Although
Using r.KuroTonemapping=0 gets blowout restore working again
I mean adding that line gets blowout restore working not the other way arounf
If i leave the config as is blowout wont work
what shaders does it say are replaced?
Reshade.log?
yes
with that line in strength 0 looks way different than strength 100
hmm seems to be the same issue as before blowout not working
it feels as if some kind of lut is still being applied even at strength 0 vs 100
yeah, the blowout correction is before the lut
strength 0 / strength 100 / strength 0 + kurotonemapping=0 / strength 100 + kurotonemapping=0
yeah, that's aces probably
though strength 0 of both should be the same
at least in terms of lutbuilder
maybe that's the lut thats still applying at strength 0
at least using the line above + strength 0 makes the color look a lot more like aces color
How can I enable both RenoDX and MOD at the same time?
When I inject ReShade and then launch the mod using XXMI, only the mod is successfully injected. How can I fix this issue?
@spare bane do you have any idea on why this happens? highlights on infinity nikki get clipped by what feels like random lol.
happens if i look at things from a different angle or i use a skill.
Could be a custom output shader that doesn't expect above 1.f values out of the lutbuilder
If contrast slider being raised still has it clip at game nits, then it's being clipped after sampling the lutbuilder, which points to a second shader after the regular UE output shader, or a custom output shader doing custom things
there is only ui shaders after the output shader, so it's potentially a custom output shader
you can simply inject with xxmi by copying reshade64.dll to game directory and putting the path in xxmi
Thank you very much, I'll give it a try!
I figured out the problem, for some reason, the UE output shader isn't alwaysdrawing to the swapchain, conditionally, another set of shaders show up that draws to an RTV that eventually gets drawn to the swapchain, and while those shaders seem to support values above 1.f just fine, I had to add an upgrade to R10G10B10A2_UNORM to fix the clamping.
I wonder if this could be somewhat related to the flickering, though this seems like it's conditional based on wanting an effect to occur
Is there a mod for Wuthering Waves that hides the UID and removes the blur/censorship?
3dmigoto
but it will take a big slice of fps
Am I the only one experiencing crashed on DX12?
you play with SK, right?
Device hung?
No lost for some reason
Yes sir
Lost or removed
dunno lemme check what the log say
lmao
worst hdr of the year confirmed
I get some occasional crashes but im not sure its my overclock being unstable or its actually the game
Man i hate that you can't search on mobile
Although i think its probably related to r8g8b8 typeless upgrade
I mean I am but I'm pretty darn sure it's stable
I know unreal engine is especially sensitive
Play with stock and double check
i guess i can try that
which game
@tardy bear SK?
No, it's Reshade
so just Reshade and no other mods?
I don't use RTX no
God, I need your RenoDX configuration
I may have set the wrong configuration
clean install, the reshade from #🧩renodx-dev that's pinned but renamed to d3d12.dlland the unreal addon
OK,Thanks
I'm going to give it a try now
i open the Client-Win64-Shipping.exe directly
D:\Epic Games\WutheringWavesj3oFh\Wuthering Waves Game\Client\Binaries\Win64
i'm adding another option for dlssfg in other games, but might work here as well
oh wow, i was testing the debug build and it was still 225 fps vs 235 unmodded
magic
I will do it according to your request
Now it's done,running very well

Praise You
Occasional discoveries
discoveries?
i'm not sure what you mean by discoveries
Engine.ini
I have added some parameters to this file
This willprevent RenoDX from working well
I deleted the engine.ini file
RenoDX and RTX ray tracing can work

go to hell
@tardy bear you okay there?
Very bad
I don't understand
I don't know where went wrong
I have recovered
But it can't run well either
Screen abnormality
This shouldn"t be
I will do it according to your request
Yes, it works very well. RenoDX and RTX very well
I changed the engine.ini,causing the screen to malfunction
I deleted the engine.ini file,
what options are you trying to get working, i can take a look at getting them to work right
i mean, what options are you trying in Engine.ini
🥲
I can work with RenoDX in DX11 mode with the same parameters
In DX12 mode,itdoes not work
Now there is an additional question
Prior to this, DX12 mode, RenoDX, and RTX could work
After adding some parameters to the engine. ini, the screen became abnormal
Even if the engine. ini file is deleted, the screen still appears abnormal
Magical question

I will delete wuwa and reinstall it
the ```ini
r.Tonemapper.GrainQuantization=0
r.Tonemapper.Quality=1
options are probably what's affecting it
The first time i deleted these two parameters
The screen is still abnormal
Even if the engine. ini file is deleted
The screen is still abnormal
I don't know what the principle is
How do you take screenshots?
Save HDR images and send them here
Reshade takes screenshots. Go to Setting and change the keyboard key, but by default it's PrntScrn
Understood,thank you
Wuwa installation completed
Now I'm going to put it into practice
WUWA completed
I need to make a backup
Next, Reshade is injected into Wuwa
highly likely that any engine.ini lines which modify post processing cause issues with clamping, I confirmed yesterday that these two settings need to be removed r.Tonemapper.GrainQuantization=0 r.SceneColorFringeQuality=0
Okay
The injection is complete, and the renodx-unrealine.addon64 file has also been placed
d3d12.dll
Wuwa Start
RenoDX and RTX work very well
Now I need to modify the screen settings of RenoDX
This RenoDX configuration doesn't work very well
RenoDRT, It can't
Are you using RenoDRT?
After RenoDRT recovery, subtle flickering anomalies were still found
Vanilla works very well
yeah renodrt
are you using frame gen? last time i tried it had some flickering issues but I haven't checked with latest version
i don't have flickering with frame gen
but when he moves the slider it flickers which is probably related to that flickering issue people reported
@spare bane tempest rising crashes with addon
and i dont even see the in game hdr option ?
its still in sdr
Uh, I turned off frame generation, it works very well.
wait it works
maybe downloading the frame gen dll would help
yes resource upgrades are turned on
DF Alex should be made aware of RenoDX, maybe he'll mention it on tomorrow's Direct
out dated and they likely could never get it to work
what does strength 0 look like?
also, can you find that snow scene?
no it doesnt work
and its doesnt dump the lutbuilder ?
actually the snow scene is just the start of the campaign
what doesn't work? i'm confused
its the ui that exceeds 203 nits so i thought it worked
but it doesnt work actually
and doesnt dump the lutbuilder
engine.ini, I rewrote it
RenoDX and RTX are working very well now.
What a surprise, it's actually a problem with frame generation
i'm working on fg issues in Avowed, where we downgraded to dlss 3.8.1 to get working, but i don't have flickering issues in this game
did anyone manage to get reno UE working in lords of the fallen 2 and eternal strands?
both get a black screen with audio for a few sec at the start, and then instantly crash
eternal strands luts were uploaded by @glossy valve
@spare bane
FG works fine
even the transformer model
looks like you have something configured incorrectly

i sent the reshade log can you get some info ?
no lut builder at all
rip
would need a custom mod
im assuming they just removed the broken native hdr after DF told them
it might not be hard to mod tbh
even if it doesn't use a lutbuilder, it's probably still composited in generic UE style
is there a way to tell if it is composited in generic UE style
using the devkit and analyzing the game
wuwa is ue4 apparently
quite bizzare that they released a ue5 game with dx11 in 2025
He is
I'm assuming out of gamut stuff. Can't tell well on mobile
I noticed how rare it is to get that deep, dark red because of per channel. The saturation correction would bring that back, but there's no gamut compression, so sometimes both ICtCp and oklab can make some strong output gamut colors where clipping just doesn't work.
Had that issue with FF7 remake
does just using gamutcompress from ACES not work
It would work, but you'd have to calculate new thresholds for cyan magenta and yellow I think
It's built for ap0 I think
I could code one. It's probably easier to mirror and curve to 0
I haven't investigated why OKLab is broken though. Might be related
Is there a way to make it work properly with Atomic Heart?
does contrast slider work
yes
cool, pls let us know if you have any issues
@full moss @vagrant thicket Atomic Heart seems to work with the mod now, if you're still interested in playing that
The last framegen version flickers, but with 3.8.1 it works.
any recommended presets for crisis core?
I am, thank you
Would like to know this as well, just bought Lords of the Fallen :>
lords of the fallen instant crashes with that addon
what do the reshade logs say?
basically nothing I guess
oh you can play that game without eac??
the game is super generous
even with EAC off you can still see bloodstains
and get invaded
you just cant co-op or invade others
you can also interact with the online faction stuff
how it should be
even with EAC on it allows you to do a lot, I am running a no sharpening mod and EAC doesn't care
game needs renodx tho
that hdr is disgusting
hdr is dogshit level
more washed out than sdr srgb
they must done some really cursed shit
is there messages in the game from other players like dark souls?
there are bloodstains, and there is a really cool system
like you follow a ghost of aperson who died
and then you can fight a ghost of them iirc
and get faction currency
wait no you fight the mob that killed them
you follow their ghost, it takes you to the mob that killed them, and you get extra loot for killing the mob
also they might take you to cool places
RIP, SK & Reno on Witchfire is kill. I've tried both lazy and plugin loading
Game gets stuck on the starting screen but underneath you can interact with the game
No nvm, removed SK and the issue persists
No SK, only reshade with upgrades to stop black screen on start up
please always test mods without SK first
if you have an issue, the first thing you should do is install reshade the traditional way as dxgi, and then throw the addon in the game folder -- dont use any other mods
if the bug is still there, well now we can share
👍 Utilising shortfuse reshade and the latest UE addon (yesterdays Snapshot), upgraded R10G10B10A2_UNORM
I Set FG to off (just in case it was the cause) which does allow the in game hud to appear when continuing the game but the screen is still black
Intreseting reno doesnt like upscaling
specifically NV stuff
Wonder if its because I upgraded the DLLs, time to check
Narrowed it down to sharpness on my end
setting it to zero, displays the screen correctly 🤔
Yes
without the upgrade the screen would be entirely black
disabling sharpness fixes the problem entirely
right they're mandatory
might be a custom shader that comes after generic UE stuff
or upgrades
try bgr8 typeless/unorm upgrades
lets see
also rgb10 to output ratio
Tried a few of those upgrades
also verified game files to revert my DLL replacements
issue persists
I dont personally care for the sharpening and everything else works
sharpening might be a custom shader then
Game looking good with reno and we figured out what the issue was. Can't complain and thank you for the pointers Marat.
np. enjoy
Would need a few more reports to see if the issue is repeatable on other setups as well
Would be a good idea after to add it on the github as a warning
Darktable UCS causing some issues in UI
darktable is weird sometimes, stick to oklab or ictcp
For Lies of P, the github wiki says this:
What do I upgrade B8G8R8A8_TYPELESS to?
Any size?
I'm not using DLSS. So I'll try output size then.
If I'm using dx11 for mods purpose, should I rename the dll to d3d12?
Hmm, how does one even do that? Never seen that? Settings in reshade?
Press Home (or whatever is your Reshade shortcut), it’ll show the reno setting dialog, change “Simple” settings slider to “Advanced”. Then it’ll show.
Are there any additional steps to use renodx with Wuthering Waves?
Seem to get a crash on the intro (where the game loads). Renamed the dxdgi, but no dice
Always get this
what version are you using
@worldly wind
I'm getting into the game, reshade is loading but not the renodx add-on
wuwa has early scans for file activity and gets very crashy with graphics dumping. make sure to clear any caches and if you can load in with all renodx features disabled and turn trhem on after the first load screen you should be chilling
are you in dx12 mode in the game ?
Yes
someone has the issue they said the game swapped to dx11 mode randomly
so idk :/
Only thing I did was rename the reshade DLL to d3d12.dll
Since that what it says on Github
huh I just stumbled on a possibly useless but kind of interesting little exploit here. It seems that if you inject reshade from elsewhere but leave it in the folder as d3d12.dll, infinity nikki doesnt load d3d12 and starts up in d3d11 despite normally not allowing d3d11. it does stall on the loading screen but maybe with cvars it can be made to work. presumably this could apply to some other unreal games as well
it might only matter in your case, since i think ur using pak mods
the game never had that issue for me
I'm vr modding but the same issues could apply to renodx
Turns out it was an issue from my side, it's loading correctly now.
i still cannot get the addon to load, can you tell me what exactly you did?
Do you get a crash when it loads up? Or it's just that the add on does not load?
Mine was crashing at the log in screen, but I tried to inject HDR with SpecialK, and it was still crashing on some other spots.
What I did to fix that was in this order:
1- Delete WuWa and all traces from my drive
2- Download Reshade 6.4.1 with addons (https://reshade.me/#download)
3- Started WuWa, patched it, logged in
4- Installed Reshade, selecting DX12 and the "C:\Program Files\Epic Games\WutheringWavesj3oFh\Wuthering Waves Game\Client\Binaries\Win64" exe path
5- Loaded up WuWa, saw that reshade was being loaded up
6- Dropped the renodx addon on the same path as the reshade
7-Renamed the dxgi.dll to d3d12.dll
After that it loaded every time. It does take a second to any changes you make to the addon to take effect which I thought was weird.
Why do you have to do all of that
When u can just inject reshade within SK itself
I ended up doing that, but realized I was still crashing, so after fixing the crashing issue (Which was my pc, not reno or sk) I redid the reno steps to see if it solved with only reshade and reno and it did 😅
But yeah, it's easier to do it with SK
strength 100 vs strength 0, probably whatever is going on here
i thought romancing saga 2 has the harshest difference, but this one is worse
this is what aces/ap1 does to gaming
they were forced to pick the colors on the right to get the colors on the left
@vale yarrow @west stump aces bad
wait a minute, did i just fix the flickering
@grim kernel can you check latest build
renodx::mods::swapchain::expected_constant_buffer_space = 50;
swapchain proxy was never writing cbuffers. it was just carrying over from during render
Sad
Once aces, forever aces.
@west stump i'm going to confirm that there's no graphical errors here, but could be useful for showcasing why aces is bad
can't really check now but that makes sense
yep, whenever you can, thanks 🙏
So the right is pre tonemapping?
yeah. scene grade strength 0 just returns untonemapped_bt709 which is the ap1=>bt709 conversion of the ap1 color before passing UE passes it through the ACES RRT and UE's per-channel tonemapper.
right looks pretty close to native hdr
native hdr doesn't have sdr color grading
or sdr luts (technically also sdr color grading)
i guess returnal is similar ?
considering how broken UE hdr is, i should sell a RenoDX UE plugin
UE HDR only works if you throw out the SDR color grading
you should 100% try and get it integrated into the engine
But it still has a form aces.
It just misses the filmic adjustments
doing all that through a legit plugin might be pretty tricky i think
they can't actually do everything you'd want
didnt play much but it does seem stable now
how is this news? 🤣
you just need another HDR->HDR tone mapper that is not ACES.
not sure if the plugin system can do that.
maybe if it inverses the steps the shader will do so the net result is what's expected
Tested the latest repo build and The Outer Worlds: Spacer's Choice Edition (DX12) finally has the magenta hue fixed! Hurray! No other issues that I've found so far.
But I've noticed the OG version of the game (DX11) still has an issue where the UI Brightness slider affects the brightness of the in-game lights, and as such max luminance doesn't reach the value set by the Peak Brightness slider:
Game Brightness bottomed-out, UI Brightness maxed:
Both Game and UI Brightness bottomed-out:
Tried dumping LUT shaders, but nothing gets created in the game binary's folder.
lol
that means they'd admit they messed up
NEVER, in a million years.
Human nature 🙂
have you tried B8G8R8A8_TYPELESS upgrades
Just tried it and that fixed it! But only when set to Any Size. Both Output Ratio and Output Size don't remedy it.
Thanks! I'll update the wiki page for the two games.
just a guess but could it be that the game's not dpi aware
you may need to set this for the win64-shipping exe in the properties
That had already been set.
ah ok, I think that would screw up output size and ratio
that's kinda the point
they do similar stuff in movies too
it's a bug not a feature. you don't people faces bright orange on camera to get a yellow output
that's true
i'm basing it on the fact on the forum they say they should either grade entirely in AP1 textures and do all their art in AP1 or "pick" colors that end up looking how they want
just a horrible way to work imo, and does more harm than good
I think colourists basically have to fight the ACES stuff when doing grading
in movies/shows that is
i was thinking recently that most grading is for film and most film is sdr
we should probably start thinking how netflix productions grade since they're TV and thus HDR first
making an SDR grade is basically the priority in ACES forums
isn't Netflix grading hella cursed?
basically it looks normal with Vivid modes on TVs
you can probably find horrible examples, but made for film usually means made for cinema, meaning at best 108 nits Dolby Cinema.
the 108 nits DV for cinema does not translate 1:1 to TV grades
it's quite a bit more.
if we go by Dolby math and scale it linearly:
cinema ref white: 48; max white: 108
TV ref white 140; max white: 315
ACES HDR cinema?
Sorry, last thing: I'm wondering why this shot looks like the gamma is raised or something? Specifically the shadowed recesses/pockets on the rocks. I can remedy it mostly by raising Flare to around 40-ish, but I'm wondering if this is an issue with the mod or the game or something.
I meant DV HDR cinema
cinema stuff has stayed the same
but 1.3 is sdr 48 nits, hdr 15mid/1000 and 15mid/2000 peak
tbh 48 nits in a cinema is plenty bright because of the huge screen
2.6 gamma
// This transform is intended for mapping OCES onto a P3 digital cinema
// projector that is calibrated to a D60 white point at 48 cd/m^2. The assumed
// observer adapted white is D60, and the viewing environment is that of a dark
// theater.
yep, that's the cinema "standard"
they do saturate to 48 nits
it's actually what i use to scale linearly in renodx
inverse
actually i think i use this: https://github.com/ampas/aces-core/blob/v1.3.1/transforms/ctl/odt/sRGB/ODT.Academy.sRGB_100nits_dim.ctl
here is the ODT for tv grades:
https://github.com/ampas/aces-core/blob/v1.3.1/transforms/ctl/odt/rec709/ODT.Academy.Rec709_100nits_dim.ctl
it's the same numbers iirc, just stretched and encoded differently
bt709 tv, srgb, and cinema all use the same 48nit config : https://github.com/ampas/aces-core/blob/fc189808208e28019a8c5a27cdb2d50312939232/transforms/ctl/lib/ACESlib.Tonescales.ctl#L251
then just scale based on output
there's also a 4000 nit one
48 / 1000 / 2000 / 4000
even says that this is for DV HDR cinema
the repo is split between a newer dynamic output and the older fixed one. so i can't remember which math applies how
one of ssts and another is the older method
those are the old ones as I understand it, when the tmo was still somewhat hardcoded
thing's cursed
Does the math even work though. It's all per channel.
what do you mean?
Which is probably why they did JMH in aces 2
Let's say I do the grading on a 4000 bit display and do all that math. When I use a srgb transform would it look the same?
(and obviously the inverse)
Curbing Y MAX to 48 is different than to 1000 in per channel
ideally yes, but ACES is not set up for that
maybe that is even a Union thing because someone needs to do that work of doing the individual grades
I guess the work we're doing of dynamic grading and SDR/HDR match more, uh, complex
I'm just thinking of how many colorists there are that hate HDR and I'm sure a lot of that stems from working per channel and things not scaling at that level
could be
you are forgetting the chroma compression, gamut mapping and gamut compression that are happening
the ODT in 2.0 is just this now:
float AP0_clamped[3] = clamp_AP0_to_AP1(aces, 0., p.ts.forward_limit);
float JMh[3] = RGB_to_JMh(AP0_clamped, p.input_params);
float tonemappedJMh[3] = tonemap_and_compress_fwd(JMh, p);
float compressedJMh[3] = gamut_compress_fwd(tonemappedJMh, p);
float RGBout[3] = JMh_to_RGB(compressedJMh, p.limit_params);
return RGBout;
That's aces 2
But 1.3 was just ymin ymid ymax and output transform
ymin ymid ymax are going to have different hues from mid to max since they're doing per channel
Aces 2 is single channel/value
yeah that thing is cursed lol
yeah 4 curves
And if min and max were just clip, then it's just a split tonemap system
I think that's slope? Something like that
it says spline? though I am not sure what you mean?
no idea anymore what that is
in kof the health bars and portraits are partially affected by UI brightness, but are also affected by game brightness, saturation etc
It means they didn't properly separate their render. UI is getting grain and bloom...
I don't think it does normally?
We're patching the internal lut, and normally you don't pass the UI components to the lut. The same shader that samples the lut applies grain and bloom to what is considered "render"
well unfortunately no lut is getting dumped
@fallow mica grab the lutbuilder if possible, and I'll add it to the UE mod
god damn it forwarded the wrong image
I meant to forward your lords of the fallen 2023 post
lotf crashes with the ue addon
rip
if you have the game installed still
what verison of UE is it on
right click the game's .exe
it should be in info
it was an early UE5 game; but tehy had a lot of patches
I beat the game on release
i wrote the version in my analysis
uninstalled unfortunately
the reason I asked is because ue 5.3+ seem do to stuff differently
has anyone tried It Takes Two with this?
testing this now, how far into it is it? might just be NaN
15 minutes maybe
i see it on the first staircase
we've had those blues in starfield as well
when upgradetonemap mismatches i think
Take the y of saturated pre tonemap and post tonemap
Multiply pre by the ratio to roughly line up luminance

Gonna try without uv
dx12
Hmm
No crashes so far
Could it actually be...?
Does reno dx make pcs more unstable 🤔
yeah, the lift is upgradetonemap in general, just increasing saturation of a bad lift is going to look bad
did find a bug in applyperchannelcorrection
hdr takes up more vram, other than that, should be the same
if it's not crashing after all is said and done (eg: booting game, loading an area) then there's nothing more it's likely doing differently
I was just gonna send you a pic of RENODX_PER_CHANNEL_BLOWOUT_RESTORATION causing visual bugs only at 1.f
float chrominance_loss = max(
renodx::math::DivideSafe(tonemapped_chrominance / untonemapped_chrominance, 1.f), // eg: 0.25
blowout_restoration);
this is nonsense
probably should be ```cpp
float chrominance_loss = max(
min(renodx::math::DivideSafe(tonemapped_chrominance, untonemapped_chrominance, 1.f), 1.f),
blowout_restoration);
float3 UpgradeToneMap(float3 color_hdr, float3 color_sdr, float3 post_process_color, float post_process_strength) {
float ratio = 1.f;
float y_hdr = renodx::color::y::from::BT709(abs(color_hdr));
float y_sdr = renodx::color::y::from::BT709(abs(color_sdr));
float y_post_process = renodx::color::y::from::BT709(abs(post_process_color));
if (y_hdr < y_sdr) {
// If substracting (user contrast or paperwhite) scale down instead
// Should only apply on mismatched HDR
ratio = y_hdr / y_sdr;
} else {
float y_delta = y_hdr - y_sdr;
y_delta = max(0, y_delta); // Cleans up NaN
const float y_new = y_post_process + y_delta;
const bool y_valid = (y_post_process > 0); // Cleans up NaN and ignore black
ratio = y_valid ? (y_new / y_post_process) : 0;
// ratio *= min(1.f, y_sdr);
}
float3 color_scaled = post_process_color * ratio;
+ color_scaled = lerp(post_process_color, color_scaled, saturate(y_hdr));
// Match hue
color_scaled = renodx::color::correct::Hue(color_scaled, post_process_color);
return lerp(color_hdr, color_scaled, post_process_strength);
}
new magic?
basically the problem is hdr is like 0.01 and sdr is 0.00000001
that jacks up black areas because they mismatch
)