#✅RenoDX: Unreal Engine

1 messages · Page 2 of 1

spare bane
#

here's 4k nits and 1000 untouched output

#

ap1 => bt709

#

4k untonemapped vs 1k untonemapped

elfin lance
#

wow

#

it actually looks like a sun

spare bane
#

hue shift memes

elfin lance
#

you probably care more about south of midnight vs. the entire gaming community

spare bane
#

pink to yellow from clipping

#

you'll see why

bold gulch
#

@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);
  }```
elfin lance
#

sir, this is unreal engine

bold gulch
#

oh meant to ask in main thread

elfin lance
#

its a joke d.w

spare bane
#

1k untonemapped, 1k rrt, UE tonemapping RRT=>SDR

elfin lance
#

the little floaties in 1k untonemapped look purple too

spare bane
#

they tonemap in ap1

#

per channel

elfin lance
#

while the second one they seem to become a bit bluer

#

so good ole aces memes?

spare bane
spare bane
#

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

elfin lance
#

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

spare bane
#

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 %"

elfin lance
spare bane
#

it's just tonemapper params

elfin lance
#

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

spare bane
#

nah. too many variations

#

and custom stuff

elfin lance
#

speaking of the unreal editor

#

maybe I should go back to silent hill 2

#

and try to add those lutbuilders to the mod

spare bane
#

if you can get the source. it's only hard compiled here

#

what ersh did

elfin lance
#

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

spare bane
#

UE tonemap by luminance + upgradetonemap

#

old UE upgrade, new UE upgrade

#

stupid per channel

elfin lance
#

the colors are back!

spare bane
#

because per channel sucks

spare bane
elfin lance
#

like in ryza the blue clouds

#

per channel was the only way I could match them to white/sdr

#

without griefing everything else

spare bane
#

break time. then time to make it a one liner

elfin lance
#

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

spare bane
#
#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

elfin lance
#

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

spare bane
#

wait a sec

#

i'll probably regex all of it though

elfin lance
#

its sm6

spare bane
#

i think all the color-based grading has already happened in this part, not sure

#

when we get untonemapped ap1

elfin lance
#

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

spare bane
#

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

elfin lance
#

so are we going to need to find more colors now?

spare bane
#

nah

#

just testing

elfin lance
#

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;
spare bane
#

that's common.hlsl

#

apparently inout means "make pointer"

#

but out works

elfin lance
#

but the colors have to come from somewhere

#

and there where the set functions

vale yarrow
elfin lance
#

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

spare bane
#

that same file

vale yarrow
#

yeah but is it in global space?

spare bane
#

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

vale yarrow
#

you don't need inout anyways

#

in or nothing is enough

#

no wait I am reading it wrong oops

spare bane
#

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

elfin lance
#

prayge ty shortfuse

spare bane
#

gotta go try that game with custom tonemapping params

#

romancing saga2

elfin lance
#

yea

#

do you have the demo installed

#

I got the game installed still

spare bane
#

back on fiber

elfin lance
#

so send me a addon64 if you want

spare bane
#

or is the demo gone?

elfin lance
#

no idea

brave sand
#

demo should still be around

elfin lance
#

its been months

spare bane
#

disappeared from my library

#

but i'm downloading it

elfin lance
#

so

spare bane
elfin lance
#

do we have to do anything new?

#

when fixing lutbuilders

#

or its still find 2 colors and enjoy

spare bane
#

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

elfin lance
#

watch out for compute shaders

elfin lance
spare bane
#

no

#

this is different

elfin lance
spare bane
#

you are actually passing an inout

elfin lance
#

like void (float3 poop inout)

spare bane
#

meaning the other hlsl file can manipulate untonemapped_ap1

elfin lance
#

ohh I remember

#

yea I get it

spare bane
#
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;
  }
}
elfin lance
#

I remember I setup a void with in/inout/out

#

yea

spare bane
#

meaning, i make it grayscale

#

i think it's fine, but we'll see

elfin lance
#

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

spare bane
#

the fast way to make something tonemay by luminance is send it gray

#

rip RRT red memes

elfin lance
#

if you're interested in colors, use returnal

#

its super colorful

spare bane
#

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

elfin lance
#

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

elfin lance
#

btw will these upgradetonemap saturation changes be ported to tonemappass -- so I can get rid of the dice nonsense in other games

spare bane
#

no, because all i'm doing is changing vanilla to render by luminance

#

i mean

#

unless....

#

👨‍🍳

tired mulch
elfin lance
spare bane
#

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

elfin lance
spare bane
#

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

elfin lance
#

I'm talking about the getcolored thing being "racist"

spare bane
#

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);
    
elfin lance
#

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?

spare bane
#

Dice doesn't hue shift if it's per channel

#

You need per channel to hue shift

bold gulch
#

what about the hue angle stuff that opendrt uses

#

is it worthile to implement that

#

cheaper than oklab I assume

spare bane
#

I think it's ratio. I was also thinking max channel instead of by luminance

elfin lance
#

src/dice.hlsl is per luminance no?

spare bane
#

This scene is really rough. If i shift too early, too much yellow. If I shift too late, green in yellows on the bottom

elfin lance
#

copy

spare bane
#

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

elfin lance
#

isnt it built in clipping (in a way)

spare bane
#

Red and green when equal (clipped) is yellow

elfin lance
#

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

spare bane
#

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

elfin lance
#
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. 
...

https://dev.epicgames.com/documentation/en-us/unreal-engine/color-grading-and-the-filmic-tonemapper-in-unreal-engine

#

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 KEKWiggle

#

guess I got something to watch later

https://youtu.be/A-wectYNfRQ

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...

▶ Play video
bold gulch
#

ya rrt and per channel tonemapping

elfin lance
#

@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

spare bane
#

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.

spare bane
#

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

raw inlet
#

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

spare bane
raw inlet
spare bane
#

just go from bottom up

#

or send the trace log

raw inlet
spare bane
#

the game has no lut, so it's 100% custom

raw inlet
#

rip

spare bane
#

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

raw inlet
spare bane
#

yes

#

you can run both

raw inlet
#

ahhhh

#

I was just running the devkit lol

spare bane
#

though, some times devkit will mention it as a built resource

raw inlet
#

interestingly with the devkit running the tonemap is working

spare bane
#

what shader does it say is replaced in the list

#

i don't see it in the log

raw inlet
#

Like which ones show up with the addon/original option?

#

rest are all unknown

lavish ice
#

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!

spare bane
#

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

bold gulch
#

did you add an option to do the peak scaling per channel but the other stuff (shadows, contrast, etc) by luminance?

spare bane
#

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

tired mulch
#

so i guess now it's back but just better?

spare bane
#

this is different

tired mulch
#

oh

spare bane
#

and no. you just have tonemapping after UE grading was done

#

this is modifying the UE tonemapping

spare bane
#

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

bold gulch
#

ictcp?

#

what about blue

spare bane
#

seemed better with yellow

#

probalby can swap now

#

oklab is cursed

#

oklab vs ictcp

bold gulch
#

make a new lab

#

isn't oklab not meant for HDR anyway

spare bane
#

now i don't know if i was having trouble with pink because of oklab in general

spare bane
#

with by luminance shadows/midtones

#

removes the red fog

paper siren
#

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?

spare bane
elfin lance
paper siren
#

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

spare bane
neat pulsar
neat pulsar
#

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

paper siren
neat pulsar
#

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

paper siren
neat pulsar
#

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

raw inlet
#

@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

viscid mirage
#

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

thorny kelp
spare bane
#

I tested the repo build about a month ago

#

this was days ago

thorny kelp
#

Ahh okay.

olive flare
#

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

unborn verge
spare bane
#

also disable in-game HDR

viscid mirage
#

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) ?

spare bane
#

it's SM5 i think only. the sm6 decompilation wouldn't have that issue

fallow mica
spare bane
#

i'm working on a rewrite where it wouldn't matter, which is just pass the output type variable

honest elbow
#

Has anyone compared using this vs native in hogwarts? ^^

neat pulsar
#

You weren’t able to reproduce the flicker in South of Midnight, correct? @spare bane

spare bane
#

no..

neat pulsar
#

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

spare bane
#

whatever it is, it's exclusive to UE

spare bane
#

Vanilla / Current / PerChannelCorrection

tired mulch
#

in repo soon?

spare bane
#

whoops, that blowout 50, though fine for this game

spare bane
tired mulch
spare bane
#

Vanilla / Current / PerChannelCorrection

tired mulch
#

looks like a better alternative versus doing 50 lut strength

spare bane
#

Vanilla / Current / PerChannelCorrection

#

blue smear is more than red smear in per channel

spare bane
#

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

spare bane
spare bane
#

New build up on repo.

earnest bolt
#

btw South of Midnight triggers your screensaver if you idle too long in cutscene, dumb devs 🙂
SK can fix that though

cobalt marlin
marble stump
#

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

cobalt marlin
#

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

fallow mica
#

dont know if it still works though

marble stump
#

gonna give it a true but not sure if it's safe since I already got warned once xd

bold gulch
cobalt marlin
#

Oh, ok, thanks 🙂

ashen herald
#

Yh UE3 doesn't work with this

#

XCOM EU / 2 would be nice but those will require custom work

spare bane
fallow mica
#

yeah i always use that one

#

but i dont play wuwa

spare bane
#

The game didn't boot for me with whatever I had but the latest did.

spare bane
#

I use a black/blank one

raw inlet
#

For my oled I just swap to an empty hdmi if I'm not using it

earnest bolt
raw inlet
earnest bolt
#

You can set pc to never do that

#

And combine with black screensaver or screen off on lg remote

raw inlet
#

this is a monitor

#

black screensaver doesnt help because I want to have the other monitor active

earnest bolt
#

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

spare bane
#

turning off messes with audio, black is good enough for me, but i only use one display

earnest bolt
#

Screen off shouldn’t disconnect display afaik if configured right

paper siren
#

Yeah it doesn’t, at least on my LG oled monitor

spare bane
#

there are custom screensave apps that will only affect one monitor

paper siren
#

The OSD screensaver setting just turns the display black, secondary monitor still remains active

tired mulch
#

just installed new repo

#

@spare bane trying to do vanilla/old/new comparisons but this is somehow showing up

spare bane
#

what shaders are replaced?

#

in the log

#

i found some shaders aren't clamping in vanilla

#

like true vanilla needs to clamp

tired mulch
#

yeah this is happening on vanilla

#

reshade.log?

spare bane
#

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

tired mulch
#

hmm restarted and now im not getting reds anymore

#

ah nvm

#

it's there again

spare bane
#

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

tired mulch
#

ig the old one is blowout restore = 0?

#

no more pale white

spare bane
#

we're missing a shader in wuwa, i already decompiled it

rocky harness
#

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

tired mulch
spare bane
#

i'm working on it

tired mulch
#

ah

spare bane
#

@tired mulch try repo now

tired mulch
#

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

spare bane
#

is strength at 100?

#

check what shaders were replaced

tired mulch
#

yep strength at 100

spare bane
#

what does strength 0 look like?

tired mulch
#

strength 100 / 0

#

blowout restore doesn't work in either case

rigid path
#

blowout restore is working for me

tired mulch
#

are you using the latest build just now

rigid path
#

yeah just updated

tired mulch
#

weird

rigid path
#

blowout restore 100/0

spare bane
#

depends on the scene

#

and what it looks like with scene grading strength at 0

tired mulch
spare bane
#

the game decides when it wants to rebuild the lut

#

it's not every frame for some reason

unique parcel
#

Kotorin is using DX11 tho

tired mulch
#

yeah its not working

cobalt marlin
#

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 ?

unborn verge
#

Devs probably modified the render somehow

#

The more customized UE game uses, the less compatible it is with Reno

cobalt marlin
#

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 ?

unborn verge
#

I meant generic RenoUE

#

Though even making a custom ones can be a pain
afaik modding in HDR in Avowed was a pain

bold gulch
#

If the the highlights are being controlled by the ui slider that means that the game’s lutbuilder is in the mod

spare bane
#

i think that's more DX12 growing pains (Avowed)

bold gulch
#

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

spare bane
#

avowed has a bunch of output shaders, though we have a better decompiler now

spare bane
#

99% sure that means there's no lut builder shader

spare bane
tired mulch
#

Although

#

Using r.KuroTonemapping=0 gets blowout restore working again

spare bane
#

that's the mobile path then

#

i didn't add support for it

tired mulch
#

I mean adding that line gets blowout restore working not the other way arounf

#

If i leave the config as is blowout wont work

spare bane
#

what shaders does it say are replaced?

tired mulch
#

Reshade.log?

spare bane
#

yes

tired mulch
spare bane
#

ah the game has a custom lut builder

#

yeah, it's the mobile path, just different

tired mulch
#

with that line in strength 0 looks way different than strength 100

spare bane
#

yeah the game doesn't use ACES/AP1

#

also there's a lut

tired mulch
#

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

spare bane
#

yeah, the blowout correction is before the lut

tired mulch
#

strength 0 / strength 100 / strength 0 + kurotonemapping=0 / strength 100 + kurotonemapping=0

spare bane
#

yeah, that's aces probably

#

though strength 0 of both should be the same

#

at least in terms of lutbuilder

tired mulch
#

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

narrow fern
#

When I inject ReShade and then launch the mod using XXMI, only the mod is successfully injected. How can I fix this issue?

brave sand
spare bane
#

Could be a custom output shader that doesn't expect above 1.f values out of the lutbuilder

spare bane
brave sand
#

there is only ui shaders after the output shader, so it's potentially a custom output shader

rigid path
narrow fern
brave sand
spare bane
narrow fern
hearty anchor
#

but it will take a big slice of fps

hearty anchor
#

Am I the only one experiencing crashed on DX12?

spare bane
#

you play with SK, right?

cobalt marlin
#

@14m21s , HDR is broken (red snow kek )

tired mulch
hearty anchor
#

No lost for some reason

hearty anchor
tired mulch
#

Lost or removed

hearty anchor
#

dunno lemme check what the log say

tired mulch
#

Are you running ur gpu at stock?

#

Or any OC

fallow mica
#

worst hdr of the year confirmed

tired mulch
#

I get some occasional crashes but im not sure its my overclock being unstable or its actually the game

hearty anchor
#

Man i hate that you can't search on mobile

tired mulch
#

Although i think its probably related to r8g8b8 typeless upgrade

hearty anchor
#

I know unreal engine is especially sensitive

tired mulch
#

Play with stock and double check

hearty anchor
#

i guess i can try that

tardy bear
#

Ah, guys

#

Can your DX12 and RenoDX work well?

#

I can't do it here

fallow mica
#

which game

tardy bear
#

Especially RTX ray tracing

#

WuWa

fallow mica
#

idk then

#

dont play that game

spare bane
#

@tardy bear SK?

tardy bear
#

No, it's Reshade

spare bane
#

so just Reshade and no other mods?

hearty anchor
#

I don't use RTX no

tardy bear
#

RTX ray tracing cannot work with RenoDX

#

The picture is strange, the light turns red

spare bane
#

works fine for me

#

i try with dlssfg and rtx

tardy bear
#

God, I need your RenoDX configuration
I may have set the wrong configuration

spare bane
#

clean install, the reshade from #🧩renodx-dev that's pinned but renamed to d3d12.dlland the unreal addon

tardy bear
#

OK,Thanks
I'm going to give it a try now

spare bane
#

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

spare bane
#

oh wow, i was testing the debug build and it was still 225 fps vs 235 unmodded

tardy bear
#

magic

#

I will do it according to your request

#

Now it's done,running very well

#

Praise You

#

Occasional discoveries

spare bane
#

discoveries?

tardy bear
#

Modified engine

#

It makes RenoDX work poorly

spare bane
#

i'm not sure what you mean by discoveries

tardy bear
#

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

tardy bear
#

go to hell

spare bane
#

@tardy bear you okay there?

tardy bear
#

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,

spare bane
#

what options are you trying to get working, i can take a look at getting them to work right

tardy bear
#

but the screen still shows abnormalities]

#

is this one?

spare bane
#

i mean, what options are you trying in Engine.ini

tardy bear
#

🥲

#

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

spare bane
#

the ```ini
r.Tonemapper.GrainQuantization=0
r.Tonemapper.Quality=1

options are probably what's affecting it
tardy bear
#

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

spare bane
#

Reshade takes screenshots. Go to Setting and change the keyboard key, but by default it's PrntScrn

tardy bear
#

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

rigid path
# tardy bear

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

tardy bear
#

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

tardy bear
#

After RenoDRT recovery, subtle flickering anomalies were still found

#

Vanilla works very well

rigid path
#

yeah renodrt

#

are you using frame gen? last time i tried it had some flickering issues but I haven't checked with latest version

spare bane
#

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

rigid path
#

seems to clamp

fallow mica
#

@spare bane tempest rising crashes with addon

#

and i dont even see the in game hdr option ?

#

its still in sdr

tardy bear
fallow mica
#

wait it works

spare bane
spare bane
#

maybe downloading the frame gen dll would help

fallow mica
#

it is working

rigid path
cobalt marlin
# fallow mica

DF Alex should be made aware of RenoDX, maybe he'll mention it on tomorrow's Direct

fallow mica
#

no the game dont even have native hdr

#

review code is broken ?

spare bane
#

out dated and they likely could never get it to work

#

what does strength 0 look like?

#

also, can you find that snow scene?

fallow mica
#

no it doesnt work

#

and its doesnt dump the lutbuilder ?

#

actually the snow scene is just the start of the campaign

spare bane
fallow mica
#

but it doesnt work actually

#

and doesnt dump the lutbuilder

spare bane
#

it's custom then

#

devkit might get you some info

tardy bear
spare bane
tardy bear
#

Anyway

#

Thank you very much for your help

#

Praise you all

#

❤️

marble stump
#

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

spare bane
fallow mica
tired mulch
#

even the transformer model

#

looks like you have something configured incorrectly

tardy bear
fallow mica
spare bane
#

no lut builder at all

fallow mica
#

rip

spare bane
#

would need a custom mod

fallow mica
#

im assuming they just removed the broken native hdr after DF told them

spare bane
#

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

fallow mica
spare bane
#

using the devkit and analyzing the game

fallow mica
#

actually this game is dx11?

#

Is there any other ue5 game dx11

spare bane
#

wuwa, no?

#

has both

fallow mica
#

wuwa is ue4 apparently

#

quite bizzare that they released a ue5 game with dx11 in 2025

bold gulch
#

artifacts in shadows

#

there's less of it when you lower saturation correction

spare bane
# bold gulch

I'm assuming out of gamut stuff. Can't tell well on mobile

spare bane
#

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

bold gulch
#

does just using gamutcompress from ACES not work

spare bane
#

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

dire saffron
#

Is there a way to make it work properly with Atomic Heart?

fallow mica
#

does contrast slider work

dire saffron
#

yes

fallow mica
#

under resource upgrades

dire saffron
#

Upgrade B8G8R8A8_TYPELESS seems to work.

viscid mirage
#

@full moss @vagrant thicket Atomic Heart seems to work with the mod now, if you're still interested in playing that

dire saffron
pine forum
#

any recommended presets for crisis core?

honest elbow
finite basalt
#

doesnt it have native hdr?

#

or is it just bad cuz its UE5

fallow mica
#

lords of the fallen instant crashes with that addon

warped lynx
#

what do the reshade logs say?

fallow mica
warped lynx
#

basically nothing I guess

fallow mica
#

maybe some anti cheats shit

#

but i disabled eac

finite basalt
#

oh you can play that game without eac??

fallow mica
elfin lance
#

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

bold gulch
#

how it should be

elfin lance
#

yea I beat the game on launch

#

played the entire thing EAC off

kind schooner
#

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

fallow mica
#

hdr is dogshit level

#

more washed out than sdr srgb

#

they must done some really cursed shit

finite basalt
elfin lance
#

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

ashen herald
#

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

ashen herald
#

No nvm, removed SK and the issue persists

#

No SK, only reshade with upgrades to stop black screen on start up

elfin lance
#

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

ashen herald
#

👍 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 🤔

elfin lance
#

did you upgrade RGB10

#

Upgrade R10G10B10A2_UNORM

ashen herald
#

Yes

elfin lance
#

try output ratio

#

not output size

#

also try bgr8 upgrades

ashen herald
#

without the upgrade the screen would be entirely black

#

disabling sharpness fixes the problem entirely

elfin lance
elfin lance
#

or upgrades

#

try bgr8 typeless/unorm upgrades

ashen herald
#

lets see

elfin lance
#

also rgb10 to output ratio

ashen herald
#

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

elfin lance
#

sharpening might be a custom shader then

ashen herald
#

Game looking good with reno and we figured out what the issue was. Can't complain and thank you for the pointers Marat.

elfin lance
#

np. enjoy

ashen herald
#

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

elfin lance
#

darktable is weird sometimes, stick to oklab or ictcp

summer heart
#

For Lies of P, the github wiki says this:

#

What do I upgrade B8G8R8A8_TYPELESS to?

#

Any size?

warped lynx
#

probably output size

#

if you're using dlss then you'd use output ratio

summer heart
#

I'm not using DLSS. So I'll try output size then.

covert dawn
#

If I'm using dx11 for mods purpose, should I rename the dll to d3d12?

honest elbow
summer heart
hearty anchor
#

should i use the repo build or wuwa one?

#

for wuwa

#

and this reshade

tired mulch
#

Whichever one works for you

#

You can check with lilium hdr analysis

paper zenith
#

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

paper zenith
#

Always get this

tired mulch
#

what version are you using

tight acorn
#

@worldly wind

worldly wind
#

I'm getting into the game, reshade is loading but not the renodx add-on

dense cliff
#

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

tight acorn
worldly wind
tight acorn
#

so idk :/

worldly wind
#

Only thing I did was rename the reshade DLL to d3d12.dll

#

Since that what it says on Github

dense cliff
#

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

tired mulch
#

the game never had that issue for me

dense cliff
#

I'm vr modding but the same issues could apply to renodx

tired mulch
#

🤷‍♂️

#

anyway we can get skin mods in dx12 without getting banned

paper zenith
worldly wind
paper zenith
#

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.

tired mulch
#

When u can just inject reshade within SK itself

paper zenith
#

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

spare bane
# bold gulch

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

west stump
#

Once aces, forever aces.

spare bane
#

@west stump i'm going to confirm that there's no graphical errors here, but could be useful for showcasing why aces is bad

grim kernel
spare bane
#

yep, whenever you can, thanks 🙏

west stump
spare bane
# west stump 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.

fallow mica
#

right looks pretty close to native hdr

spare bane
#

native hdr doesn't have sdr color grading

#

or sdr luts (technically also sdr color grading)

fallow mica
#

i guess returnal is similar ?

spare bane
#

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

earnest bolt
#

you should 100% try and get it integrated into the engine

west stump
#

It just misses the filmic adjustments

grim kernel
#

they can't actually do everything you'd want

grim kernel
vale yarrow
vale yarrow
spare bane
#

maybe if it inverses the steps the shader will do so the net result is what's expected

thorny kelp
#

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.

west stump
#

that means they'd admit they messed up

#

NEVER, in a million years.

#

Human nature 🙂

earnest bolt
#

Hey they finally accepted your Y FOV change

#

Never say never

viscid mirage
thorny kelp
#

Thanks! I'll update the wiki page for the two games.

viscid mirage
#

you may need to set this for the win64-shipping exe in the properties

thorny kelp
#

That had already been set.

viscid mirage
#

ah ok, I think that would screw up output size and ratio

vale yarrow
spare bane
vale yarrow
#

that's true

spare bane
#

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

vale yarrow
#

I think colourists basically have to fight the ACES stuff when doing grading

#

in movies/shows that is

spare bane
#

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

vale yarrow
#

isn't Netflix grading hella cursed?
basically it looks normal with Vivid modes on TVs

spare bane
#

you can probably find horrible examples, but made for film usually means made for cinema, meaning at best 108 nits Dolby Cinema.

vale yarrow
#

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

spare bane
#

in aces max white is 48

#

0.02 for black

vale yarrow
#

ACES HDR cinema?

thorny kelp
#

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.

vale yarrow
#

I meant DV HDR cinema

spare bane
#

ACES SDR is 48nits, yeah

#

haven't look at what changed in 2.0

vale yarrow
#

cinema stuff has stayed the same

spare bane
#

but 1.3 is sdr 48 nits, hdr 15mid/1000 and 15mid/2000 peak

vale yarrow
#

tbh 48 nits in a cinema is plenty bright because of the huge screen

vale yarrow
#

P3D65 is not cinema

#

cinema white point is that ACES D60

spare bane
#

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.

vale yarrow
#

yep, that's the cinema "standard"

spare bane
#

they do saturate to 48 nits

spare bane
#

it's actually what i use to scale linearly in renodx

#

inverse

spare bane
#

it's the same numbers iirc, just stretched and encoded differently

#

then just scale based on output

#

there's also a 4000 nit one

#

48 / 1000 / 2000 / 4000

vale yarrow
spare bane
#

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

vale yarrow
#

thing's cursed

spare bane
#

Does the math even work though. It's all per channel.

vale yarrow
#

what do you mean?

spare bane
#

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

vale yarrow
#

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

spare bane
#

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

vale yarrow
#

could be

vale yarrow
spare bane
#

That's before ssts

#

They're the same for all odts

vale yarrow
#

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;
spare bane
#

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

vale yarrow
spare bane
#

Aces 1 was 4 curves: 0 to min, min to mid, mid to max, max +

#

Something like that.

vale yarrow
#

yeah 4 curves

spare bane
#

And if min and max were just clip, then it's just a split tonemap system

#

I think that's slope? Something like that

vale yarrow
#

it says spline? though I am not sure what you mean?

spare bane
#

A variable they called offset something

vale yarrow
#

no idea anymore what that is

raw inlet
#

in kof the health bars and portraits are partially affected by UI brightness, but are also affected by game brightness, saturation etc

spare bane
raw inlet
#

I don't think it does normally?

spare bane
#

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"

raw inlet
#

well unfortunately no lut is getting dumped

elfin lance
#

@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

fallow mica
elfin lance
#

did you disable

#

EAC?

fallow mica
#

yeah

#

instant crashes anyway

elfin lance
#

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

fallow mica
elfin lance
#

let me find it again

#

5.1

fallow mica
#

uninstalled unfortunately

elfin lance
#

the reason I asked is because ue 5.3+ seem do to stuff differently

earnest bolt
#

has anyone tried It Takes Two with this?

spare bane
# bold gulch

testing this now, how far into it is it? might just be NaN

bold gulch
#

15 minutes maybe

spare bane
#

i see it on the first staircase

#

we've had those blues in starfield as well

#

when upgradetonemap mismatches i think

spare bane
#

hard luminance mismatch

#

it's crushed in post tonemap (sdr)

bold gulch
#

Take the y of saturated pre tonemap and post tonemap

#

Multiply pre by the ratio to roughly line up luminance

hearty anchor
#

Gonna try without uv

#

dx12

#

Hmm

#

No crashes so far

#

Could it actually be...?

#

Does reno dx make pcs more unstable 🤔

spare bane
#

did find a bug in applyperchannelcorrection

hearty anchor
#

Well i played for a good bit quite sweaty too

#

No crash

#

interesting

spare bane
#

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

glossy valve
spare bane
#
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