summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-04-06 15:27:06 -0400
committerAndrew Opalach <andrew@akon.city> 2026-04-06 15:27:06 -0400
commit4f31c9e16b58eeb1e914d58a4e92b8adc6529450 (patch)
tree1ad489f306690b2bc81a93df78732aa08f5c77e6
parentf0551fb20f92753e8d97bb746e3563364d09e7d9 (diff)
downloadWorldTuningTool-4f31c9e16b58eeb1e914d58a4e92b8adc6529450.tar.gz
WorldTuningTool-4f31c9e16b58eeb1e914d58a4e92b8adc6529450.tar.bz2
WorldTuningTool-4f31c9e16b58eeb1e914d58a4e92b8adc6529450.zip
Cleanup volume upsample stuff
Signed-off-by: Andrew Opalach <andrew@akon.city>
-rwxr-xr-xPlugin.cs26
-rwxr-xr-xShaders/Original/volume_upsample1.dxbc.xz (renamed from Shaders/Original/volume_upsample.dxbc.xz)bin1700 -> 1700 bytes
-rw-r--r--Shaders/volume_upsample1.diff (renamed from Shaders/volume_upsample.diff)15
-rw-r--r--Shaders/volume_upsample2.diff185
4 files changed, 37 insertions, 189 deletions
diff --git a/Plugin.cs b/Plugin.cs
index a7d4394..30d9a88 100755
--- a/Plugin.cs
+++ b/Plugin.cs
@@ -1,4 +1,5 @@
//#define ENABLE_ASSERTS
+//#define ADDR_ASSERTS
//#define SHADER_FEATURES
using System.Numerics;
@@ -1069,6 +1070,8 @@ namespace WorldTuningTool
new Parameter<float>("LOD Length Platform Bias[2]", 0x22C + (4 * 2), ParameterType.FLOAT, false),
new Parameter<float>("LOD Pixel Size Platform Bias[2]", 0x244 + (4 * 2), ParameterType.FLOAT, false),
new Parameter<float>("Fake Light Intensity", 0xEC40, ParameterType.FLOAT, false),
+ // MonsterHunterWorld.exe+1B18711 - mov [rbx+0000EC44],3F800000 (Other unknown reference).
+ new Parameter<float>("Fake Light Intensity (Gameplay)", new IntPtr(0x141B1A19F) + 0x6, ParameterType.PATCH_FLOAT, false),
new Parameter<float>("Fake Light Blend", new IntPtr(0x141CDE0CE) + 0x6, ParameterType.PATCH_FLOAT, false),
new Parameter<byte>("Contact Shadows Enabled", 0xB4EC, ParameterType.BOOL, false),
new Parameter<byte>("Force Disable Contact Shadows", 0xB4ED, ParameterType.BOOL, false),
@@ -1597,6 +1600,10 @@ namespace WorldTuningTool
0xB8, 0x40, 0x15, 0x00, 0x00, 0xEB, 0x21 // This case is used for Low, Medium and High in-game.
]);
+ // The volume blur filter is created at a different place in the code and happens at a different
+ // time (area change/createLightingObject() vs change of Volume Quality setting). It's also rendered
+ // in a seperate pass that happens after the initial volume rendering. So keep that in mind if inspecting
+ // a frame in renderdoc.
volumeSars1 = new Patch(new IntPtr(0x1424D0159), [0x90, 0x90]);
volumeSars2 = new Patch(new IntPtr(0x1424D01A0), [0x90, 0x90]);
volumeSars3 = new Patch(new IntPtr(0x1424D01C6), [0x90, 0x90]);
@@ -1606,13 +1613,28 @@ namespace WorldTuningTool
volumeSars7 = new Patch(new IntPtr(0x1424D02C6), [0x90, 0x90]);
volumeSars8 = new Patch(new IntPtr(0x1424D0321), [0x90, 0x90]);
volumeSars9 = new Patch(new IntPtr(0x1424D034A), [0x90, 0x90]);
+ /* As far as I can tell this is limited by buffers created cpu-side, seems like it
+ * would be an extremely hard change.
+ froxelRes1 = new Patch(new IntPtr(0x142384F15) + 0x1, [0x02]); // 4 -> 2
+ froxelRes2 = new Patch(new IntPtr(0x142389711) + 0x1, [0x02]); // 4 -> 2
+ froxelRes3 = new Patch(new IntPtr(0x142389878) + 0x1, [0x02]); // 4 -> 2
+ froxelRes4 = new Patch(new IntPtr(0x14238989E) + 0x1, [0x02]); // 4 -> 2
+ froxelRes5 = new Patch(new IntPtr(0x1423898D8) + 0x1, [0x02]); // 4 -> 2
+ froxelRes6 = new Patch(new IntPtr(0x14238992B) + 0x1, [0x02]); // 4 -> 2
+ froxelRes7 = new Patch(new IntPtr(0x14238FED1) + 0x4, [0x7B, 0xFF, 0xAB, 0x00]); // 0.25 -> 0.50
+ froxelRes8 = new Patch(new IntPtr(0x14239009C) + 0x4, [0xB0, 0xFD, 0xAB, 0X00]); // 0.25 -> 0.50
+ */
+ /* Would require a complicated shader edit to maybe work. Similar to SSLR.
+ checkerRes1 = new Patch(new IntPtr(0x14238580D) + 0x4, [0x43]); // 0.5 -> 1.0
+ checkerRes2 = new Patch(new IntPtr(0x14238FFC3) + 0x4, [0x8D]); // 0.5 -> 1.0
+ */
value2ForVolumeQuality = new Patch(new IntPtr(0x142389652), [0xB8, 0x02, 0x00, 0x00, 0x00, 0x90]);
// Gameplay.
addr = PatternScanner.FindFirst(Pattern.FromString("80 BB 34 EC 00 00 00 88 8B 31 EC 00 00 C6 83 30 EC 00 00 00 74 1C C6 83 34 EC 00 00 00 48 8B 0D 68 4B 4F 03 80 B9 58 02 00 00 00 75 05 E8 5A F5 01 00 48 8B CB E8 E2 05 00 00 83 BB DC EB 00 00 06 74 0A C7 83 DC EB 00 00 06 00 00 00"));
#if ADDR_ASSERTS
- ssert(addr == 0x141B1A0B4);
+ Assert(addr == 0x141B1A0B4);
#endif
defaultViewModeLODLimit = new Patch(addr + 0x40, [0x07, 0x74, 0x0A, 0xC7, 0x83, 0xDC, 0xEB, 0x00, 0x00, 0x07]);
@@ -2636,7 +2658,7 @@ namespace WorldTuningTool
string hash = new string(info->DxbcHash);
if (!shadersLoadedOnce && hash == "2e4e18fd-6ea5eeae-2de3d65c-26ab36dd")
{
- if (replaceShaderFromFile(info, $"{shaderPath}/volume_upsample.shdr")) {
+ if (replaceShaderFromFile(info, $"{shaderPath}/volume_upsample1.shdr")) {
info->Replacement.Type = ShaderSourceType.BINARY;
Log.Info("Volume upsample shader 1 replaced.");
}
diff --git a/Shaders/Original/volume_upsample.dxbc.xz b/Shaders/Original/volume_upsample1.dxbc.xz
index c273017..c273017 100755
--- a/Shaders/Original/volume_upsample.dxbc.xz
+++ b/Shaders/Original/volume_upsample1.dxbc.xz
Binary files differ
diff --git a/Shaders/volume_upsample.diff b/Shaders/volume_upsample1.diff
index 13c9633..190a6ec 100644
--- a/Shaders/volume_upsample.diff
+++ b/Shaders/volume_upsample1.diff
@@ -1,6 +1,6 @@
---- a/volume_upsample.asm 2026-03-16 15:19:54.032009332 -0400
-+++ b/volume_upsample.asm 2026-03-16 15:19:36.341817879 -0400
-@@ -235,16 +155,9 @@
+--- a/volume_upsample1.asm 2026-04-06 14:22:44.767716700 -0400
++++ b/volume_upsample1.asm 2026-04-06 14:10:12.184989600 -0400
+@@ -235,16 +235,9 @@
ld_indexable(texture2d)(float,float,float,float) r1.yzw, r2.xyzz, t3.wxyz
ld_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyzz, t4.xyzw
else
@@ -10,13 +10,10 @@
- sample_l_indexable(texture2d)(float,float,float,float) r1.yzw, r0.xyxx, t0.wxyz, s0, l(0.000000)
- sample_l_indexable(texture2d)(float,float,float,float) r3.xyz, r0.xyxx, t1.xyzw, s0, l(0.000000)
- else
-- mov r2.w, l(0)
-- ld_indexable(texture2d)(float,float,float,float) r1.yzw, r2.xyww, t0.wxyz
-- ld_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyww, t1.xyzw
+ mov r2.w, l(0)
+ ld_indexable(texture2d)(float,float,float,float) r1.yzw, r2.xyww, t0.wxyz
+ ld_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyww, t1.xyzw
- endif
-+ mov r2.w, l(0)
-+ ld_indexable(texture2d)(float,float,float,float) r1.yzw, r2.xyww, t0.wxyz
-+ ld_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyww, t1.xyzw
endif
store_uav_typed u0.xyzw, vThreadID.xyyy, r0.wwww
store_uav_typed u1.xyzw, vThreadID.xyyy, r1.yzwy
diff --git a/Shaders/volume_upsample2.diff b/Shaders/volume_upsample2.diff
index 0887f10..41928bb 100644
--- a/Shaders/volume_upsample2.diff
+++ b/Shaders/volume_upsample2.diff
@@ -1,10 +1,9 @@
---- a/volume_upsample2.asm 2026-03-16 15:19:50.820204181 -0400
-+++ b/volume_upsample2.asm 2026-03-16 15:19:31.707007465 -0400
-@@ -254,103 +182,92 @@
- else
+--- a/volume_upsample2.asm 2026-04-06 14:22:43.005055900 -0400
++++ b/volume_upsample2.asm 2026-04-06 14:10:43.900118100 -0400
+@@ -255,14 +255,9 @@
mov r0.w, l(0)
endif
--if_nz r0.w
+ if_nz r0.w
- utof r1.xy, r2.xyxx
- mul r1.xy, r1.xyxx, cb3[2].zwzz
- mul r1.xy, r1.xyxx, cb1[4].zzzz
@@ -13,179 +12,9 @@
- min r1.xy, r1.zwzz, r1.xyxx
- sample_l_indexable(texture2d)(float,float,float,float) r3.xyz, r1.xyxx, t1.xyzw, s0, l(0.000000)
- sample_l_indexable(texture2d)(float,float,float,float) r1.xyz, r1.xyxx, t2.xyzw, s0, l(0.000000)
-+if_nz r0.z
-+ iadd r0.xy, -r0.xyxx, r2.yxyy
-+ mov r4.xy, vThreadID.xyxx
-+ mov r4.zw, l(0,0,0,0)
-+ ld_indexable(texture2d)(float,float,float,float) r0.z, r4.xyzw, t0.yzxw
-+ not r4.xy, r0.xyxx
-+ imad r0.y, r4.x, l(-9), r0.y
-+ imad r0.w, r4.x, l(-9), -r4.y
-+ ishl r0.w, r0.w, l(8)
-+ or r0.w, r0.w, r0.y
-+ imad r0.x, r0.x, l(9), -r4.y
-+ ishl r0.xy, r0.xyxx, l(16, 24, 0, 0)
-+ or r0.x, r0.x, r0.w
-+ or r0.x, r0.y, r0.x
-+ bfi r0.y, l(1), l(1), vThreadIDInGroup.y, l(0)
-+ bfi r0.y, l(1), l(0), vThreadIDInGroup.x, r0.y
-+ and r0.w, r0.x, l(255)
-+ ld_structured r1.w, r0.w, l(0), g0.xxxx
-+ add r1.w, r0.z, -r1.w
-+ add r1.w, |r1.w|, l(1.192092896E-07)
-+ iadd r3.w, -r1.w, l(0x7ef312ac)
-+ mad r4.x, -r3.w, r1.w, l(2.000000)
-+ mul r3.w, r3.w, r4.x
-+ mad r1.w, -r3.w, r1.w, l(2.000000)
-+ mul r1.w, r1.w, r3.w
-+ mul r3.w, r1.w, icb[r0.y + 0].x
-+ ld_structured r4.xyz, r0.w, l(0), g1.xyzx
-+ ld_structured r5.xyz, r0.w, l(0), g2.xyzx
-+ mad r0.w, r1.w, icb[r0.y + 0].x, l(1.192092896E-07)
-+ ubfe r6.xy, l(8, 8, 0, 0), l(8, 16, 0, 0), r0.xxxx
-+ ld_structured r1.w, r6.x, l(0), g0.xxxx
-+ add r1.w, r0.z, -r1.w
-+ add r1.w, |r1.w|, l(1.192092896E-07)
-+ iadd r4.w, -r1.w, l(0x7ef312ac)
-+ mad r5.w, -r4.w, r1.w, l(2.000000)
-+ mul r4.w, r4.w, r5.w
-+ mad r1.w, -r4.w, r1.w, l(2.000000)
-+ mul r1.w, r1.w, r4.w
-+ mul r4.w, r1.w, icb[r0.y + 0].y
-+ ld_structured r7.xyz, r6.x, l(0), g1.xyzx
-+ mul r7.xyz, r4.wwww, r7.xyzx
-+ mad r4.xyz, r4.xyzx, r3.wwww, r7.xyzx
-+ ld_structured r6.xzw, r6.x, l(0), g2.xxyz
-+ mul r6.xzw, r4.wwww, r6.xxzw
-+ mad r5.xyz, r5.xyzx, r3.wwww, r6.xzwx
-+ mad r0.w, r1.w, icb[r0.y + 0].y, r0.w
-+ ld_structured r1.w, r6.y, l(0), g0.xxxx
-+ add r1.w, r0.z, -r1.w
-+ add r1.w, |r1.w|, l(1.192092896E-07)
-+ iadd r3.w, -r1.w, l(0x7ef312ac)
-+ mad r4.w, -r3.w, r1.w, l(2.000000)
-+ mul r3.w, r3.w, r4.w
-+ mad r1.w, -r3.w, r1.w, l(2.000000)
-+ mul r1.w, r1.w, r3.w
-+ mul r3.w, r1.w, icb[r0.y + 0].z
-+ ld_structured r6.xzw, r6.y, l(0), g1.xxyz
-+ mad r4.xyz, r6.xzwx, r3.wwww, r4.xyzx
-+ ld_structured r6.xyz, r6.y, l(0), g2.xyzx
-+ mad r5.xyz, r6.xyzx, r3.wwww, r5.xyzx
-+ mad r0.w, r1.w, icb[r0.y + 0].z, r0.w
-+ ushr r0.x, r0.x, l(24)
-+ ld_structured r1.w, r0.x, l(0), g0.xxxx
-+ add r0.z, r0.z, -r1.w
-+ add r0.z, |r0.z|, l(1.192092896E-07)
-+ iadd r1.w, -r0.z, l(0x7ef312ac)
-+ mad r3.w, -r1.w, r0.z, l(2.000000)
-+ mul r1.w, r1.w, r3.w
-+ mad r0.z, -r1.w, r0.z, l(2.000000)
-+ mul r0.z, r0.z, r1.w
-+ mul r1.w, r0.z, icb[r0.y + 0].w
-+ ld_structured r6.xyz, r0.x, l(0), g1.xyzx
-+ mad r4.xyz, r6.xyzx, r1.wwww, r4.xyzx
-+ ld_structured r6.xyz, r0.x, l(0), g2.xyzx
-+ mad r5.xyz, r6.xyzx, r1.wwww, r5.xyzx
-+ mad r0.x, r0.z, icb[r0.y + 0].w, r0.w
-+ iadd r0.y, -r0.x, l(0x7ef312ac)
-+ mad r0.z, -r0.y, r0.x, l(2.000000)
-+ mul r0.y, r0.z, r0.y
-+ mad r0.x, -r0.y, r0.x, l(2.000000)
-+ mul r0.x, r0.x, r0.y
-+ mul r3.xyz, r0.xxxx, r4.xyzx
-+ mul r1.xyz, r0.xxxx, r5.xyzx
- else
-- if_nz r0.z
-- iadd r0.xy, -r0.xyxx, r2.yxyy
-- mov r4.xy, vThreadID.xyxx
-- mov r4.zw, l(0,0,0,0)
-- ld_indexable(texture2d)(float,float,float,float) r0.z, r4.xyzw, t0.yzxw
-- not r4.xy, r0.xyxx
-- imad r0.y, r4.x, l(-9), r0.y
-- imad r0.w, r4.x, l(-9), -r4.y
-- ishl r0.w, r0.w, l(8)
-- or r0.w, r0.w, r0.y
-- imad r0.x, r0.x, l(9), -r4.y
-- ishl r0.xy, r0.xyxx, l(16, 24, 0, 0)
-- or r0.x, r0.x, r0.w
-- or r0.x, r0.y, r0.x
-- bfi r0.y, l(1), l(1), vThreadIDInGroup.y, l(0)
-- bfi r0.y, l(1), l(0), vThreadIDInGroup.x, r0.y
-- and r0.w, r0.x, l(255)
-- ld_structured r1.w, r0.w, l(0), g0.xxxx
-- add r1.w, r0.z, -r1.w
-- add r1.w, |r1.w|, l(1.192092896E-07)
-- iadd r3.w, -r1.w, l(0x7ef312ac)
-- mad r4.x, -r3.w, r1.w, l(2.000000)
-- mul r3.w, r3.w, r4.x
-- mad r1.w, -r3.w, r1.w, l(2.000000)
-- mul r1.w, r1.w, r3.w
-- mul r3.w, r1.w, icb[r0.y + 0].x
-- ld_structured r4.xyz, r0.w, l(0), g1.xyzx
-- ld_structured r5.xyz, r0.w, l(0), g2.xyzx
-- mad r0.w, r1.w, icb[r0.y + 0].x, l(1.192092896E-07)
-- ubfe r6.xy, l(8, 8, 0, 0), l(8, 16, 0, 0), r0.xxxx
-- ld_structured r1.w, r6.x, l(0), g0.xxxx
-- add r1.w, r0.z, -r1.w
-- add r1.w, |r1.w|, l(1.192092896E-07)
-- iadd r4.w, -r1.w, l(0x7ef312ac)
-- mad r5.w, -r4.w, r1.w, l(2.000000)
-- mul r4.w, r4.w, r5.w
-- mad r1.w, -r4.w, r1.w, l(2.000000)
-- mul r1.w, r1.w, r4.w
-- mul r4.w, r1.w, icb[r0.y + 0].y
-- ld_structured r7.xyz, r6.x, l(0), g1.xyzx
-- mul r7.xyz, r4.wwww, r7.xyzx
-- mad r4.xyz, r4.xyzx, r3.wwww, r7.xyzx
-- ld_structured r6.xzw, r6.x, l(0), g2.xxyz
-- mul r6.xzw, r4.wwww, r6.xxzw
-- mad r5.xyz, r5.xyzx, r3.wwww, r6.xzwx
-- mad r0.w, r1.w, icb[r0.y + 0].y, r0.w
-- ld_structured r1.w, r6.y, l(0), g0.xxxx
-- add r1.w, r0.z, -r1.w
-- add r1.w, |r1.w|, l(1.192092896E-07)
-- iadd r3.w, -r1.w, l(0x7ef312ac)
-- mad r4.w, -r3.w, r1.w, l(2.000000)
-- mul r3.w, r3.w, r4.w
-- mad r1.w, -r3.w, r1.w, l(2.000000)
-- mul r1.w, r1.w, r3.w
-- mul r3.w, r1.w, icb[r0.y + 0].z
-- ld_structured r6.xzw, r6.y, l(0), g1.xxyz
-- mad r4.xyz, r6.xzwx, r3.wwww, r4.xyzx
-- ld_structured r6.xyz, r6.y, l(0), g2.xyzx
-- mad r5.xyz, r6.xyzx, r3.wwww, r5.xyzx
-- mad r0.w, r1.w, icb[r0.y + 0].z, r0.w
-- ushr r0.x, r0.x, l(24)
-- ld_structured r1.w, r0.x, l(0), g0.xxxx
-- add r0.z, r0.z, -r1.w
-- add r0.z, |r0.z|, l(1.192092896E-07)
-- iadd r1.w, -r0.z, l(0x7ef312ac)
-- mad r3.w, -r1.w, r0.z, l(2.000000)
-- mul r1.w, r1.w, r3.w
-- mad r0.z, -r1.w, r0.z, l(2.000000)
-- mul r0.z, r0.z, r1.w
-- mul r1.w, r0.z, icb[r0.y + 0].w
-- ld_structured r6.xyz, r0.x, l(0), g1.xyzx
-- mad r4.xyz, r6.xyzx, r1.wwww, r4.xyzx
-- ld_structured r6.xyz, r0.x, l(0), g2.xyzx
-- mad r5.xyz, r6.xyzx, r1.wwww, r5.xyzx
-- mad r0.x, r0.z, icb[r0.y + 0].w, r0.w
-- iadd r0.y, -r0.x, l(0x7ef312ac)
-- mad r0.z, -r0.y, r0.x, l(2.000000)
-- mul r0.y, r0.z, r0.y
-- mad r0.x, -r0.y, r0.x, l(2.000000)
-- mul r0.x, r0.x, r0.y
-- mul r3.xyz, r0.xxxx, r4.xyzx
-- mul r1.xyz, r0.xxxx, r5.xyzx
-- else
-- mov r2.zw, l(0,0,0,0)
-- ld_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyww, t1.xyzw
-- ld_indexable(texture2d)(float,float,float,float) r1.xyz, r2.xyzw, t2.xyzw
-- endif
+ mov r2.zw, l(0,0,0,0)
+ ld_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyww, t1.xyzw
+ ld_indexable(texture2d)(float,float,float,float) r1.xyz, r2.xyzw, t2.xyzw
- endif
- store_uav_typed u1.xyzw, vThreadID.xyyy, r1.xyzz
- store_uav_typed u0.xyzw, vThreadID.xyyy, r3.xyzz
+ else
+ if_nz r0.z
+ iadd r0.xy, -r0.xyxx, r2.yxyy