Bo3b's School For Shaderhackers
  41 / 87    
Thank you again, DSS, that was exactly what I was looking for! However, despite that, things have gotten even worse for me because now something I've added/changed is causing the game to crash each time I reload the shaders, which is preventing me from being able to do any experimentation without restarting EVERY time, and needless to say that's not efficient at all. I'm sorry to keep asking for help, but I feel like I'm getting so close to getting this, yet am almost at my wits end and about to have a mental breakdown due to frustration, so could someone please help me figure out what's causing the crashing so I can at least get back to experimenting? Here's the contents of my DX9Settings.ini [code][General] UseRenderedShaders=true DumpAll=False DefVSConst1 = 220 DefPSConst1 = 220 PresetsKeysList = 1; [KEY1] Key = 96 Presets = 1;2; Type = 1 [PRES1] Const1 = 0x3f800000 [PRES2] UseByDef=True Const1 = 0x00000000 [PS36ECF708] GetMatrixFromReg = 102 InverseMatrix = true DoubleInverseMatrix = true [PS5C027D7F] UseMatrix = true MatrixReg = 150 [VS6AF7D606] UseMatrix = true MatrixReg = 150 [/code] Here is the contents of PS36ECF708 where I found the mProjectionMatrix register. I've made no changes to it (besides adding the comment at the top), so you don't have to scan the code for anything I may have done in it. One question I have is do I need to have this file in my ShaderOverride folder, or be doing anything else at all besides that addition in the dx9settings.ini file to be able to grab the matrix values from it? [code]//PS with ViewProj Matrix // // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 // // Parameters: // // sampler2D DepthSpecBuffer; // sampler2D NoiseNormalMap; // sampler2D NormalBuffer; // float2 fNoiseOffset; // float4 fOcclusionParams; // float4 fSpherePoints[64]; // float4x4 mProjectionMatrix; // // // Registers: // // Name Reg Size // ----------------- ----- ---- // fOcclusionParams c32 1 // fNoiseOffset c34 1 // fSpherePoints c38 16 // mProjectionMatrix c102 4 // DepthSpecBuffer s0 1 // NormalBuffer s1 1 // NoiseNormalMap s2 1 // ps_3_0 def c0, 0.999000013, -0.00784313772, 2, -1 def c1, 256, 1.00000001e-007, 0.159154937, 0.5 def c2, 6.28318548, -3.14159274, 0.100000001, 1e+010 def c3, 23.1406918, 2.66514421, 0, 123456792 def c4, 0.5, -0.5, 16, 0.0625 def c5, 0, 1, -0, -1 dcl_texcoord1 v0.xy dcl_texcoord2 v1.y dcl_texcoord3 v2.xyz dcl_texcoord4 v3.xy dcl_texcoord5 v4.xyz dcl_texcoord6 v5.xyz dcl_texcoord7 v6.xyz dcl_2d s0 dcl_2d s1 dcl_2d s2 texld r0, v0, s0 add r1, -r0.x, c0.x mul r0.xyz, r0.x, v2 texkill r1 texld r1, v0, s1 add r2, r1.w, c0.y mad r1.xyz, r1, c0.z, c0.w texkill r2 dp2add r0.w, r0, c3, c3.z mad r0.w, r0.w, c1.x, c1.y rcp r1.w, r0.w mul r2.x, r1.w, c3.w frc r2.x, r2_abs.x cmp r1.w, r1.w, r2.x, -r2.x mul r0.w, r0.w, r1.w mad r0.w, r0.w, c1.z, c1.w frc r0.w, r0.w mad r0.w, r0.w, c2.x, c2.y sincos r2.x, r0.w frc r2.x, r2.x dp2add r0.w, r0.yzzw, c3, c3.z mad r0.w, r0.w, c1.x, c1.y rcp r1.w, r0.w mul r2.z, r1.w, c3.w frc r2.z, r2_abs.z cmp r1.w, r1.w, r2.z, -r2.z mul r0.w, r0.w, r1.w mad r0.w, r0.w, c1.z, c1.w frc r0.w, r0.w mad r0.w, r0.w, c2.x, c2.y sincos r3.x, r0.w frc r2.y, r3.x add r2.xy, r2, c34 mad r2.xy, v3, c2.z, r2 texld r2, r2, s2 mad r2.xyz, r2, c0.z, c0.w dp3 r0.w, c39, r2 add r0.w, r0.w, r0.w mad r3.xyz, r2, -r0.w, c39 mul r4.xyz, r1.y, v5 mad r1.xyw, v4.xyzz, r1.x, r4.xyzz mad r1.xyz, v6, r1.z, r1.xyww dp3 r0.w, r3, r1 cmp r1.w, -r0.w, c5.x, c5.y cmp r0.w, r0.w, c5.z, c5.w add r0.w, r0.w, r1.w mad r3.xyz, r3, r0.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r0.w, r3.w mul r3.xy, r0.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r0.w, r4.x, -v1.y, r3.z add r0.w, r0.w, -c32.y mul r1.w, r0.w, r0.w mul_sat r0.w, r0.w, c2.w mov r2.w, c0.w mad r1.w, r1.w, c32.x, -r2.w rcp r1.w, r1.w mul r0.w, r0.w, r1.w dp3 r1.w, c38, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c38 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c40, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c40 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c41, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c41 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c42, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c42 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c43, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c43 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c44, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c44 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c45, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c45 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c46, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c46 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c47, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c47 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c48, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c48 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c49, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c49 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c50, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c50 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c51, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c51 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c52, r2 add r1.w, r1.w, r1.w mad r3.xyz, r2, -r1.w, c52 dp3 r1.w, r3, r1 cmp r3.w, -r1.w, c5.x, c5.y cmp r1.w, r1.w, c5.z, c5.w add r1.w, r1.w, r3.w mad r3.xyz, r3, r1.w, r0 mul r4.xyz, r3.y, c103.xyww mad r3.xyw, c102, r3.x, r4.xyzz mad r3.xyw, c104, r3.z, r3 add r3.xyw, r3, c105 rcp r1.w, r3.w mul r3.xy, r1.w, r3 mad r3.xy, r3, c4, c4.x texld r4, r3, s0 mad r1.w, r4.x, -v1.y, r3.z add r1.w, r1.w, -c32.y mul r3.x, r1.w, r1.w mul_sat r1.w, r1.w, c2.w mad r3.x, r3.x, c32.x, -r2.w rcp r3.x, r3.x mad r0.w, r1.w, r3.x, r0.w dp3 r1.w, c53, r2 add r1.w, r1.w, r1.w mad r2.xyz, r2, -r1.w, c53 dp3 r1.x, r2, r1 cmp r1.y, -r1.x, c5.x, c5.y cmp r1.x, r1.x, c5.z, c5.w add r1.x, r1.x, r1.y mad r0.xyz, r2, r1.x, r0 mul r1.xyz, r0.y, c103.xyww mad r1.xyz, c102.xyww, r0.x, r1 mad r1.xyz, c104.xyww, r0.z, r1 add r1.xyz, r1, c105.xyww rcp r0.x, r1.z mul r0.xy, r0.x, r1 mad r0.xy, r0, c4, c4.x texld r1, r0, s0 mad r0.x, r1.x, -v1.y, r0.z add r0.x, r0.x, -c32.y mul r0.y, r0.x, r0.x mul_sat r0.x, r0.x, c2.w mad r0.y, r0.y, c32.x, -r2.w rcp r0.y, r0.y mad r0.x, r0.x, r0.y, r0.w add r0.x, -r0.x, c4.z mul oC0.xyz, r0.x, c4.w mov oC0.w, -c0.w // approximately 427 instruction slots used (19 texture, 408 arithmetic) [/code] Here is the PS5C027D7F, which is the shadow I'm trying to fix. There's still a bit of experimentation I'm looking to do, so I'm not expecting anyone to actually figure out the fix for me (but I am welcome to input and suggestions on that), but again, if there's something I'm doing wrong that's causing the crashes it would be appreciated to point that out. [code]//Title screen - Helicopter shadow // // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 // // Parameters: // // float4 CascadeScale; // float4 CascadeTextureSplitsEnd; // sampler2D DepthSpecBuffer; // float3 DownDir; // float3 EyePos; // float4 FadeoutParameters; // float4 InvScreenSize; // float2 InvShadowMapSize; // float4x4 LightProjectionTex[4]; // float3 RightDir; // float4 ShadowParameters; // sampler2D ShadowTex; // float3 UpperLeftCorner; // // // Registers: // // Name Reg Size // ----------------------- ----- ---- // InvShadowMapSize c34 1 // CascadeScale c36 1 // CascadeTextureSplitsEnd c37 1 // FadeoutParameters c38 1 // LightProjectionTex c40 8 // ShadowParameters c60 1 // InvScreenSize c61 1 // UpperLeftCorner c62 1 // RightDir c63 1 // DownDir c64 1 // EyePos c65 1 // DepthSpecBuffer s0 1 // ShadowTex s2 1 // ps_3_0 def c0, 0.5, 0.999989986, 0, 1 def c1, -0, -1, -2, -3 def c2, 0.0625, 0, 0, 0 def c3, -0.81409955, 0.914375901, 0.199841261, 0.78641367 def c4, 0.791975141, 0.190901875, -0.241888404, 0.997065067 def c5, 0.53742981, -0.4737342, -0.26496911, -0.418930233 def c6, 0.974843979, 0.756483793, 0.443233252, -0.975115538 def c7, -0.815442324, -0.879124641, -0.382775426, 0.276768446 def c8, 0.344959378, 0.293877602, -0.915885806, 0.457714319 def c9, 0.945586085, -0.768907249, -0.0941841006, -0.929388702 def c10, 0.143831611, -0.1410079, -0.942016244, -0.399062157 dcl vPos.xy dcl_2d s0 dcl_2d s2 dcl_2d s13 mov r0.x, c0.x mul r0.xy, r0.x, c61 mad r0.xy, vPos, c61, r0 texld r1, r0, s0 add r2, -r1.x, c0.y texkill r2 mov r2.xyz, c63 mad r0.xzw, r2.xyyz, r0.x, c62.xyyz mad r0.xyz, c64, r0.y, r0.xzww mul r1.yzw, r0.xxyz, r1.x mad r0.xyz, r1.x, r0, c65 //Attempted fix of shadows mov r10, r0 mov r10.w, c0.w //Set to 1 for matrix transform //View Projection transform dp4 r11.x, r10, c154 dp4 r11.y, r10, c155 dp4 r11.z, r10, c156 dp4 r11.w, r10, c157 //Stereo adjustment texldl r24, c2.x, s13 add r24.y, r11.w, -r24.y //Tried with r11.z as well mul r24.x, r24.x, r24.y add r11.x, r11.x, -r24.x //Tried with adding rather than subtracting //Inverse back to view space dp4 r10.x, r11, c150 dp4 r10.y, r11, c151 dp4 r10.z, r11, c152 dp4 r10.w, r11, c153 mov r0, r10 dp3 r0.w, r1.yzww, r1.yzww rsq r0.w, r0.w rcp r0.w, r0.w //Can try fix after here add r1, -r0.w, c37 add r0.w, -r0.w, c38.x mul_sat r0.w, r0.w, c38.y cmp r1, r1, c0.z, c0.w dp4 r1.x, r1, c0.w mul r1.yzw, r0.y, c41.xxyz mad r1.yzw, c40.xxyz, r0.x, r1 mad r1.yzw, c42.xxyz, r0.z, r1 add r1.yzw, r1, c43.xxyz mul r2.xyz, r0.y, c45 mad r2.xyz, c44, r0.x, r2 mad r0.xyz, c46, r0.z, r2 add r0.xyz, r0, c47 //Try fixes from here on, transformed to light space cmp r0.xyz, -r1.x, r1.yzww, r0 add r1, r1.x, c1 cmp r1, -r1_abs, c0.w, c0.z dp4 r1.x, c36, r1 mov r2.xy, c34 mul r2, r2.xyxy, c60.x mul r1, r1.x, r2 mad r2, r1.zwzw, c10, r0.xyxy texld r3, r2, s2 texld r2, r2.zwzw, s2 mov r3.y, r2.x mad r2, r1.zwzw, c9, r0.xyxy texld r4, r2, s2 texld r2, r2.zwzw, s2 mov r3.w, r2.x mov r3.z, r4.x add r2, r0.z, -r3 cmp r2, r2, c0.z, c0.w dp4 r2.x, r2, c2.x mad r3, r1.zwzw, c8, r0.xyxy texld r4, r3, s2 //Slightly shifts on y axis texld r3, r3.zwzw, s2 mov r4.y, r3.x mad r3, r1.zwzw, c7, r0.xyxy texld r5, r3, s2 texld r3, r3.zwzw, s2 mov r4.w, r3.x mov r4.z, r5.x add r3, r0.z, -r4 cmp r3, r3, c0.z, c0.w dp4 r2.y, r3, c2.x add r2.x, r2.y, r2.x mad r3, r1.zwzw, c6, r0.xyxy texld r4, r3, s2 texld r3, r3.zwzw, s2 mov r4.y, r3.x mad r3, r1.zwzw, c5, r0.xyxy texld r5, r3, s2 texld r3, r3.zwzw, s2 mov r4.w, r3.x mov r4.z, r5.x add r3, r0.z, -r4 cmp r3, r3, c0.z, c0.w dp4 r2.y, r3, c2.x add r2.x, r2.y, r2.x mad r3, r1.zwzw, c4, r0.xyxy mad r1, r1, c3, r0.xyxy texld r4, r3, s2 texld r3, r3.zwzw, s2 mov r4.y, r3.x texld r3, r1, s2 texld r1, r1.zwzw, s2 mov r4.w, r1.x mov r4.z, r3.x add r1, r0.z, -r4 cmp r1, r1, c0.z, c0.w dp4 r0.x, r1, c2.x add r0.x, r0.x, r2.x add r0.x, -r0.w, r0.x add r0.x, r0.x, c0.w mov_sat oC0, r0.x //Disable broken shadows //mov oC0.xyzw, c0.zzzz // approximately 88 instruction slots used (17 texture, 71 arithmetic) [/code] And finally, here is VS6AF7D606, which is the VS with 2D lights that I fixed. This works with the fixed value that I found through guesswork, but I'm not sure if that will work for other setups, so I'd like to try to multiple by FOV, which I read is achieved by dividing by the view projection m00 value. I tried to implement this in the commented out code, but that didn't work. Did I do this correctly? [code]//Title screen - Spotlights - FIXED // // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 // // Parameters: // // float4x4 matMVP; // // // Registers: // // Name Reg Size // ------------ ----- ---- // matMVP c8 4 // vs_3_0 def c200, 1.0, 600, 0.0625, 0.25 //Last parameter found through guesswork, used for stereo adjustment dcl_2d s0 dcl_position o10 dcl_texcoord o0.xy dcl_color o8 dcl_position v0 dcl_color v1 dcl_texcoord v2 mul r0, v0.y, c9 mad r0, c8, v0.x, r0 mad r0, c10, v0.z, r0 //Mostly standard stereo adjustment texldl r30, c200.z, s0 add r30.w, r0.w, -r30.y mul r30.z, r30.x, r30.w mul r30.z, r30.z, c200.w //Additional adjustment to reduce separation //rcp r30.w, c154.x //mul r30.z, r30.z, r30.w add r0.x, r0.x, -r30.z add o10, r0, c11 mov o0.xy, v2 mov o8, v1 // approximately 6 instruction slots used [/code]
Thank you again, DSS, that was exactly what I was looking for! However, despite that, things have gotten even worse for me because now something I've added/changed is causing the game to crash each time I reload the shaders, which is preventing me from being able to do any experimentation without restarting EVERY time, and needless to say that's not efficient at all. I'm sorry to keep asking for help, but I feel like I'm getting so close to getting this, yet am almost at my wits end and about to have a mental breakdown due to frustration, so could someone please help me figure out what's causing the crashing so I can at least get back to experimenting?

Here's the contents of my DX9Settings.ini
[General]
UseRenderedShaders=true
DumpAll=False
DefVSConst1 = 220
DefPSConst1 = 220
PresetsKeysList = 1;

[KEY1]
Key = 96
Presets = 1;2;
Type = 1

[PRES1]
Const1 = 0x3f800000
[PRES2]
UseByDef=True
Const1 = 0x00000000

[PS36ECF708]
GetMatrixFromReg = 102
InverseMatrix = true
DoubleInverseMatrix = true

[PS5C027D7F]
UseMatrix = true
MatrixReg = 150

[VS6AF7D606]
UseMatrix = true
MatrixReg = 150


Here is the contents of PS36ECF708 where I found the mProjectionMatrix register. I've made no changes to it (besides adding the comment at the top), so you don't have to scan the code for anything I may have done in it. One question I have is do I need to have this file in my ShaderOverride folder, or be doing anything else at all besides that addition in the dx9settings.ini file to be able to grab the matrix values from it?
//PS with ViewProj Matrix
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// sampler2D DepthSpecBuffer;
// sampler2D NoiseNormalMap;
// sampler2D NormalBuffer;
// float2 fNoiseOffset;
// float4 fOcclusionParams;
// float4 fSpherePoints[64];
// float4x4 mProjectionMatrix;
//
//
// Registers:
//
// Name Reg Size
// ----------------- ----- ----
// fOcclusionParams c32 1
// fNoiseOffset c34 1
// fSpherePoints c38 16
// mProjectionMatrix c102 4
// DepthSpecBuffer s0 1
// NormalBuffer s1 1
// NoiseNormalMap s2 1
//

ps_3_0
def c0, 0.999000013, -0.00784313772, 2, -1
def c1, 256, 1.00000001e-007, 0.159154937, 0.5
def c2, 6.28318548, -3.14159274, 0.100000001, 1e+010
def c3, 23.1406918, 2.66514421, 0, 123456792
def c4, 0.5, -0.5, 16, 0.0625
def c5, 0, 1, -0, -1
dcl_texcoord1 v0.xy
dcl_texcoord2 v1.y
dcl_texcoord3 v2.xyz
dcl_texcoord4 v3.xy
dcl_texcoord5 v4.xyz
dcl_texcoord6 v5.xyz
dcl_texcoord7 v6.xyz
dcl_2d s0
dcl_2d s1
dcl_2d s2
texld r0, v0, s0
add r1, -r0.x, c0.x
mul r0.xyz, r0.x, v2
texkill r1
texld r1, v0, s1
add r2, r1.w, c0.y
mad r1.xyz, r1, c0.z, c0.w
texkill r2
dp2add r0.w, r0, c3, c3.z
mad r0.w, r0.w, c1.x, c1.y
rcp r1.w, r0.w
mul r2.x, r1.w, c3.w
frc r2.x, r2_abs.x
cmp r1.w, r1.w, r2.x, -r2.x
mul r0.w, r0.w, r1.w
mad r0.w, r0.w, c1.z, c1.w
frc r0.w, r0.w
mad r0.w, r0.w, c2.x, c2.y
sincos r2.x, r0.w
frc r2.x, r2.x
dp2add r0.w, r0.yzzw, c3, c3.z
mad r0.w, r0.w, c1.x, c1.y
rcp r1.w, r0.w
mul r2.z, r1.w, c3.w
frc r2.z, r2_abs.z
cmp r1.w, r1.w, r2.z, -r2.z
mul r0.w, r0.w, r1.w
mad r0.w, r0.w, c1.z, c1.w
frc r0.w, r0.w
mad r0.w, r0.w, c2.x, c2.y
sincos r3.x, r0.w
frc r2.y, r3.x
add r2.xy, r2, c34
mad r2.xy, v3, c2.z, r2
texld r2, r2, s2
mad r2.xyz, r2, c0.z, c0.w
dp3 r0.w, c39, r2
add r0.w, r0.w, r0.w
mad r3.xyz, r2, -r0.w, c39
mul r4.xyz, r1.y, v5
mad r1.xyw, v4.xyzz, r1.x, r4.xyzz
mad r1.xyz, v6, r1.z, r1.xyww
dp3 r0.w, r3, r1
cmp r1.w, -r0.w, c5.x, c5.y
cmp r0.w, r0.w, c5.z, c5.w
add r0.w, r0.w, r1.w
mad r3.xyz, r3, r0.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r0.w, r3.w
mul r3.xy, r0.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r0.w, r4.x, -v1.y, r3.z
add r0.w, r0.w, -c32.y
mul r1.w, r0.w, r0.w
mul_sat r0.w, r0.w, c2.w
mov r2.w, c0.w
mad r1.w, r1.w, c32.x, -r2.w
rcp r1.w, r1.w
mul r0.w, r0.w, r1.w
dp3 r1.w, c38, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c38
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c40, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c40
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c41, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c41
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c42, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c42
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c43, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c43
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c44, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c44
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c45, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c45
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c46, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c46
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c47, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c47
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c48, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c48
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c49, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c49
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c50, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c50
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c51, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c51
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c52, r2
add r1.w, r1.w, r1.w
mad r3.xyz, r2, -r1.w, c52
dp3 r1.w, r3, r1
cmp r3.w, -r1.w, c5.x, c5.y
cmp r1.w, r1.w, c5.z, c5.w
add r1.w, r1.w, r3.w
mad r3.xyz, r3, r1.w, r0
mul r4.xyz, r3.y, c103.xyww
mad r3.xyw, c102, r3.x, r4.xyzz
mad r3.xyw, c104, r3.z, r3
add r3.xyw, r3, c105
rcp r1.w, r3.w
mul r3.xy, r1.w, r3
mad r3.xy, r3, c4, c4.x
texld r4, r3, s0
mad r1.w, r4.x, -v1.y, r3.z
add r1.w, r1.w, -c32.y
mul r3.x, r1.w, r1.w
mul_sat r1.w, r1.w, c2.w
mad r3.x, r3.x, c32.x, -r2.w
rcp r3.x, r3.x
mad r0.w, r1.w, r3.x, r0.w
dp3 r1.w, c53, r2
add r1.w, r1.w, r1.w
mad r2.xyz, r2, -r1.w, c53
dp3 r1.x, r2, r1
cmp r1.y, -r1.x, c5.x, c5.y
cmp r1.x, r1.x, c5.z, c5.w
add r1.x, r1.x, r1.y
mad r0.xyz, r2, r1.x, r0
mul r1.xyz, r0.y, c103.xyww
mad r1.xyz, c102.xyww, r0.x, r1
mad r1.xyz, c104.xyww, r0.z, r1
add r1.xyz, r1, c105.xyww
rcp r0.x, r1.z
mul r0.xy, r0.x, r1
mad r0.xy, r0, c4, c4.x
texld r1, r0, s0
mad r0.x, r1.x, -v1.y, r0.z
add r0.x, r0.x, -c32.y
mul r0.y, r0.x, r0.x
mul_sat r0.x, r0.x, c2.w
mad r0.y, r0.y, c32.x, -r2.w
rcp r0.y, r0.y
mad r0.x, r0.x, r0.y, r0.w
add r0.x, -r0.x, c4.z
mul oC0.xyz, r0.x, c4.w
mov oC0.w, -c0.w

// approximately 427 instruction slots used (19 texture, 408 arithmetic)


Here is the PS5C027D7F, which is the shadow I'm trying to fix. There's still a bit of experimentation I'm looking to do, so I'm not expecting anyone to actually figure out the fix for me (but I am welcome to input and suggestions on that), but again, if there's something I'm doing wrong that's causing the crashes it would be appreciated to point that out.

//Title screen - Helicopter shadow
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4 CascadeScale;
// float4 CascadeTextureSplitsEnd;
// sampler2D DepthSpecBuffer;
// float3 DownDir;
// float3 EyePos;
// float4 FadeoutParameters;
// float4 InvScreenSize;
// float2 InvShadowMapSize;
// float4x4 LightProjectionTex[4];
// float3 RightDir;
// float4 ShadowParameters;
// sampler2D ShadowTex;
// float3 UpperLeftCorner;
//
//
// Registers:
//
// Name Reg Size
// ----------------------- ----- ----
// InvShadowMapSize c34 1
// CascadeScale c36 1
// CascadeTextureSplitsEnd c37 1
// FadeoutParameters c38 1
// LightProjectionTex c40 8
// ShadowParameters c60 1
// InvScreenSize c61 1
// UpperLeftCorner c62 1
// RightDir c63 1
// DownDir c64 1
// EyePos c65 1
// DepthSpecBuffer s0 1
// ShadowTex s2 1
//

ps_3_0
def c0, 0.5, 0.999989986, 0, 1
def c1, -0, -1, -2, -3
def c2, 0.0625, 0, 0, 0
def c3, -0.81409955, 0.914375901, 0.199841261, 0.78641367
def c4, 0.791975141, 0.190901875, -0.241888404, 0.997065067
def c5, 0.53742981, -0.4737342, -0.26496911, -0.418930233
def c6, 0.974843979, 0.756483793, 0.443233252, -0.975115538
def c7, -0.815442324, -0.879124641, -0.382775426, 0.276768446
def c8, 0.344959378, 0.293877602, -0.915885806, 0.457714319
def c9, 0.945586085, -0.768907249, -0.0941841006, -0.929388702
def c10, 0.143831611, -0.1410079, -0.942016244, -0.399062157

dcl vPos.xy
dcl_2d s0
dcl_2d s2
dcl_2d s13
mov r0.x, c0.x
mul r0.xy, r0.x, c61
mad r0.xy, vPos, c61, r0
texld r1, r0, s0
add r2, -r1.x, c0.y
texkill r2
mov r2.xyz, c63
mad r0.xzw, r2.xyyz, r0.x, c62.xyyz
mad r0.xyz, c64, r0.y, r0.xzww
mul r1.yzw, r0.xxyz, r1.x
mad r0.xyz, r1.x, r0, c65

//Attempted fix of shadows
mov r10, r0
mov r10.w, c0.w //Set to 1 for matrix transform
//View Projection transform
dp4 r11.x, r10, c154
dp4 r11.y, r10, c155
dp4 r11.z, r10, c156
dp4 r11.w, r10, c157
//Stereo adjustment
texldl r24, c2.x, s13
add r24.y, r11.w, -r24.y //Tried with r11.z as well
mul r24.x, r24.x, r24.y
add r11.x, r11.x, -r24.x //Tried with adding rather than subtracting
//Inverse back to view space
dp4 r10.x, r11, c150
dp4 r10.y, r11, c151
dp4 r10.z, r11, c152
dp4 r10.w, r11, c153

mov r0, r10

dp3 r0.w, r1.yzww, r1.yzww
rsq r0.w, r0.w
rcp r0.w, r0.w //Can try fix after here
add r1, -r0.w, c37
add r0.w, -r0.w, c38.x
mul_sat r0.w, r0.w, c38.y
cmp r1, r1, c0.z, c0.w
dp4 r1.x, r1, c0.w
mul r1.yzw, r0.y, c41.xxyz
mad r1.yzw, c40.xxyz, r0.x, r1
mad r1.yzw, c42.xxyz, r0.z, r1
add r1.yzw, r1, c43.xxyz
mul r2.xyz, r0.y, c45
mad r2.xyz, c44, r0.x, r2
mad r0.xyz, c46, r0.z, r2
add r0.xyz, r0, c47 //Try fixes from here on, transformed to light space
cmp r0.xyz, -r1.x, r1.yzww, r0
add r1, r1.x, c1
cmp r1, -r1_abs, c0.w, c0.z
dp4 r1.x, c36, r1
mov r2.xy, c34
mul r2, r2.xyxy, c60.x
mul r1, r1.x, r2
mad r2, r1.zwzw, c10, r0.xyxy
texld r3, r2, s2
texld r2, r2.zwzw, s2
mov r3.y, r2.x
mad r2, r1.zwzw, c9, r0.xyxy
texld r4, r2, s2
texld r2, r2.zwzw, s2
mov r3.w, r2.x
mov r3.z, r4.x
add r2, r0.z, -r3
cmp r2, r2, c0.z, c0.w
dp4 r2.x, r2, c2.x
mad r3, r1.zwzw, c8, r0.xyxy
texld r4, r3, s2 //Slightly shifts on y axis
texld r3, r3.zwzw, s2
mov r4.y, r3.x
mad r3, r1.zwzw, c7, r0.xyxy
texld r5, r3, s2
texld r3, r3.zwzw, s2
mov r4.w, r3.x
mov r4.z, r5.x
add r3, r0.z, -r4
cmp r3, r3, c0.z, c0.w
dp4 r2.y, r3, c2.x
add r2.x, r2.y, r2.x
mad r3, r1.zwzw, c6, r0.xyxy
texld r4, r3, s2
texld r3, r3.zwzw, s2
mov r4.y, r3.x
mad r3, r1.zwzw, c5, r0.xyxy
texld r5, r3, s2
texld r3, r3.zwzw, s2
mov r4.w, r3.x
mov r4.z, r5.x
add r3, r0.z, -r4
cmp r3, r3, c0.z, c0.w
dp4 r2.y, r3, c2.x
add r2.x, r2.y, r2.x
mad r3, r1.zwzw, c4, r0.xyxy
mad r1, r1, c3, r0.xyxy
texld r4, r3, s2
texld r3, r3.zwzw, s2
mov r4.y, r3.x
texld r3, r1, s2
texld r1, r1.zwzw, s2
mov r4.w, r1.x
mov r4.z, r3.x
add r1, r0.z, -r4
cmp r1, r1, c0.z, c0.w
dp4 r0.x, r1, c2.x
add r0.x, r0.x, r2.x
add r0.x, -r0.w, r0.x
add r0.x, r0.x, c0.w
mov_sat oC0, r0.x

//Disable broken shadows
//mov oC0.xyzw, c0.zzzz

// approximately 88 instruction slots used (17 texture, 71 arithmetic)


And finally, here is VS6AF7D606, which is the VS with 2D lights that I fixed. This works with the fixed value that I found through guesswork, but I'm not sure if that will work for other setups, so I'd like to try to multiple by FOV, which I read is achieved by dividing by the view projection m00 value. I tried to implement this in the commented out code, but that didn't work. Did I do this correctly?

//Title screen - Spotlights - FIXED
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 matMVP;
//
//
// Registers:
//
// Name Reg Size
// ------------ ----- ----
// matMVP c8 4
//

vs_3_0
def c200, 1.0, 600, 0.0625, 0.25 //Last parameter found through guesswork, used for stereo adjustment
dcl_2d s0

dcl_position o10
dcl_texcoord o0.xy
dcl_color o8
dcl_position v0
dcl_color v1
dcl_texcoord v2
mul r0, v0.y, c9
mad r0, c8, v0.x, r0
mad r0, c10, v0.z, r0

//Mostly standard stereo adjustment
texldl r30, c200.z, s0
add r30.w, r0.w, -r30.y
mul r30.z, r30.x, r30.w
mul r30.z, r30.z, c200.w //Additional adjustment to reduce separation
//rcp r30.w, c154.x
//mul r30.z, r30.z, r30.w
add r0.x, r0.x, -r30.z

add o10, r0, c11
mov o0.xy, v2
mov o8, v1


// approximately 6 instruction slots used

3D Gaming Rig: CPU: i7 7700K @ 4.9Ghz | Mobo: Asus Maximus Hero VIII | RAM: Corsair Dominator 16GB | GPU: 2 x GTX 1080 Ti SLI | 3xSSDs for OS and Apps, 2 x HDD's for 11GB storage | PSU: Seasonic X-1250 M2| Case: Corsair C70 | Cooling: Corsair H115i Hydro cooler | Displays: Asus PG278QR, BenQ XL2420TX & BenQ HT1075 | OS: Windows 10 Pro + Windows 7 dual boot

Like my fixes? Dontations can be made to: www.paypal.me/DShanz or rshannonca@gmail.com
Like electronic music? Check out: www.soundcloud.com/dj-ryan-king

Posted 11/11/2015 02:56 AM   
[quote="DJ-RK"]Thank you again, DSS, that was exactly what I was looking for! However, despite that, things have gotten even worse for me because now something I've added/changed is causing the game to crash each time I reload the shaders, which is preventing me from being able to do any experimentation without restarting EVERY time, and needless to say that's not efficient at all. I'm sorry to keep asking for help, but I feel like I'm getting so close to getting this, yet am almost at my wits end and about to have a mental breakdown due to frustration, so could someone please help me figure out what's causing the crashing so I can at least get back to experimenting?[/quote]Oh, yeah - the constant crashes in Helix mod can be frustrating as hell. Since you're hitting a crash on reload I suggest trying OverrideMethod=1 or OverrideMethod=2 in the DX9Settings.ini to see if either of them work better. [quote]Here is the contents of PS36ECF708 where I found the mProjectionMatrix register. I've made no changes to it (besides adding the comment at the top), so you don't have to scan the code for anything I may have done in it. One question I have is do I need to have this file in my ShaderOverride folder, or be doing anything else at all besides that addition in the dx9settings.ini file to be able to grab the matrix values from it?[/quote]It will need to be in ShaderOverride, but you shouldn't need to do anything else to it. [quote]Here is the PS5C027D7F, which is the shadow I'm trying to fix. There's still a bit of experimentation I'm looking to do, so I'm not expecting anyone to actually figure out the fix for me (but I am welcome to input and suggestions on that), but again, if there's something I'm doing wrong that's causing the crashes it would be appreciated to point that out. [code] ps_3_0 def c0, 0.5, 0.999989986, 0, 1 def c1, -0, -1, -2, -3 def c2, 0.0625, 0, 0, 0 [/code][/quote]Have you added or changed any of those constants? I ask because you are using c0 and c2, but I can see that the shader was already using them so they might have been intended to be passed from the game and if that is the case defining them would override that. [quote]And finally, here is VS6AF7D606, which is the VS with 2D lights that I fixed. This works with the fixed value that I found through guesswork, but I'm not sure if that will work for other setups, so I'd like to try to multiple by FOV, which I read is achieved by dividing by the view projection m00 value. I tried to implement this in the commented out code, but that didn't work. Did I do this correctly?[/quote]Well, the division looks right, but I don't think that's quite the right spot, and I don't think that it's in view-space, so you shouldn't be using the view-space formula. If you say you were able to get the right result by multiplying by 0.25, than assuming this is in view space the horizontal FOV would be degrees(atan(1 / 0.25) * 2) = 151.92751306414706 degrees, which seems rather high. Whenever you use a fudge factor like that it's worth checking if it looks correct from a range of distances, and after adjusting the convergence. I also notice that you have performed this adjustment in the middle of a matrix multiply (c8-c11 is matMVP and you have adjusted it after c8, c9 and c10 was used, but before c11 was used). It's more likely that you would need to perform the adjustment after (or before) the multiply. This is effectively adjusting o10, which doesn't seem like the right thing to adjust unless the driver has neglected to stereo correct it when it should have. Still, if it works go for it.
DJ-RK said:Thank you again, DSS, that was exactly what I was looking for! However, despite that, things have gotten even worse for me because now something I've added/changed is causing the game to crash each time I reload the shaders, which is preventing me from being able to do any experimentation without restarting EVERY time, and needless to say that's not efficient at all. I'm sorry to keep asking for help, but I feel like I'm getting so close to getting this, yet am almost at my wits end and about to have a mental breakdown due to frustration, so could someone please help me figure out what's causing the crashing so I can at least get back to experimenting?
Oh, yeah - the constant crashes in Helix mod can be frustrating as hell. Since you're hitting a crash on reload I suggest trying OverrideMethod=1 or OverrideMethod=2 in the DX9Settings.ini to see if either of them work better.

Here is the contents of PS36ECF708 where I found the mProjectionMatrix register. I've made no changes to it (besides adding the comment at the top), so you don't have to scan the code for anything I may have done in it. One question I have is do I need to have this file in my ShaderOverride folder, or be doing anything else at all besides that addition in the dx9settings.ini file to be able to grab the matrix values from it?
It will need to be in ShaderOverride, but you shouldn't need to do anything else to it.

Here is the PS5C027D7F, which is the shadow I'm trying to fix. There's still a bit of experimentation I'm looking to do, so I'm not expecting anyone to actually figure out the fix for me (but I am welcome to input and suggestions on that), but again, if there's something I'm doing wrong that's causing the crashes it would be appreciated to point that out.

ps_3_0
def c0, 0.5, 0.999989986, 0, 1
def c1, -0, -1, -2, -3
def c2, 0.0625, 0, 0, 0
Have you added or changed any of those constants? I ask because you are using c0 and c2, but I can see that the shader was already using them so they might have been intended to be passed from the game and if that is the case defining them would override that.

And finally, here is VS6AF7D606, which is the VS with 2D lights that I fixed. This works with the fixed value that I found through guesswork, but I'm not sure if that will work for other setups, so I'd like to try to multiple by FOV, which I read is achieved by dividing by the view projection m00 value. I tried to implement this in the commented out code, but that didn't work. Did I do this correctly?
Well, the division looks right, but I don't think that's quite the right spot, and I don't think that it's in view-space, so you shouldn't be using the view-space formula. If you say you were able to get the right result by multiplying by 0.25, than assuming this is in view space the horizontal FOV would be degrees(atan(1 / 0.25) * 2) = 151.92751306414706 degrees, which seems rather high. Whenever you use a fudge factor like that it's worth checking if it looks correct from a range of distances, and after adjusting the convergence.

I also notice that you have performed this adjustment in the middle of a matrix multiply (c8-c11 is matMVP and you have adjusted it after c8, c9 and c10 was used, but before c11 was used). It's more likely that you would need to perform the adjustment after (or before) the multiply. This is effectively adjusting o10, which doesn't seem like the right thing to adjust unless the driver has neglected to stereo correct it when it should have. Still, if it works go for it.

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 11/11/2015 06:18 AM   
[quote="DarkStarSword"] This is the type of code you will see from the decompiler to do a matrix multiply, but I don't personally recommend using this style when using DX11 and HLSL - it will work, but requires more effort to experiment with since there's a bunch of redundant text there. Instead, I suggest: [code] result = mul(coord, matrix); [/code] Why do it this way? Because you may need to experiment with a few variations, such as: [code] 1. Use if game uses dot();dot();dot();dot() for matrix multiply: result = mul(matrix, coord); 2. Use if game uses mul(); mad(); mad(); add/mad(); for matrix multiply: result = mul(coord, matrix); [/code][/quote] Looking back through my notes I've over-simplified these two cases - which order you need here also depends on whether the game has used the "row_major" keyword or not. So I think that the four combinations to consider are (always worth just trying both ways since it doesn't take long): - Game uses dot(); dot(); dot(); dot() for matrix multiply - Matrix is in column-major order = mul(coord, matrix) - Game uses dot(); dot(); dot(); dot() for matrix multiply - Matrix was declared with "row_major" keyword = mul(matrix, coord) - Game uses mul(); mad(); mad(); add/mad(); for matrix multiply - Matrix is in column-major order = mul(coord, matrix) - Game uses mul(); mad(); mad(); add/mad(); for matrix multiply - Matrix was declared with "row_major" keyword = mul(matrix, coord) ... So given that and the fact I used tmp.z instead of tmp.w for a projection-space adjustment, I'd like to revise my guess as to how to fix this game (vertex shader same as before): [code] <snip> // We need to apply the correction in the *middle* of this instruction before // adding the camera position, so split it into two separate instructions: // r1.xyz = r1.yzw * r1.xxx + camera_pos.xyz; r1.xyz = r1.yzw * r1.xxx; float4 stereo = StereoParams.Load(0); float4 tmp; tmp = mul(float4(r1.xyz, 1), camera_view); // If 1 doesn't work, try 0 tmp = mul(tmp, camera_projection); // Also removed normalisation and changed tmp.z to tmp.w: tmp.x -= stereo.x * (tmp.w - stereo.y); tmp = mul(tmp, camera_inv_projection); tmp = mul(tmp, camera_inv_view); r1.xyz = tmp.xyz / tmp.w; // Divide by w may or may not be necessary // This is the final part of the original instruction we split up: r1.xyz = r1.xyz + camera_pos.xyz; <snip> [/code] It might also be worth trying the adjustment after the +camera_pos.xyz, since we don't know if the game has included the camera position in the view matrix or not. Whenever doing these transformations to another coordinate system and back again it's worth trying it with only the conversions but no correction to make sure that nothing is being changed by the conversions. Only once have successfully achieved that should you add the correction in. [quote]Similarly, I could not determine what would have been different in the world space options vs what I had tried in the viewspace options, so didn't do any of those. [/quote] The world space options are similar, but need to use the view and projection matrices instead of just the projection matrix - either by multiplying by one then the other (like I attempted before), or using a combined view-projection matrix if the game gave you one. [quote]I did not understand the 4th viewspace option to test that.[/quote] The 4th viewspace option would be similar to this example of the 2nd worldspace option (except without using the camera_inv_view matrix) like this: [code] <snip> r0.xy = v0.xy / back_buffer_size.xy; r1.xyzw = __tex_linear_depth.Sample(__samp_linear_depth_s, r0.xy).xyzw; // The game has handed us the depth value, so take a note of it: float depth = r1.x; r1.yzw = v1.xyz / v1.www; //r1.xyz = r1.yzw * r1.xxx + camera_pos.xyz; r1.xyz = r1.yzw * r1.xxx; float4 stereo = StereoParams.Load(0); float4 tmp = float4(stereo.x * (depth - stereo.y), 0, 0, 1); // If 1 doesn't work try 0 tmp = mul(tmp, camera_inv_projection); tmp = mul(tmp, camera_inv_view); r1.xyz -= tmp.xyz / tmp.w; // Divide by w may or may not be necessary r1.xyz += camera_pos.xyz; [/code] Or alternatively (e.g. if you didn't already have depth and needed to derive it, or if it turned out that the depth value the game handed you wasn't scaled right): [code] float4 stereo, tmp; stereo = StereoParams.Load(0); tmp = mul(float4(r1.xyz, 1), camera_view); tmp = mul(tmp, camera_projection); tmp = float4(stereo.x * (tmp.w - stereo.y), 0, 0, 1); // If 1 doesn't work try 0 tmp = mul(tmp, camera_inv_projection); tmp = mul(tmp, camera_inv_view); r1.xyz -= tmp.xyz / tmp.w; // Divide by w may or may not be necessary [/code]
DarkStarSword said:
This is the type of code you will see from the decompiler to do a matrix multiply, but I don't personally recommend using this style when using DX11 and HLSL - it will work, but requires more effort to experiment with since there's a bunch of redundant text there. Instead, I suggest:
result = mul(coord, matrix);


Why do it this way? Because you may need to experiment with a few variations, such as:

1. Use if game uses dot();dot();dot();dot() for matrix multiply:
result = mul(matrix, coord);

2. Use if game uses mul(); mad(); mad(); add/mad(); for matrix multiply:
result = mul(coord, matrix);

Looking back through my notes I've over-simplified these two cases - which order you need here also depends on whether the game has used the "row_major" keyword or not.

So I think that the four combinations to consider are (always worth just trying both ways since it doesn't take long):
- Game uses dot(); dot(); dot(); dot() for matrix multiply
- Matrix is in column-major order
= mul(coord, matrix)

- Game uses dot(); dot(); dot(); dot() for matrix multiply
- Matrix was declared with "row_major" keyword
= mul(matrix, coord)

- Game uses mul(); mad(); mad(); add/mad(); for matrix multiply
- Matrix is in column-major order
= mul(coord, matrix)

- Game uses mul(); mad(); mad(); add/mad(); for matrix multiply
- Matrix was declared with "row_major" keyword
= mul(matrix, coord)

... So given that and the fact I used tmp.z instead of tmp.w for a projection-space adjustment, I'd like to revise my guess as to how to fix this game (vertex shader same as before):

<snip>

// We need to apply the correction in the *middle* of this instruction before
// adding the camera position, so split it into two separate instructions:
// r1.xyz = r1.yzw * r1.xxx + camera_pos.xyz;
r1.xyz = r1.yzw * r1.xxx;

float4 stereo = StereoParams.Load(0);
float4 tmp;

tmp = mul(float4(r1.xyz, 1), camera_view); // If 1 doesn't work, try 0
tmp = mul(tmp, camera_projection);

// Also removed normalisation and changed tmp.z to tmp.w:
tmp.x -= stereo.x * (tmp.w - stereo.y);

tmp = mul(tmp, camera_inv_projection);
tmp = mul(tmp, camera_inv_view);
r1.xyz = tmp.xyz / tmp.w; // Divide by w may or may not be necessary


// This is the final part of the original instruction we split up:
r1.xyz = r1.xyz + camera_pos.xyz;

<snip>


It might also be worth trying the adjustment after the +camera_pos.xyz, since we don't know if the game has included the camera position in the view matrix or not.

Whenever doing these transformations to another coordinate system and back again it's worth trying it with only the conversions but no correction to make sure that nothing is being changed by the conversions. Only once have successfully achieved that should you add the correction in.

Similarly, I could not determine what would have been different in the world space options vs what I had tried in the viewspace options, so didn't do any of those.

The world space options are similar, but need to use the view and projection matrices instead of just the projection matrix - either by multiplying by one then the other (like I attempted before), or using a combined view-projection matrix if the game gave you one.

I did not understand the 4th viewspace option to test that.


The 4th viewspace option would be similar to this example of the 2nd worldspace option (except without using the camera_inv_view matrix) like this:

<snip>
r0.xy = v0.xy / back_buffer_size.xy;
r1.xyzw = __tex_linear_depth.Sample(__samp_linear_depth_s, r0.xy).xyzw;

// The game has handed us the depth value, so take a note of it:
float depth = r1.x;

r1.yzw = v1.xyz / v1.www;
//r1.xyz = r1.yzw * r1.xxx + camera_pos.xyz;
r1.xyz = r1.yzw * r1.xxx;

float4 stereo = StereoParams.Load(0);

float4 tmp = float4(stereo.x * (depth - stereo.y), 0, 0, 1); // If 1 doesn't work try 0
tmp = mul(tmp, camera_inv_projection);
tmp = mul(tmp, camera_inv_view);
r1.xyz -= tmp.xyz / tmp.w; // Divide by w may or may not be necessary

r1.xyz += camera_pos.xyz;


Or alternatively (e.g. if you didn't already have depth and needed to derive it, or if it turned out that the depth value the game handed you wasn't scaled right):

float4 stereo, tmp;
stereo = StereoParams.Load(0);

tmp = mul(float4(r1.xyz, 1), camera_view);
tmp = mul(tmp, camera_projection);

tmp = float4(stereo.x * (tmp.w - stereo.y), 0, 0, 1); // If 1 doesn't work try 0

tmp = mul(tmp, camera_inv_projection);
tmp = mul(tmp, camera_inv_view);

r1.xyz -= tmp.xyz / tmp.w; // Divide by w may or may not be necessary

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

Posted 11/11/2015 07:34 AM   
Still no go with the new code. Before I get into details about it I wanted to first mention an new observation I've made, which may or may not be significant to the fix approach, but these light/shadow effects break/correct themselves based on convergence values & distance. Strangely enough, though, the 2 examples I've provided react in opposite fashions. The light on the table (the example we've been working with mainly), when standing close to it, looks fine with a really low convergence, but then separates too much as you increase convergence. The light on the bridge (viewable at post #580, and code available in 579) looks broken with low/medium convergence, but when I crank my convergence really high (so much that the character's hands and weapons diverge) it looks perfect. As for the details with trying your code, what I found was that as was that, in it's original form, it would separate the effect too much in negative direction while up close (so image in left eye would be far to the right and right image would be far to the left). If I added the stereo correction rather than subtract, it would still be way too much, but at least in the correct eyes. I found that if I multiplied the correction by 0.1 and subtract, it would look correct up close, but then look incorrect from further. Some variations I tried were with and without the camera adjustment, and with the camera adjustment it still wasn't right, but not quite as overly separated. I made adjustments to the code, switched tmp.w with tmp.z in the stereo adjustment, without dividing by tmp.w, etc. None of which got it all working correctly. Oh, and just to make matters even worse, an update was released today which changed the shader CRC's, so I had to relocate and dump the shaders again... which means if I do continue to work on this, will need to update the fix with every game update. Yay! Not sure if any of this info is useful, and I don't want to keep taking up your time (especially while the focus is on getting FO4 fixable), so if this is getting to be too burdensome for you guys, I'm willing to let it go for now.
Still no go with the new code. Before I get into details about it I wanted to first mention an new observation I've made, which may or may not be significant to the fix approach, but these light/shadow effects break/correct themselves based on convergence values & distance. Strangely enough, though, the 2 examples I've provided react in opposite fashions.

The light on the table (the example we've been working with mainly), when standing close to it, looks fine with a really low convergence, but then separates too much as you increase convergence.

The light on the bridge (viewable at post #580, and code available in 579) looks broken with low/medium convergence, but when I crank my convergence really high (so much that the character's hands and weapons diverge) it looks perfect.

As for the details with trying your code, what I found was that as was that, in it's original form, it would separate the effect too much in negative direction while up close (so image in left eye would be far to the right and right image would be far to the left). If I added the stereo correction rather than subtract, it would still be way too much, but at least in the correct eyes. I found that if I multiplied the correction by 0.1 and subtract, it would look correct up close, but then look incorrect from further.

Some variations I tried were with and without the camera adjustment, and with the camera adjustment it still wasn't right, but not quite as overly separated. I made adjustments to the code, switched tmp.w with tmp.z in the stereo adjustment, without dividing by tmp.w, etc. None of which got it all working correctly.

Oh, and just to make matters even worse, an update was released today which changed the shader CRC's, so I had to relocate and dump the shaders again... which means if I do continue to work on this, will need to update the fix with every game update. Yay!

Not sure if any of this info is useful, and I don't want to keep taking up your time (especially while the focus is on getting FO4 fixable), so if this is getting to be too burdensome for you guys, I'm willing to let it go for now.

3D Gaming Rig: CPU: i7 7700K @ 4.9Ghz | Mobo: Asus Maximus Hero VIII | RAM: Corsair Dominator 16GB | GPU: 2 x GTX 1080 Ti SLI | 3xSSDs for OS and Apps, 2 x HDD's for 11GB storage | PSU: Seasonic X-1250 M2| Case: Corsair C70 | Cooling: Corsair H115i Hydro cooler | Displays: Asus PG278QR, BenQ XL2420TX & BenQ HT1075 | OS: Windows 10 Pro + Windows 7 dual boot

Like my fixes? Dontations can be made to: www.paypal.me/DShanz or rshannonca@gmail.com
Like electronic music? Check out: www.soundcloud.com/dj-ryan-king

Posted 11/12/2015 01:14 AM   
[quote="DJ-RK"][quote="helifax"]Now I am puzzled... I'm downloading this game just for the kicks:)) Can you post me the location where I can find your fix so far? And can you also please tell me what are the shaders that you found related to the shadows? I'll try to give a quick look;)) Cheers![/quote] The window lighting on the table is in the inn, which is the hub for the game, so the first place you start in. The 2nd set of photos with the lights on the bridge are the first set of broken lights you come across in the first level. I can give you the shader CRC's or attach the files on here if you want. Not too hard to find them, though. Edit: Oh, I just realized you asked where my existing fix is, so here's the link: http://www.mediafire.com/download/mp146z24ofkzao1/Warhammer_Vermintide_Fix_v0.2.zip Doesn't contain any of the shaders that I haven't fixed yet, ie. the ones in these examples I've posted. @Mike: I gave that other last suggestion a try as well, on all the different variations and still nothing. Indeed, back to experimenting more.[/quote] Thanks;) Do you remember the hashes for the shadow pixel/vertex? I guess I can look for it on my own though ^_^
DJ-RK said:
helifax said:Now I am puzzled...
I'm downloading this game just for the kicks:))
Can you post me the location where I can find your fix so far? And can you also please tell me what are the shaders that you found related to the shadows?

I'll try to give a quick look;))

Cheers!


The window lighting on the table is in the inn, which is the hub for the game, so the first place you start in. The 2nd set of photos with the lights on the bridge are the first set of broken lights you come across in the first level.

I can give you the shader CRC's or attach the files on here if you want. Not too hard to find them, though.

Edit: Oh, I just realized you asked where my existing fix is, so here's the link: http://www.mediafire.com/download/mp146z24ofkzao1/Warhammer_Vermintide_Fix_v0.2.zip


Doesn't contain any of the shaders that I haven't fixed yet, ie. the ones in these examples I've posted.

@Mike: I gave that other last suggestion a try as well, on all the different variations and still nothing. Indeed, back to experimenting more.


Thanks;)
Do you remember the hashes for the shadow pixel/vertex? I guess I can look for it on my own though ^_^

1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc


My website with my fixes and OpenGL to 3D Vision wrapper:
http://3dsurroundgaming.com

(If you like some of the stuff that I've done and want to donate something, you can do it with PayPal at tavyhome@gmail.com)

Posted 11/12/2015 08:51 PM   
The update that came out yesterday just changed all the CRC's (well, not all, my HUD fix still works, but the few additional things I fixed like the moons are broken again), so even I gotta get back to grabbing them again.
The update that came out yesterday just changed all the CRC's (well, not all, my HUD fix still works, but the few additional things I fixed like the moons are broken again), so even I gotta get back to grabbing them again.

3D Gaming Rig: CPU: i7 7700K @ 4.9Ghz | Mobo: Asus Maximus Hero VIII | RAM: Corsair Dominator 16GB | GPU: 2 x GTX 1080 Ti SLI | 3xSSDs for OS and Apps, 2 x HDD's for 11GB storage | PSU: Seasonic X-1250 M2| Case: Corsair C70 | Cooling: Corsair H115i Hydro cooler | Displays: Asus PG278QR, BenQ XL2420TX & BenQ HT1075 | OS: Windows 10 Pro + Windows 7 dual boot

Like my fixes? Dontations can be made to: www.paypal.me/DShanz or rshannonca@gmail.com
Like electronic music? Check out: www.soundcloud.com/dj-ryan-king

Posted 11/12/2015 10:45 PM   
[quote="DJ-RK"]The update that came out yesterday just changed all the CRC's (well, not all, my HUD fix still works, but the few additional things I fixed like the moons are broken again), so even I gotta get back to grabbing them again.[/quote] I am looking at the shadows/lights. So far no idea what to do... However, I noticed that if you do this in the Vertex Shader the shadows will be 2D: [code] void main( float4 v0 : POSITION0, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD1) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; r0.xyz = light_proxy_scale.xyz * v0.xyz; r0.w = 1; r1.x = dot(r0.xyzw, world_view_proj._m00_m10_m20_m30); r1.y = dot(r0.xyzw, world_view_proj._m01_m11_m21_m31); r1.z = dot(r0.xyzw, world_view_proj._m02_m12_m22_m32); r1.w = dot(r0.xyzw, world_view_proj._m03_m13_m23_m33); float4 stereo = StereoParams.Load(0); o0.xyzw = r1.xyzw; r0.x = dot(r1.xyzw, camera_inv_projection._m00_m10_m20_m30); r0.y = dot(r1.xyzw, camera_inv_projection._m01_m11_m21_m31); r0.z = dot(r1.xyzw, camera_inv_projection._m02_m12_m22_m32); // This will make the shadows/lights be 2D r0.x += stereo.x * (r1.w - stereo.y) / camera_projection._m00; o1.w = r1.w; o1.x = dot(r0.xyz, camera_inv_view._m00_m10_m20); o1.y = dot(r0.xyz, camera_inv_view._m01_m11_m21); o1.z = dot(r0.xyz, camera_inv_view._m02_m12_m22); return; } [/code] And should now be corrected in the PS, however this proves difficult... What I tried so far: [code] void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD1, out float4 o0 : SV_TARGET0) { float4 r0,r1,r2,r3,r4,r5,r6,r7; uint4 bitmask, uiDest; float4 fDest; r0.xy = v0.xy / back_buffer_size.xy; r1.xyzw = __tex_linear_depth.Sample(__samp_linear_depth_s, r0.xy).xyzw; // Not Working here float tempDepth = r1.w; r1.yzw = v1.xyz / v1.www; float4 stereo = StereoParams.Load(0); // Not Working here //r1.x += stereo.x * (r1.w - stereo.y) / camera_projection._m00; // Split on 2 lines r1.xyz = r1.yzw * r1.xxx; // NOT working here... r1.xyz += camera_pos.xyz; r2.xyz = light_position.xyz + -r1.xyz; r0.z = dot(r2.xyz, r2.xyz); r0.z = sqrt(r0.z); r0.z = 9.99999975e-006 + r0.z; r0.w = -light_falloff.x + r0.z; r1.w = light_falloff.y * r0.w; r2.w = 1 < r1.w; if (r2.w != 0) { [/code] And all fails... Thing is is not even remotely close to what it should be;)) Is broken on all stages....
DJ-RK said:The update that came out yesterday just changed all the CRC's (well, not all, my HUD fix still works, but the few additional things I fixed like the moons are broken again), so even I gotta get back to grabbing them again.


I am looking at the shadows/lights. So far no idea what to do...

However, I noticed that if you do this in the Vertex Shader the shadows will be 2D:

void main( 
float4 v0 : POSITION0,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD1)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyz = light_proxy_scale.xyz * v0.xyz;
r0.w = 1;
r1.x = dot(r0.xyzw, world_view_proj._m00_m10_m20_m30);
r1.y = dot(r0.xyzw, world_view_proj._m01_m11_m21_m31);
r1.z = dot(r0.xyzw, world_view_proj._m02_m12_m22_m32);
r1.w = dot(r0.xyzw, world_view_proj._m03_m13_m23_m33);

float4 stereo = StereoParams.Load(0);
o0.xyzw = r1.xyzw;

r0.x = dot(r1.xyzw, camera_inv_projection._m00_m10_m20_m30);
r0.y = dot(r1.xyzw, camera_inv_projection._m01_m11_m21_m31);
r0.z = dot(r1.xyzw, camera_inv_projection._m02_m12_m22_m32);

// This will make the shadows/lights be 2D
r0.x += stereo.x * (r1.w - stereo.y) / camera_projection._m00;

o1.w = r1.w;
o1.x = dot(r0.xyz, camera_inv_view._m00_m10_m20);
o1.y = dot(r0.xyz, camera_inv_view._m01_m11_m21);
o1.z = dot(r0.xyz, camera_inv_view._m02_m12_m22);
return;
}


And should now be corrected in the PS, however this proves difficult...


What I tried so far:

void main( 
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD1,
out float4 o0 : SV_TARGET0)
{
float4 r0,r1,r2,r3,r4,r5,r6,r7;
uint4 bitmask, uiDest;
float4 fDest;

r0.xy = v0.xy / back_buffer_size.xy;
r1.xyzw = __tex_linear_depth.Sample(__samp_linear_depth_s, r0.xy).xyzw;

// Not Working here

float tempDepth = r1.w;
r1.yzw = v1.xyz / v1.www;

float4 stereo = StereoParams.Load(0);

// Not Working here

//r1.x += stereo.x * (r1.w - stereo.y) / camera_projection._m00;

// Split on 2 lines
r1.xyz = r1.yzw * r1.xxx;

// NOT working here...

r1.xyz += camera_pos.xyz;

r2.xyz = light_position.xyz + -r1.xyz;
r0.z = dot(r2.xyz, r2.xyz);
r0.z = sqrt(r0.z);
r0.z = 9.99999975e-006 + r0.z;
r0.w = -light_falloff.x + r0.z;
r1.w = light_falloff.y * r0.w;
r2.w = 1 < r1.w;
if (r2.w != 0) {


And all fails... Thing is is not even remotely close to what it should be;)) Is broken on all stages....

1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc


My website with my fixes and OpenGL to 3D Vision wrapper:
http://3dsurroundgaming.com

(If you like some of the stuff that I've done and want to donate something, you can do it with PayPal at tavyhome@gmail.com)

Posted 11/12/2015 11:27 PM   
@DJ_RK Helifax has probably hit on the solution here. I was not aware before that the shadows were not starting out at screen depth. All the PS fix patterns you went through before require this as a starting point. So you could go back and try all the combinations again...
@DJ_RK Helifax has probably hit on the solution here. I was not aware before that the shadows were not starting out at screen depth. All the PS fix patterns you went through before require this as a starting point. So you could go back and try all the combinations again...

Rig: Intel i7-8700K @4.7GHz, 16Gb Ram, SSD, GTX 1080Ti, Win10x64, Asus VG278

Posted 11/12/2015 11:47 PM   
Hello, this may seem like a stupid question but how do I view Bo3b's videos. I understand that they must be viewed in 3D but I can't get them to work via YouTube so I have downloaded them and installed 3D Vision Player. The player gives an error (could not render all streams) when I open a video. Thanks in advance for the solution.
Hello, this may seem like a stupid question but how do I view Bo3b's videos. I understand that they must be viewed in 3D but I can't get them to work via YouTube so I have downloaded them and installed 3D Vision Player. The player gives an error (could not render all streams) when I open a video. Thanks in advance for the solution.

Posted 11/15/2015 10:08 AM   
You can update Nvidia's player, perhaps that will help http://3dvision-blog.com/8619-how-to-always-keep-your-nvidia-3d-vision-video-player-up-to-date/
You can update Nvidia's player, perhaps that will help


http://3dvision-blog.com/8619-how-to-always-keep-your-nvidia-3d-vision-video-player-up-to-date/

Posted 11/15/2015 10:16 AM   
Thanks D-man11, that worked, I can now view the videos. How do people view the screenshots in the forum, all I get is SBS screenshots. The same problem was in HelixBlog although now I am getting vibrating screenshots suddenly. It seems very difficult to get the emitter on my monitor to turn on when it is not a game even setting the Nvidia stereoscopic setting to 'Always'.
Thanks D-man11, that worked, I can now view the videos. How do people view the screenshots in the forum, all I get is SBS screenshots. The same problem was in HelixBlog although now I am getting vibrating screenshots suddenly. It seems very difficult to get the emitter on my monitor to turn on when it is not a game even setting the Nvidia stereoscopic setting to 'Always'.

Posted 11/15/2015 11:39 AM   
The screenshots in the forum are meant to be viewed using cross eyed viewing. I've never been able to use the technique, I've tried repeatedly. I think my eye muscles will not allow it or something. Anyways, these links will explain the technique. http://www.3dphoto.net/text/viewing/technique.html http://www.starosta.com/3dshowcase/ihelp.html I'm on driver 358.87, using it I find that 3D is not enabled until I hit ctrl+t when viewing HelixBlog or Gaming. It's kinda nice, since the checkbox for the feature that disables 3D when the game initially launches isn't there.
The screenshots in the forum are meant to be viewed using cross eyed viewing.

I've never been able to use the technique, I've tried repeatedly. I think my eye muscles will not allow it or something. Anyways, these links will explain the technique.

http://www.3dphoto.net/text/viewing/technique.html

http://www.starosta.com/3dshowcase/ihelp.html



I'm on driver 358.87, using it I find that 3D is not enabled until I hit ctrl+t when viewing HelixBlog or Gaming.

It's kinda nice, since the checkbox for the feature that disables 3D when the game initially launches isn't there.

Posted 11/15/2015 12:47 PM   
[quote="D-Man11"]The screenshots in the forum are meant to be viewed using cross eyed viewing. I've never been able to use the technique, I've tried repeatedly. I think my eye muscles will not allow it or something. Anyways, these links will explain the technique. http://www.3dphoto.net/text/viewing/technique.html http://www.starosta.com/3dshowcase/ihelp.html I'm on driver 358.87, using it I find that 3D is not enabled until I hit ctrl+t when viewing HelixBlog or Gaming. It's kinda nice, since the checkbox for the feature that disables 3D when the game initially launches isn't there. [/quote] You can also use StereoPhotoMaker to show side-by-side downloaded photos using shutter glasses. The 3D Vision Photo Viewer will also generally work, and has the benefit of being in a window. For doing cross-eye viewing, you might try relaxing your eyes as much as possible, and giving it some time, like 2 or 3 minutes. When you first do it your eyes don't want to do the 'accommodation', but this is what you use with shutter glasses, so it's only a matter of how far you can go. With practice, just like with 3D originally, you can go further. I like your reference pages, haven't seen those before. I think this video is helpful as well. A key aide is to have the black dot at the bottom, so you can unify the images to start with. https://www.youtube.com/watch?v=zBa-bCxsZDk For these, I recommend starting with a very small image, no more than 4 inches wide. Smaller is easier, requires less accommodation. Use your finger tip as a reference. With a 4 inch image width, normal sitting distance from monitor, put up a finger at 10-12 inches away and focus on your fingertip. This should be totally natural, as your eyes naturally cross to look at stuff this close. The paused video gives a great double dot reference for when you see a single dot. Focusing on your fingertip, in your peripheral vision you can see the double dots. Move your finger toward you or away from you to get the double dot to converge to a single dot. Still focused upon your finger tip, this is all background. Keep focused on the fingertip, and relax your eyes, and wait for maybe 2 minutes. You might eventually be able to move your focus to the now single dot, and the image there.
D-Man11 said:The screenshots in the forum are meant to be viewed using cross eyed viewing.

I've never been able to use the technique, I've tried repeatedly. I think my eye muscles will not allow it or something. Anyways, these links will explain the technique.


http://www.3dphoto.net/text/viewing/technique.html


http://www.starosta.com/3dshowcase/ihelp.html




I'm on driver 358.87, using it I find that 3D is not enabled until I hit ctrl+t when viewing HelixBlog or Gaming.

It's kinda nice, since the checkbox for the feature that disables 3D when the game initially launches isn't there.


You can also use StereoPhotoMaker to show side-by-side downloaded photos using shutter glasses. The 3D Vision Photo Viewer will also generally work, and has the benefit of being in a window.


For doing cross-eye viewing, you might try relaxing your eyes as much as possible, and giving it some time, like 2 or 3 minutes. When you first do it your eyes don't want to do the 'accommodation', but this is what you use with shutter glasses, so it's only a matter of how far you can go. With practice, just like with 3D originally, you can go further.

I like your reference pages, haven't seen those before. I think this video is helpful as well. A key aide is to have the black dot at the bottom, so you can unify the images to start with.




For these, I recommend starting with a very small image, no more than 4 inches wide. Smaller is easier, requires less accommodation.

Use your finger tip as a reference. With a 4 inch image width, normal sitting distance from monitor, put up a finger at 10-12 inches away and focus on your fingertip. This should be totally natural, as your eyes naturally cross to look at stuff this close.

The paused video gives a great double dot reference for when you see a single dot. Focusing on your fingertip, in your peripheral vision you can see the double dots. Move your finger toward you or away from you to get the double dot to converge to a single dot. Still focused upon your finger tip, this is all background.

Keep focused on the fingertip, and relax your eyes, and wait for maybe 2 minutes. You might eventually be able to move your focus to the now single dot, and the image there.

Acer H5360 (1280x720@120Hz) - ASUS VG248QE with GSync mod - 3D Vision 1&2 - Driver 372.54
GTX 970 - i5-4670K@4.2GHz - 12GB RAM - Win7x64+evilKB2670838 - 4 Disk X25 RAID
SAGER NP9870-S - GTX 980 - i7-6700K - Win10 Pro 1607
Latest 3Dmigoto Release
Bo3b's School for ShaderHackers

Posted 11/15/2015 11:33 PM   
Bo3b, thanks very much for the school which I completed in 2 days without the homework. I have learnt a lot and now I am trying to fix the DX11 Unity5 game Vapour. I managed to hide three artifacts, probably shadows, but am now stuck at a large fire which reflects on the whole scene. I have enabled exclusive full screen via 3DMiToGo but unfortunately the game crashes when using Alt-Tab so experimentation is very difficult. Do you have any ideas how to go about this ?
Bo3b, thanks very much for the school which I completed in 2 days without the homework. I have learnt a lot and now I am trying to fix the DX11 Unity5 game Vapour. I managed to hide three artifacts, probably shadows, but am now stuck at a large fire which reflects on the whole scene.
I have enabled exclusive full screen via 3DMiToGo but unfortunately the game crashes when using Alt-Tab so experimentation is very difficult. Do you have any ideas how to go about this ?

Posted 11/16/2015 09:40 AM   
Take a look at darkstarsword's site, he has Unity templates. https://github.com/DarkStarSword/3d-fixes It'd probably be a good idea to start a Vapour thread, maybe? [quote="DarkStarSword"]If you wanted to take a crack at fixing it yourself, I have templates that can often fix Unity lights/shadows in my 3d-fixes repository, and my shadertool.py script can fix most of the other serious problems (but if you switched profile the driver may be doing that part already - if you get flickering return to the original profile and use my script instead).[/quote] Also Darkstarsword fixed a 3Dmigoto crash for Fallout 4, who knows, maybe it'll work for you? [url]https://forums.geforce.com/default/topic/839133/3d-vision/fallout-4/post/4727579/#4727579[/url]
Take a look at darkstarsword's site, he has Unity templates.

https://github.com/DarkStarSword/3d-fixes

It'd probably be a good idea to start a Vapour thread, maybe?

DarkStarSword said:If you wanted to take a crack at fixing it yourself, I have templates that can often fix Unity lights/shadows in my 3d-fixes repository, and my shadertool.py script can fix most of the other serious problems (but if you switched profile the driver may be doing that part already - if you get flickering return to the original profile and use my script instead).


Also Darkstarsword fixed a 3Dmigoto crash for Fallout 4, who knows, maybe it'll work for you?

https://forums.geforce.com/default/topic/839133/3d-vision/fallout-4/post/4727579/#4727579

Posted 11/16/2015 10:01 AM   
  41 / 87    
Scroll To Top