summaryrefslogtreecommitdiff
path: root/Plugin.cs
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-06-09 11:44:09 -0400
committerAndrew Opalach <andrew@akon.city> 2026-06-09 11:44:09 -0400
commit253955fad36eadb81882a859cb868f4aa72268a2 (patch)
tree6e3d556fb6016a09d718c7105e998cb7afb8ca78 /Plugin.cs
parentb3c4ab848200f58199656acc85d1f93bde90478f (diff)
downloadWorldTuningTool-253955fad36eadb81882a859cb868f4aa72268a2.tar.gz
WorldTuningTool-253955fad36eadb81882a859cb868f4aa72268a2.tar.bz2
WorldTuningTool-253955fad36eadb81882a859cb868f4aa72268a2.zip
Fix lighting parameters
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'Plugin.cs')
-rwxr-xr-xPlugin.cs51
1 files changed, 41 insertions, 10 deletions
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<UpdateLightingParameters>? updateLightingParams;
+ private Hook<UpdateLightingParameters>? updateLutBlend;
private static Parameter[] lightingParameters = {
newParameter<int>("Light Tone Map Type", 0x16C, ParameterType.INT, pMinMaxStep(1, 6, 1)),
- newParameter<byte>("Light Shoulder Strength", 0x168, ParameterType.BYTE, pStep((byte)1)),
+ newParameter<bool>("Light Compute Luminance", 0x170, ParameterType.BOOL),
+ newParameter<bool>("Light Luminance Version", 0x168, ParameterType.BOOL),
+ newParameter<float>("Light Shoulder Strength", 0x174, ParameterType.FLOAT, pStep(0.001f)),
newParameter<float>("Light Linear Strength", 0x178, ParameterType.FLOAT, pStep(0.001f)),
newParameter<float>("Light Linear Angle", 0x17C, ParameterType.FLOAT, pStep(0.001f)),
newParameter<float>("Light Toe Strength", 0x180, ParameterType.FLOAT, pStep(0.001f)),
newParameter<float>("Light Toe Num", 0x184, ParameterType.FLOAT, pStep(0.001f)),
+ newParameter<float>("Light Toe Denum", 0x188, ParameterType.FLOAT, pStep(0.001f)),
newParameter<float>("Light White Point", 0x18C, ParameterType.FLOAT, pStep(0.01f)),
+ newFrameParameter<float>("Light LUT Blend", 0x1C8, ParameterType.FLOAT, pMinMaxStep(0.0f, 1.0f, 0.01f)),
+ newParameter<float>("Light Vfx LUT Blend", 0x1D0, ParameterType.FLOAT, pMinMaxStep(0.0f, 1.0f, 0.01f)),
newParameter<bool>("Light Enable Color Grading", 0x1D8, ParameterType.BOOL),
+ newParameter<bool>("Light Is Linear To PQ", 0x1A1, ParameterType.BOOL),
+ newParameter<bool>("Light Is PQ To Linear", 0x1A0, ParameterType.BOOL),
newParameter<float>("Volume Dispersion", 0x19C, ParameterType.FLOAT),
newParameter<float>("Volume Edge Sharpness", 0x198, ParameterType.FLOAT, pStep(0.00001f)),
newParameter<bool>("Volume Downsample", 0x210, ParameterType.BOOL)
@@ -1841,6 +1849,7 @@ namespace WorldTuningTool
createLightingObject = Hook.Create<CreateLightingObject>(0x1424CDE20, CreateLightingObjectHook);
destroyLightingObject = Hook.Create<DestroyLightingObject>(0x1424CE380, DestroyLightingObjectHook); // nint, int
+ updateLutBlend = Hook.Create<UpdateLightingParameters>(0x1416D8DF0, UpdateLutBlendHook); // nint, nint
createBloomObject = Hook.Create<CreateBloomObject>(0x1424CB3C0, CreateBloomObjectHook);
createBloomObject2 = Hook.Create<CreateBloomObject2>(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<byte>(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.");
}
}