From 253955fad36eadb81882a859cb868f4aa72268a2 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Tue, 9 Jun 2026 11:44:09 -0400 Subject: Fix lighting parameters Signed-off-by: Andrew Opalach --- Plugin.cs | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) (limited to 'Plugin.cs') diff --git a/Plugin.cs b/Plugin.cs index 3ae2818..04a7f18 100755 --- a/Plugin.cs +++ b/Plugin.cs @@ -1406,15 +1406,23 @@ namespace WorldTuningTool private nint lightingObject = 0x0; private delegate void UpdateLightingParameters(nint stackOffset, nint lightingObjectInternal); private Hook? updateLightingParams; + private Hook? updateLutBlend; private static Parameter[] lightingParameters = { newParameter("Light Tone Map Type", 0x16C, ParameterType.INT, pMinMaxStep(1, 6, 1)), - newParameter("Light Shoulder Strength", 0x168, ParameterType.BYTE, pStep((byte)1)), + newParameter("Light Compute Luminance", 0x170, ParameterType.BOOL), + newParameter("Light Luminance Version", 0x168, ParameterType.BOOL), + newParameter("Light Shoulder Strength", 0x174, ParameterType.FLOAT, pStep(0.001f)), newParameter("Light Linear Strength", 0x178, ParameterType.FLOAT, pStep(0.001f)), newParameter("Light Linear Angle", 0x17C, ParameterType.FLOAT, pStep(0.001f)), newParameter("Light Toe Strength", 0x180, ParameterType.FLOAT, pStep(0.001f)), newParameter("Light Toe Num", 0x184, ParameterType.FLOAT, pStep(0.001f)), + newParameter("Light Toe Denum", 0x188, ParameterType.FLOAT, pStep(0.001f)), newParameter("Light White Point", 0x18C, ParameterType.FLOAT, pStep(0.01f)), + newFrameParameter("Light LUT Blend", 0x1C8, ParameterType.FLOAT, pMinMaxStep(0.0f, 1.0f, 0.01f)), + newParameter("Light Vfx LUT Blend", 0x1D0, ParameterType.FLOAT, pMinMaxStep(0.0f, 1.0f, 0.01f)), newParameter("Light Enable Color Grading", 0x1D8, ParameterType.BOOL), + newParameter("Light Is Linear To PQ", 0x1A1, ParameterType.BOOL), + newParameter("Light Is PQ To Linear", 0x1A0, ParameterType.BOOL), newParameter("Volume Dispersion", 0x19C, ParameterType.FLOAT), newParameter("Volume Edge Sharpness", 0x198, ParameterType.FLOAT, pStep(0.00001f)), newParameter("Volume Downsample", 0x210, ParameterType.BOOL) @@ -1841,6 +1849,7 @@ namespace WorldTuningTool createLightingObject = Hook.Create(0x1424CDE20, CreateLightingObjectHook); destroyLightingObject = Hook.Create(0x1424CE380, DestroyLightingObjectHook); // nint, int + updateLutBlend = Hook.Create(0x1416D8DF0, UpdateLutBlendHook); // nint, nint createBloomObject = Hook.Create(0x1424CB3C0, CreateBloomObjectHook); createBloomObject2 = Hook.Create(0x1424CB5E0, CreateBloomObject2Hook); // nint @@ -2124,7 +2133,10 @@ namespace WorldTuningTool { foreach (Parameter param in lightingParameters) { - param.Update(lightingObject); + if (!param.PerFrame) + { + param.Update(lightingObject); + } } } foreach (Parameter param in lightProbesParameters) @@ -2413,6 +2425,21 @@ namespace WorldTuningTool return destroyLightingObject!.Original(lightingObjectInternal, unknownInt); } + private void UpdateLutBlendHook(nint stackOffset, nint lightingObjectInternal) + { + updateLutBlend!.Original(stackOffset, lightingObjectInternal); + if (lightingObject == lightingObjectInternal) + { + foreach (Parameter param in lightingParameters) + { + if (param.PerFrame) + { + param.Update(lightingObject); + } + } + } + } + private void UpdateShadowParamsHook(nint shadowParams, nint stackOffset) { bool isPrimary = MemoryUtil.Read(stackOffset + 0x1D) == 0x1; @@ -3359,14 +3386,14 @@ namespace WorldTuningTool if (!shadersLoadedOnce && hash == "2e4e18fd-6ea5eeae-2de3d65c-26ab36dd") { if (replaceShaderFromFile(info, $"{shaderPath}/volume_upsample1.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("Volume upsample shader 1 replaced."); } } else if (!shadersLoadedOnce && hash == "e2c8c13e-45bc99b2-4c3d7699-3d66188e") { if (replaceShaderFromFile(info, $"{shaderPath}/volume_upsample2.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("Volume upsample shader 2 replaced."); } // This allows us to A/B using the volume rendering value 2 switch. @@ -3375,14 +3402,14 @@ namespace WorldTuningTool else if (hash == "8cf2a107-ecde214b-9939b350-7b2af1a7") { if (replaceShaderFromFile(info, $"{shaderPath}/cube_only.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("Cube Only shader replaced."); } } else if (hash == "b21dd223-98ab56ae-918264e6-eb6e8ee4") { if (replaceShaderFromFile(info, $"{shaderPath}/sslr.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("SSLR shader replaced."); } } @@ -3396,29 +3423,33 @@ namespace WorldTuningTool else if (hash == "2eed1f00-e24d1b19-9d521064-17b9a586") { if (replaceShaderFromFile(info, $"{shaderPath}/body_skin.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("Body skin shader replaced."); } } else if (hash == "8e5e3c09-ebe77ee4-ba1cb659-d25bc7bf") { if (replaceShaderFromFile(info, $"{shaderPath}/face.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("Face shader replaced."); } } + else if (hash == "ca33bab6-2119df84-41786a69-404471cd") + { + // Color grading. + } /* else if (hash == "18a797dc-9458d333-59e6dff0-9790fcea") { if (replaceShaderFromFile(info, $"{shaderPath}/sssss.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("SSSSS shader replaced."); } } else if (hash == "d7e47ffe-82572c64-795c4698-341e5b91") { if (replaceShaderFromFile(info, $"{shaderPath}/sslr_mips.shdr")) { - info->Replacement.Type = ShaderSourceType.BINARY; + info->Replacement.Type = ShaderSourceType.Binary; Log.Info("SSLR mips shader replaced."); } } -- cgit v1.2.3-101-g0448