[SIMPLIFIED GUIDE] Quick n easy shader disabling / fixing static objects' depth if rendered wrong.
[More than happy for this thread to be replaced with a similar one by someone who knows what they are doing! This is after all just a restating/collating of received help from our gifted Shader Hackers ;) Until then... ] [center][img]https://forums.geforce.com/cmd/default/download-comment-attachment/67042/[/img][/center] Firstly, have you seen the number of games on the Helix site? There is a heck of a lot of them! Nearly every game released ends up there. [color="green"][b]FACT: our Shader Hackers are AWESOME![/b][/color] Seriously - look again at that list. Now whisper, "Our Shader Hackers ARE awesome." Cuz they are. BUT Oh no! Your niche game isn't there. You want to fix it so you ask for help. Do YOU get confused when Shader Hackers helpfully point you to the article, with the solution to your very problem but the article is just a bunch of lines of text, with chunks of 'pseudocode' which isn’t the same as the code you see? Are YOU not sure what copy you are meant to paste? Do you need to: [list] [.]Push the game’s starfields or skyboxes further back because they are too close?[/.] [.]Change the above boxes from 2D to correct depth?[/.] [.]Remove a dodgy shader or few?[/.] [/list] Are you willing to spend just 5 minutes or so: hunting a shader, fixing/disabling shader, playing with the edited shader? Is the game DirectX 11? Answer YES to any of the above? Then you are in the right place. Have a look at the following guides! Each fix requires three stages: 1 – SETUP 2 – FIX 3 – RESTORE Ready? -------------------------------------------------------------------------------- [b]1 – SETUP[/b] [list] [.]DOWNLOAD 3DMigoto: [url]https://github.com/bo3b/3Dmigoto/releases/download/1.0.1/3Dmigoto-1.0.1.zip[/url] I used the earliest version because it worked on my fussy game. Newer versions found here: [url]https://github.com/bo3b/3Dmigoto/releases[/url][/.] [.]EXTRACT 3DMigoto: to where the game’s executable is - [i]Elite Dangerous' .exe was not where you expected it to be![/i][/.] [.]DOWNLOAD Notepad ++[/.] [.]RUN GAME: and enter in to your save file.[/.] [.]PRESS F10: You should hear a high pitched beep; if not, check the game’s executable location [i]– Elite Dangerous’s exe is deeply embedded and looks identical to the .exe in the root directory![/i][/.] [/list] You're ready for the next stage! :) [b]2- FIX[/b] [list] [.]For disabling dodgy shader - see thread #2 [url]https://forums.geforce.com/default/topic/896196/3d-vision/-simplified-guide-quick-n-easy-shader-disabling-fixing-static-objects-depth-if-rendered-wrong-/post/4726322/#4726322[/url][/.] [.]For fixing static objects' depth if rendered wrong e.g. skyboxes / planets - see thread #3 [url]https://forums.geforce.com/default/topic/896196/3d-vision/-simplified-guide-quick-n-easy-shader-disabling-fixing-static-objects-depth-if-rendered-wrong-/post/4726323/#4726323[/url][/.] [/list] [b]3 - RESTORE[/b] To stop 3DMigoto shader hunting and get the game ready for release, look for the d3dx.ini file and open in NOTEPAD++ Change the following: - All options under [Logging] to 0 - hunting=0 - export_shaders=0 - export_hlsl=0 - dump_usage=0 - cache_shaders=1 Your all done! Woot!
[More than happy for this thread to be replaced with a similar one by someone who knows what they are doing! This is after all just a restating/collating of received help from our gifted Shader Hackers ;) Until then... ]

Image




Firstly, have you seen the number of games on the Helix site? There is a heck of a lot of them! Nearly every game released ends up there.

FACT: our Shader Hackers are AWESOME!

Seriously - look again at that list. Now whisper, "Our Shader Hackers ARE awesome." Cuz they are.


BUT


Oh no! Your niche game isn't there. You want to fix it so you ask for help.

Do YOU get confused when Shader Hackers helpfully point you to the article, with the solution to your very problem but the article is just a bunch of lines of text, with chunks of 'pseudocode' which isn’t the same as the code you see? Are YOU not sure what copy you are meant to paste?

Do you need to:
  • Push the game’s starfields or skyboxes further back because they are too close?
  • Change the above boxes from 2D to correct depth?
  • Remove a dodgy shader or few?

Are you willing to spend just 5 minutes or so: hunting a shader, fixing/disabling shader, playing with the edited shader?
Is the game DirectX 11?

Answer YES to any of the above? Then you are in the right place. Have a look at the following guides!

Each fix requires three stages:

1 – SETUP

2 – FIX

3 – RESTORE


Ready?


--------------------------------------------------------------------------------


1 – SETUP

  • DOWNLOAD 3DMigoto: https://github.com/bo3b/3Dmigoto/releases/download/1.0.1/3Dmigoto-1.0.1.zip

    I used the earliest version because it worked on my fussy game. Newer versions found here: https://github.com/bo3b/3Dmigoto/releases

  • EXTRACT 3DMigoto: to where the game’s executable is - Elite Dangerous' .exe was not where you expected it to be!

  • DOWNLOAD Notepad ++

  • RUN GAME: and enter in to your save file.

  • PRESS F10: You should hear a high pitched beep; if not, check the game’s executable location – Elite Dangerous’s exe is deeply embedded and looks identical to the .exe in the root directory!


You're ready for the next stage! :)



2- FIX




3 - RESTORE

To stop 3DMigoto shader hunting and get the game ready for release, look for the d3dx.ini file and open in NOTEPAD++

Change the following:
- All options under [Logging] to 0
- hunting=0
- export_shaders=0
- export_hlsl=0
- dump_usage=0
- cache_shaders=1


Your all done! Woot!

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#1
Posted 11/14/2015 10:47 AM   
[b]THREAD #2[/b] [b]2a – FIX [To remove dodgy shader][/b] [i]Time taken when you know what you are doing: less than 2 minutes![/i] :D [list] [.]LOOK AT DODGY SHADER[/.] [.]PRESS NUMPAD 5 to go forward through active shaders (NumKey 4 goes backwards)[/.] [.]FIND DODGY SHADER: It will take around half a minute to cycle through all the shaders! Target shader will either standout very clearly or vanish[/.] [.]HIT NUMKEY 6 to store shader. You should hear a beep.[/.] [.]CYCLE BACK A COUPLE OF SHADERS so your dodgy one is normal[/.] [.]ALT TAB out of the game.[/.] [.]OPEN ShaderFixes FOLDER found where you extracted 3DMigoto; it should contain a file with a name like [b]827b5b432631d641-vs_replace.txt[/b][/.] [.][quote="DHR"] OPEN d3dx.ini file in NOTEPAD++ add this line in the ShaderOverride section: [code][ShaderOverride1] Hash=827b5b432631d641 Handling=skip[/code] Where the "827b5b432631d641" is shader you want to disable (VS or PS). For disabling effect is better to disable PS, normally VS disable more stuff that only one effect. And if you add more that one, change the number "1" in the [ShaderOverride1], for 2, 3, 4......[/quote][/.] [.]CTRL + S to save[/.] [.]ALT TAB into the game[/.] [.]F10 TO RELOAD SHADER. You should hear a high pitch beep and your shader should be fixed! [i]A low pitch beep means you have gone wrong. Compare the code above with yours.[/i][/.] [/list] Now repeat for the other shaders you wish to disable. SHARE your fix! :) --------------------------------------------------------------------- [b]METHOD 2 - for completeness - as previous, up until DHR quote[/b] [list] [.]LOOK AT DODGY SHADER[/.] [.]PRESS NUMPAD 5 to go forward through active shaders (NumKey 4 goes backwards)[/.] [.]FIND DODGY SHADER: It will take around half a minute to cycle through all the shaders! Target shader will either standout very clearly or vanish[/.] [.]HIT NUMKEY 6 to store shader. You should hear a beep.[/.] [.]CYCLE BACK A COUPLE OF SHADERS so your dodgy one is normal[/.] [.]ALT TAB out of the game.[/.] [.]OPEN ShaderFixes FOLDER found where you extracted 3DMigoto; it should contain a file with a name like [b]827b5b432631d641-vs_replace.txt[/b][/.] [.]OPEN the shader FILE in NOTEPAD++[/.] [/list] These shader files can range in length. The following is an example of a middling one: [code]cbuffer cb0 : register(b0) { float4 cb0[9]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float3 v0 : COLOR0, float3 v1 : POSITION0, float3 v2 : POSITION1, float3 v3 : TEXCOORD0, float v4 : TEXCOORD1, float v5 : TEXCOORD2, float3 v6 : TEXCOORD3, float3 v7 : TEXCOORD4, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float4 o2 : TEXCOORD2, out float4 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float4 o5 : SV_Position0) { float4 r0,r1,r2,r3,r4; uint4 bitmask, uiDest; float4 fDest; r0.x = 0.000000000e+000; r1.y = 0.000000000e+000; r2.xyz = v2.xyz + -v1.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r0.w = r2.x < r2.y; r0.yz = float2(1.000000e+000,-1.000000e+000) * r2.zy; r1.xz = float2(-1.000000e+000,1.000000e+000) * r2.zx; r0.xyz = r0.www ? r0.xyz : r1.xyz; r0.w = dot(r0.xyz, r0.xyz); r0.w = rsqrt(r0.w); r0.xyz = r0.xyz * r0.www; r1.xyz = r2.zxy * r0.yzx; r1.xyz = r2.yzx * r0.zxy + -r1.xyz; r3.xyz = v7.xyz * v5.xxx; r0.w = 0.000000000e+000 < r3.z; r4.xyz = r0.www ? v2.xyz : v1.xyz; r0.xyz = r3.xxx * r0.xyz + r4.xyz; r0.xyz = r3.yyy * r1.xyz + r0.xyz; r0.xyz = r3.zzz * r2.xyz + r0.xyz; r0.w = 1.000000000e+000; r1.x = dot(cb0[4].xyzw, r0.xyzw); r1.y = dot(cb0[5].xyzw, r0.xyzw); r1.w = dot(cb0[7].xyzw, r0.xyzw); o0.xyz = r1.xyw; o5.xyw = r1.xyw; o0.w = v4.x * v4.x; o1.xyz = cb0[8].xxx * v0.xyz; r1.xyz = v1.xyz; r1.w = 1.000000000e+000; r2.x = dot(cb0[0].xyzw, r1.xyzw); r2.y = dot(cb0[1].xyzw, r1.xyzw); r2.z = dot(cb0[2].xyzw, r1.xyzw); r1.xyz = v2.xyz; r1.w = 1.000000000e+000; r3.x = dot(cb0[0].xyzw, r1.xyzw); r3.y = dot(cb0[1].xyzw, r1.xyzw); r3.z = dot(cb0[2].xyzw, r1.xyzw); r1.xyz = r3.xyz + -r2.xyz; o2.xyz = r2.xyz; r1.x = dot(r1.xyz, r1.xyz); o1.w = 1.000000e+000 / r1.x; r3.w = v5.x * v5.x; o2.w = 1.000000e+000 / r3.w; o3.xyzw = r3.xyzw; o4.x = dot(cb0[0].xyzw, r0.xyzw); o4.y = dot(cb0[1].xyzw, r0.xyzw); o4.z = dot(cb0[2].xyzw, r0.xyzw); o5.z = dot(cb0[6].xyzw, r0.xyzw); return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // COLOR 0 xyz 0 NONE float xyz // POSITION 0 xyz 1 NONE float xyz // POSITION 1 xyz 2 NONE float xyz // TEXCOORD 0 xyz 3 NONE float // TEXCOORD 1 x 4 NONE float x // TEXCOORD 2 x 5 NONE float x // TEXCOORD 3 xyz 6 NONE float // TEXCOORD 4 xyz 7 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // TEXCOORD 0 xyzw 0 NONE float xyzw // TEXCOORD 1 xyzw 1 NONE float xyzw // TEXCOORD 2 xyzw 2 NONE float xyzw // TEXCOORD 3 xyzw 3 NONE float xyzw // TEXCOORD 4 xyz 4 NONE float xyz // SV_Position 0 xyzw 5 POS float xyzw // vs_4_0 dcl_constantbuffer cb0[9], immediateIndexed dcl_input v0.xyz dcl_input v1.xyz dcl_input v2.xyz dcl_input v4.x dcl_input v5.x dcl_input v7.xyz dcl_output o0.xyzw dcl_output o1.xyzw dcl_output o2.xyzw dcl_output o3.xyzw dcl_output o4.xyz dcl_output_siv o5.xyzw, position dcl_temps 5 mov r0.x, l(0) mov r1.y, l(0) add r2.xyz, -v1.xyzx, v2.xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx lt r0.w, r2.x, r2.y mul r0.yz, r2.zzyz, l(0.000000, 1.000000, -1.000000, 0.000000) mul r1.xz, r2.zzxz, l(-1.000000, 0.000000, 1.000000, 0.000000) movc r0.xyz, r0.wwww, r0.xyzx, r1.xyzx dp3 r0.w, r0.xyzx, r0.xyzx rsq r0.w, r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r1.xyz, r0.yzxy, r2.zxyz mad r1.xyz, r2.yzxy, r0.zxyz, -r1.xyzx mul r3.xyz, v5.xxxx, v7.xyzx lt r0.w, l(0.000000), r3.z movc r4.xyz, r0.wwww, v2.xyzx, v1.xyzx mad r0.xyz, r3.xxxx, r0.xyzx, r4.xyzx mad r0.xyz, r3.yyyy, r1.xyzx, r0.xyzx mad r0.xyz, r3.zzzz, r2.xyzx, r0.xyzx mov r0.w, l(1.000000) dp4 r1.x, cb0[4].xyzw, r0.xyzw dp4 r1.y, cb0[5].xyzw, r0.xyzw dp4 r1.w, cb0[7].xyzw, r0.xyzw mov o0.xyz, r1.xywx mov o5.xyw, r1.xyxw mul o0.w, v4.x, v4.x mul o1.xyz, v0.xyzx, cb0[8].xxxx mov r1.xyz, v1.xyzx mov r1.w, l(1.000000) dp4 r2.x, cb0[0].xyzw, r1.xyzw dp4 r2.y, cb0[1].xyzw, r1.xyzw dp4 r2.z, cb0[2].xyzw, r1.xyzw mov r1.xyz, v2.xyzx mov r1.w, l(1.000000) dp4 r3.x, cb0[0].xyzw, r1.xyzw dp4 r3.y, cb0[1].xyzw, r1.xyzw dp4 r3.z, cb0[2].xyzw, r1.xyzw add r1.xyz, -r2.xyzx, r3.xyzx mov o2.xyz, r2.xyzx dp3 r1.x, r1.xyzx, r1.xyzx div o1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r1.x mul r3.w, v5.x, v5.x div o2.w, l(1.000000, 1.000000, 1.000000, 1.000000), r3.w mov o3.xyzw, r3.xyzw dp4 o4.x, cb0[0].xyzw, r0.xyzw dp4 o4.y, cb0[1].xyzw, r0.xyzw dp4 o4.z, cb0[2].xyzw, r0.xyzw dp4 o5.z, cb0[6].xyzw, r0.xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] The shaders typically come in two halves, with the bottom half beginning with the following and being a reddish colour in this example: [code]/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // // Input signature: //[/code] We are only interested in the top half. First, at the top, add // then describe what the issue is like this: [code]// Inside station texture borked - need to remove cbuffer cb0 : register(b0) { float4 cb0[9]; } [/code] Near the top you should see lines that look like this (might be longer or smaller): [code]void main( float3 v0 : COLOR0, float3 v1 : POSITION0, float3 v2 : POSITION1, float3 v3 : TEXCOORD0, float v4 : TEXCOORD1, float v5 : TEXCOORD2, float3 v6 : TEXCOORD3, float3 v7 : TEXCOORD4, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float4 o2 : TEXCOORD2, out float4 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float4 o5 : SV_Position0)[/code] We are interested in bit of code that looks like this: [code] out float4 o5 : SV_Position0)[/code] It could be anywhere in that chunk! We need the number that follows the letter o which is 5 in the example above. Scroll the bottom of the first chunk of code where, near the bottom, you should see a chunk like this: [code] o3.xyzw = r3.xyzw; o4.x = dot(cb0[0].xyzw, r0.xyzw); o4.y = dot(cb0[1].xyzw, r0.xyzw); o4.z = dot(cb0[2].xyzw, r0.xyzw); o5.z = dot(cb0[6].xyzw, r0.xyzw); return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler //[/code] We are only interested where it says [b]return;[/b] Just above [b]return;[/b] write something to describe what your fix. And add the small line as per the example below. The number following the letter o must be the same as the number mentioned above. [code] o4.z = dot(cb0[2].xyzw, r0.xyzw); o5.z = dot(cb0[6].xyzw, r0.xyzw); //Disabled Shader o5=0; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //[/code] [list] [.]CTRL + S to save[/.] [.]ALT TAB into the game[/.] [.]F10 TO RELOAD SHADER. You should hear a high pitch beep and your shader should be fixed! [i]A low pitch beep means you have gone wrong. Compare the code above with yours.[/i][/.] [/list] Now repeat for the other shaders you wish to disable. SHARE your fix! :) example of completed shader below [code]//Inside station texture borked - need to remove cbuffer cb0 : register(b0) { float4 cb0[9]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float3 v0 : COLOR0, float3 v1 : POSITION0, float3 v2 : POSITION1, float3 v3 : TEXCOORD0, float v4 : TEXCOORD1, float v5 : TEXCOORD2, float3 v6 : TEXCOORD3, float3 v7 : TEXCOORD4, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float4 o2 : TEXCOORD2, out float4 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float4 o5 : SV_Position0) { float4 r0,r1,r2,r3,r4; uint4 bitmask, uiDest; float4 fDest; r0.x = 0.000000000e+000; r1.y = 0.000000000e+000; r2.xyz = v2.xyz + -v1.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r0.w = r2.x < r2.y; r0.yz = float2(1.000000e+000,-1.000000e+000) * r2.zy; r1.xz = float2(-1.000000e+000,1.000000e+000) * r2.zx; r0.xyz = r0.www ? r0.xyz : r1.xyz; r0.w = dot(r0.xyz, r0.xyz); r0.w = rsqrt(r0.w); r0.xyz = r0.xyz * r0.www; r1.xyz = r2.zxy * r0.yzx; r1.xyz = r2.yzx * r0.zxy + -r1.xyz; r3.xyz = v7.xyz * v5.xxx; r0.w = 0.000000000e+000 < r3.z; r4.xyz = r0.www ? v2.xyz : v1.xyz; r0.xyz = r3.xxx * r0.xyz + r4.xyz; r0.xyz = r3.yyy * r1.xyz + r0.xyz; r0.xyz = r3.zzz * r2.xyz + r0.xyz; r0.w = 1.000000000e+000; r1.x = dot(cb0[4].xyzw, r0.xyzw); r1.y = dot(cb0[5].xyzw, r0.xyzw); r1.w = dot(cb0[7].xyzw, r0.xyzw); o0.xyz = r1.xyw; o5.xyw = r1.xyw; o0.w = v4.x * v4.x; o1.xyz = cb0[8].xxx * v0.xyz; r1.xyz = v1.xyz; r1.w = 1.000000000e+000; r2.x = dot(cb0[0].xyzw, r1.xyzw); r2.y = dot(cb0[1].xyzw, r1.xyzw); r2.z = dot(cb0[2].xyzw, r1.xyzw); r1.xyz = v2.xyz; r1.w = 1.000000000e+000; r3.x = dot(cb0[0].xyzw, r1.xyzw); r3.y = dot(cb0[1].xyzw, r1.xyzw); r3.z = dot(cb0[2].xyzw, r1.xyzw); r1.xyz = r3.xyz + -r2.xyz; o2.xyz = r2.xyz; r1.x = dot(r1.xyz, r1.xyz); o1.w = 1.000000e+000 / r1.x; r3.w = v5.x * v5.x; o2.w = 1.000000e+000 / r3.w; o3.xyzw = r3.xyzw; o4.x = dot(cb0[0].xyzw, r0.xyzw); o4.y = dot(cb0[1].xyzw, r0.xyzw); o4.z = dot(cb0[2].xyzw, r0.xyzw); o5.z = dot(cb0[6].xyzw, r0.xyzw); //Disabled Shader o5=0; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // COLOR 0 xyz 0 NONE float xyz // POSITION 0 xyz 1 NONE float xyz // POSITION 1 xyz 2 NONE float xyz // TEXCOORD 0 xyz 3 NONE float // TEXCOORD 1 x 4 NONE float x // TEXCOORD 2 x 5 NONE float x // TEXCOORD 3 xyz 6 NONE float // TEXCOORD 4 xyz 7 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // TEXCOORD 0 xyzw 0 NONE float xyzw // TEXCOORD 1 xyzw 1 NONE float xyzw // TEXCOORD 2 xyzw 2 NONE float xyzw // TEXCOORD 3 xyzw 3 NONE float xyzw // TEXCOORD 4 xyz 4 NONE float xyz // SV_Position 0 xyzw 5 POS float xyzw // vs_4_0 dcl_constantbuffer cb0[9], immediateIndexed dcl_input v0.xyz dcl_input v1.xyz dcl_input v2.xyz dcl_input v4.x dcl_input v5.x dcl_input v7.xyz dcl_output o0.xyzw dcl_output o1.xyzw dcl_output o2.xyzw dcl_output o3.xyzw dcl_output o4.xyz dcl_output_siv o5.xyzw, position dcl_temps 5 mov r0.x, l(0) mov r1.y, l(0) add r2.xyz, -v1.xyzx, v2.xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx lt r0.w, r2.x, r2.y mul r0.yz, r2.zzyz, l(0.000000, 1.000000, -1.000000, 0.000000) mul r1.xz, r2.zzxz, l(-1.000000, 0.000000, 1.000000, 0.000000) movc r0.xyz, r0.wwww, r0.xyzx, r1.xyzx dp3 r0.w, r0.xyzx, r0.xyzx rsq r0.w, r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r1.xyz, r0.yzxy, r2.zxyz mad r1.xyz, r2.yzxy, r0.zxyz, -r1.xyzx mul r3.xyz, v5.xxxx, v7.xyzx lt r0.w, l(0.000000), r3.z movc r4.xyz, r0.wwww, v2.xyzx, v1.xyzx mad r0.xyz, r3.xxxx, r0.xyzx, r4.xyzx mad r0.xyz, r3.yyyy, r1.xyzx, r0.xyzx mad r0.xyz, r3.zzzz, r2.xyzx, r0.xyzx mov r0.w, l(1.000000) dp4 r1.x, cb0[4].xyzw, r0.xyzw dp4 r1.y, cb0[5].xyzw, r0.xyzw dp4 r1.w, cb0[7].xyzw, r0.xyzw mov o0.xyz, r1.xywx mov o5.xyw, r1.xyxw mul o0.w, v4.x, v4.x mul o1.xyz, v0.xyzx, cb0[8].xxxx mov r1.xyz, v1.xyzx mov r1.w, l(1.000000) dp4 r2.x, cb0[0].xyzw, r1.xyzw dp4 r2.y, cb0[1].xyzw, r1.xyzw dp4 r2.z, cb0[2].xyzw, r1.xyzw mov r1.xyz, v2.xyzx mov r1.w, l(1.000000) dp4 r3.x, cb0[0].xyzw, r1.xyzw dp4 r3.y, cb0[1].xyzw, r1.xyzw dp4 r3.z, cb0[2].xyzw, r1.xyzw add r1.xyz, -r2.xyzx, r3.xyzx mov o2.xyz, r2.xyzx dp3 r1.x, r1.xyzx, r1.xyzx div o1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r1.x mul r3.w, v5.x, v5.x div o2.w, l(1.000000, 1.000000, 1.000000, 1.000000), r3.w mov o3.xyzw, r3.xyzw dp4 o4.x, cb0[0].xyzw, r0.xyzw dp4 o4.y, cb0[1].xyzw, r0.xyzw dp4 o4.z, cb0[2].xyzw, r0.xyzw dp4 o5.z, cb0[6].xyzw, r0.xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code]
THREAD #2

2a – FIX [To remove dodgy shader]

Time taken when you know what you are doing: less than 2 minutes! :D

  • LOOK AT DODGY SHADER

  • PRESS NUMPAD 5 to go forward through active shaders (NumKey 4 goes backwards)

  • FIND DODGY SHADER: It will take around half a minute to cycle through all the shaders! Target shader will either standout very clearly or vanish

  • HIT NUMKEY 6 to store shader. You should hear a beep.

  • CYCLE BACK A COUPLE OF SHADERS so your dodgy one is normal

  • ALT TAB out of the game.

  • OPEN ShaderFixes FOLDER found where you extracted 3DMigoto; it should contain a file with a name like 827b5b432631d641-vs_replace.txt

  • DHR said: OPEN d3dx.ini file in NOTEPAD++ add this line in the ShaderOverride section:

    [ShaderOverride1]
    Hash=827b5b432631d641
    Handling=skip


    Where the "827b5b432631d641" is shader you want to disable (VS or PS). For disabling effect is better to disable PS, normally VS disable more stuff that only one effect.

    And if you add more that one, change the number "1" in the [ShaderOverride1], for 2, 3, 4......

  • CTRL + S to save

  • ALT TAB into the game

  • F10 TO RELOAD SHADER. You should hear a high pitch beep and your shader should be fixed! A low pitch beep means you have gone wrong. Compare the code above with yours.


Now repeat for the other shaders you wish to disable.

SHARE your fix!
:)



---------------------------------------------------------------------



METHOD 2 - for completeness - as previous, up until DHR quote
  • LOOK AT DODGY SHADER

  • PRESS NUMPAD 5 to go forward through active shaders (NumKey 4 goes backwards)

  • FIND DODGY SHADER: It will take around half a minute to cycle through all the shaders! Target shader will either standout very clearly or vanish

  • HIT NUMKEY 6 to store shader. You should hear a beep.

  • CYCLE BACK A COUPLE OF SHADERS so your dodgy one is normal

  • ALT TAB out of the game.

  • OPEN ShaderFixes FOLDER found where you extracted 3DMigoto; it should contain a file with a name like 827b5b432631d641-vs_replace.txt
  • OPEN the shader FILE in NOTEPAD++

These shader files can range in length. The following is an example of a middling one:

cbuffer cb0 : register(b0)
{
float4 cb0[9];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float3 v0 : COLOR0,
float3 v1 : POSITION0,
float3 v2 : POSITION1,
float3 v3 : TEXCOORD0,
float v4 : TEXCOORD1,
float v5 : TEXCOORD2,
float3 v6 : TEXCOORD3,
float3 v7 : TEXCOORD4,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float4 o2 : TEXCOORD2,
out float4 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float4 o5 : SV_Position0)
{
float4 r0,r1,r2,r3,r4;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = 0.000000000e+000;
r1.y = 0.000000000e+000;
r2.xyz = v2.xyz + -v1.xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r0.w = r2.x < r2.y;
r0.yz = float2(1.000000e+000,-1.000000e+000) * r2.zy;
r1.xz = float2(-1.000000e+000,1.000000e+000) * r2.zx;
r0.xyz = r0.www ? r0.xyz : r1.xyz;
r0.w = dot(r0.xyz, r0.xyz);
r0.w = rsqrt(r0.w);
r0.xyz = r0.xyz * r0.www;
r1.xyz = r2.zxy * r0.yzx;
r1.xyz = r2.yzx * r0.zxy + -r1.xyz;
r3.xyz = v7.xyz * v5.xxx;
r0.w = 0.000000000e+000 < r3.z;
r4.xyz = r0.www ? v2.xyz : v1.xyz;
r0.xyz = r3.xxx * r0.xyz + r4.xyz;
r0.xyz = r3.yyy * r1.xyz + r0.xyz;
r0.xyz = r3.zzz * r2.xyz + r0.xyz;
r0.w = 1.000000000e+000;
r1.x = dot(cb0[4].xyzw, r0.xyzw);
r1.y = dot(cb0[5].xyzw, r0.xyzw);
r1.w = dot(cb0[7].xyzw, r0.xyzw);
o0.xyz = r1.xyw;
o5.xyw = r1.xyw;
o0.w = v4.x * v4.x;
o1.xyz = cb0[8].xxx * v0.xyz;
r1.xyz = v1.xyz;
r1.w = 1.000000000e+000;
r2.x = dot(cb0[0].xyzw, r1.xyzw);
r2.y = dot(cb0[1].xyzw, r1.xyzw);
r2.z = dot(cb0[2].xyzw, r1.xyzw);
r1.xyz = v2.xyz;
r1.w = 1.000000000e+000;
r3.x = dot(cb0[0].xyzw, r1.xyzw);
r3.y = dot(cb0[1].xyzw, r1.xyzw);
r3.z = dot(cb0[2].xyzw, r1.xyzw);
r1.xyz = r3.xyz + -r2.xyz;
o2.xyz = r2.xyz;
r1.x = dot(r1.xyz, r1.xyz);
o1.w = 1.000000e+000 / r1.x;
r3.w = v5.x * v5.x;
o2.w = 1.000000e+000 / r3.w;
o3.xyzw = r3.xyzw;
o4.x = dot(cb0[0].xyzw, r0.xyzw);
o4.y = dot(cb0[1].xyzw, r0.xyzw);
o4.z = dot(cb0[2].xyzw, r0.xyzw);
o5.z = dot(cb0[6].xyzw, r0.xyzw);
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// COLOR 0 xyz 0 NONE float xyz
// POSITION 0 xyz 1 NONE float xyz
// POSITION 1 xyz 2 NONE float xyz
// TEXCOORD 0 xyz 3 NONE float
// TEXCOORD 1 x 4 NONE float x
// TEXCOORD 2 x 5 NONE float x
// TEXCOORD 3 xyz 6 NONE float
// TEXCOORD 4 xyz 7 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// TEXCOORD 0 xyzw 0 NONE float xyzw
// TEXCOORD 1 xyzw 1 NONE float xyzw
// TEXCOORD 2 xyzw 2 NONE float xyzw
// TEXCOORD 3 xyzw 3 NONE float xyzw
// TEXCOORD 4 xyz 4 NONE float xyz
// SV_Position 0 xyzw 5 POS float xyzw
//
vs_4_0
dcl_constantbuffer cb0[9], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_input v2.xyz
dcl_input v4.x
dcl_input v5.x
dcl_input v7.xyz
dcl_output o0.xyzw
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.xyzw
dcl_output o4.xyz
dcl_output_siv o5.xyzw, position
dcl_temps 5
mov r0.x, l(0)
mov r1.y, l(0)
add r2.xyz, -v1.xyzx, v2.xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
lt r0.w, r2.x, r2.y
mul r0.yz, r2.zzyz, l(0.000000, 1.000000, -1.000000, 0.000000)
mul r1.xz, r2.zzxz, l(-1.000000, 0.000000, 1.000000, 0.000000)
movc r0.xyz, r0.wwww, r0.xyzx, r1.xyzx
dp3 r0.w, r0.xyzx, r0.xyzx
rsq r0.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r1.xyz, r0.yzxy, r2.zxyz
mad r1.xyz, r2.yzxy, r0.zxyz, -r1.xyzx
mul r3.xyz, v5.xxxx, v7.xyzx
lt r0.w, l(0.000000), r3.z
movc r4.xyz, r0.wwww, v2.xyzx, v1.xyzx
mad r0.xyz, r3.xxxx, r0.xyzx, r4.xyzx
mad r0.xyz, r3.yyyy, r1.xyzx, r0.xyzx
mad r0.xyz, r3.zzzz, r2.xyzx, r0.xyzx
mov r0.w, l(1.000000)
dp4 r1.x, cb0[4].xyzw, r0.xyzw
dp4 r1.y, cb0[5].xyzw, r0.xyzw
dp4 r1.w, cb0[7].xyzw, r0.xyzw
mov o0.xyz, r1.xywx
mov o5.xyw, r1.xyxw
mul o0.w, v4.x, v4.x
mul o1.xyz, v0.xyzx, cb0[8].xxxx
mov r1.xyz, v1.xyzx
mov r1.w, l(1.000000)
dp4 r2.x, cb0[0].xyzw, r1.xyzw
dp4 r2.y, cb0[1].xyzw, r1.xyzw
dp4 r2.z, cb0[2].xyzw, r1.xyzw
mov r1.xyz, v2.xyzx
mov r1.w, l(1.000000)
dp4 r3.x, cb0[0].xyzw, r1.xyzw
dp4 r3.y, cb0[1].xyzw, r1.xyzw
dp4 r3.z, cb0[2].xyzw, r1.xyzw
add r1.xyz, -r2.xyzx, r3.xyzx
mov o2.xyz, r2.xyzx
dp3 r1.x, r1.xyzx, r1.xyzx
div o1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r1.x
mul r3.w, v5.x, v5.x
div o2.w, l(1.000000, 1.000000, 1.000000, 1.000000), r3.w
mov o3.xyzw, r3.xyzw
dp4 o4.x, cb0[0].xyzw, r0.xyzw
dp4 o4.y, cb0[1].xyzw, r0.xyzw
dp4 o4.z, cb0[2].xyzw, r0.xyzw
dp4 o5.z, cb0[6].xyzw, r0.xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/



The shaders typically come in two halves, with the bottom half beginning with the following and being a reddish colour in this example:

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//
// Input signature:
//

We are only interested in the top half.


First, at the top, add // then describe what the issue is like this:

// Inside station texture borked - need to remove

cbuffer cb0 : register(b0)
{
float4 cb0[9];
}



Near the top you should see lines that look like this (might be longer or smaller):

void main(
float3 v0 : COLOR0,
float3 v1 : POSITION0,
float3 v2 : POSITION1,
float3 v3 : TEXCOORD0,
float v4 : TEXCOORD1,
float v5 : TEXCOORD2,
float3 v6 : TEXCOORD3,
float3 v7 : TEXCOORD4,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float4 o2 : TEXCOORD2,
out float4 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float4 o5 : SV_Position0)


We are interested in bit of code that looks like this:
out float4 o5 : SV_Position0)

It could be anywhere in that chunk!
We need the number that follows the letter o which is 5 in the example above.

Scroll the bottom of the first chunk of code where, near the bottom, you should see a chunk like this:

o3.xyzw = r3.xyzw;
o4.x = dot(cb0[0].xyzw, r0.xyzw);
o4.y = dot(cb0[1].xyzw, r0.xyzw);
o4.z = dot(cb0[2].xyzw, r0.xyzw);
o5.z = dot(cb0[6].xyzw, r0.xyzw);
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//


We are only interested where it says return;

Just above return; write something to describe what your fix. And add the small line as per the example below. The number following the letter o must be the same as the number mentioned above.

o4.z = dot(cb0[2].xyzw, r0.xyzw);
o5.z = dot(cb0[6].xyzw, r0.xyzw);

//Disabled Shader
o5=0;

return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//


  • CTRL + S to save

  • ALT TAB into the game

  • F10 TO RELOAD SHADER. You should hear a high pitch beep and your shader should be fixed! A low pitch beep means you have gone wrong. Compare the code above with yours.


Now repeat for the other shaders you wish to disable.

SHARE your fix!
:)


example of completed shader below
//Inside station texture borked - need to remove

cbuffer cb0 : register(b0)
{
float4 cb0[9];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float3 v0 : COLOR0,
float3 v1 : POSITION0,
float3 v2 : POSITION1,
float3 v3 : TEXCOORD0,
float v4 : TEXCOORD1,
float v5 : TEXCOORD2,
float3 v6 : TEXCOORD3,
float3 v7 : TEXCOORD4,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float4 o2 : TEXCOORD2,
out float4 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float4 o5 : SV_Position0)
{
float4 r0,r1,r2,r3,r4;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = 0.000000000e+000;
r1.y = 0.000000000e+000;
r2.xyz = v2.xyz + -v1.xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r0.w = r2.x < r2.y;
r0.yz = float2(1.000000e+000,-1.000000e+000) * r2.zy;
r1.xz = float2(-1.000000e+000,1.000000e+000) * r2.zx;
r0.xyz = r0.www ? r0.xyz : r1.xyz;
r0.w = dot(r0.xyz, r0.xyz);
r0.w = rsqrt(r0.w);
r0.xyz = r0.xyz * r0.www;
r1.xyz = r2.zxy * r0.yzx;
r1.xyz = r2.yzx * r0.zxy + -r1.xyz;
r3.xyz = v7.xyz * v5.xxx;
r0.w = 0.000000000e+000 < r3.z;
r4.xyz = r0.www ? v2.xyz : v1.xyz;
r0.xyz = r3.xxx * r0.xyz + r4.xyz;
r0.xyz = r3.yyy * r1.xyz + r0.xyz;
r0.xyz = r3.zzz * r2.xyz + r0.xyz;
r0.w = 1.000000000e+000;
r1.x = dot(cb0[4].xyzw, r0.xyzw);
r1.y = dot(cb0[5].xyzw, r0.xyzw);
r1.w = dot(cb0[7].xyzw, r0.xyzw);
o0.xyz = r1.xyw;
o5.xyw = r1.xyw;
o0.w = v4.x * v4.x;
o1.xyz = cb0[8].xxx * v0.xyz;
r1.xyz = v1.xyz;
r1.w = 1.000000000e+000;
r2.x = dot(cb0[0].xyzw, r1.xyzw);
r2.y = dot(cb0[1].xyzw, r1.xyzw);
r2.z = dot(cb0[2].xyzw, r1.xyzw);
r1.xyz = v2.xyz;
r1.w = 1.000000000e+000;
r3.x = dot(cb0[0].xyzw, r1.xyzw);
r3.y = dot(cb0[1].xyzw, r1.xyzw);
r3.z = dot(cb0[2].xyzw, r1.xyzw);
r1.xyz = r3.xyz + -r2.xyz;
o2.xyz = r2.xyz;
r1.x = dot(r1.xyz, r1.xyz);
o1.w = 1.000000e+000 / r1.x;
r3.w = v5.x * v5.x;
o2.w = 1.000000e+000 / r3.w;
o3.xyzw = r3.xyzw;
o4.x = dot(cb0[0].xyzw, r0.xyzw);
o4.y = dot(cb0[1].xyzw, r0.xyzw);
o4.z = dot(cb0[2].xyzw, r0.xyzw);
o5.z = dot(cb0[6].xyzw, r0.xyzw);

//Disabled Shader
o5=0;

return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// COLOR 0 xyz 0 NONE float xyz
// POSITION 0 xyz 1 NONE float xyz
// POSITION 1 xyz 2 NONE float xyz
// TEXCOORD 0 xyz 3 NONE float
// TEXCOORD 1 x 4 NONE float x
// TEXCOORD 2 x 5 NONE float x
// TEXCOORD 3 xyz 6 NONE float
// TEXCOORD 4 xyz 7 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// TEXCOORD 0 xyzw 0 NONE float xyzw
// TEXCOORD 1 xyzw 1 NONE float xyzw
// TEXCOORD 2 xyzw 2 NONE float xyzw
// TEXCOORD 3 xyzw 3 NONE float xyzw
// TEXCOORD 4 xyz 4 NONE float xyz
// SV_Position 0 xyzw 5 POS float xyzw
//
vs_4_0
dcl_constantbuffer cb0[9], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_input v2.xyz
dcl_input v4.x
dcl_input v5.x
dcl_input v7.xyz
dcl_output o0.xyzw
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.xyzw
dcl_output o4.xyz
dcl_output_siv o5.xyzw, position
dcl_temps 5
mov r0.x, l(0)
mov r1.y, l(0)
add r2.xyz, -v1.xyzx, v2.xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
lt r0.w, r2.x, r2.y
mul r0.yz, r2.zzyz, l(0.000000, 1.000000, -1.000000, 0.000000)
mul r1.xz, r2.zzxz, l(-1.000000, 0.000000, 1.000000, 0.000000)
movc r0.xyz, r0.wwww, r0.xyzx, r1.xyzx
dp3 r0.w, r0.xyzx, r0.xyzx
rsq r0.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r1.xyz, r0.yzxy, r2.zxyz
mad r1.xyz, r2.yzxy, r0.zxyz, -r1.xyzx
mul r3.xyz, v5.xxxx, v7.xyzx
lt r0.w, l(0.000000), r3.z
movc r4.xyz, r0.wwww, v2.xyzx, v1.xyzx
mad r0.xyz, r3.xxxx, r0.xyzx, r4.xyzx
mad r0.xyz, r3.yyyy, r1.xyzx, r0.xyzx
mad r0.xyz, r3.zzzz, r2.xyzx, r0.xyzx
mov r0.w, l(1.000000)
dp4 r1.x, cb0[4].xyzw, r0.xyzw
dp4 r1.y, cb0[5].xyzw, r0.xyzw
dp4 r1.w, cb0[7].xyzw, r0.xyzw
mov o0.xyz, r1.xywx
mov o5.xyw, r1.xyxw
mul o0.w, v4.x, v4.x
mul o1.xyz, v0.xyzx, cb0[8].xxxx
mov r1.xyz, v1.xyzx
mov r1.w, l(1.000000)
dp4 r2.x, cb0[0].xyzw, r1.xyzw
dp4 r2.y, cb0[1].xyzw, r1.xyzw
dp4 r2.z, cb0[2].xyzw, r1.xyzw
mov r1.xyz, v2.xyzx
mov r1.w, l(1.000000)
dp4 r3.x, cb0[0].xyzw, r1.xyzw
dp4 r3.y, cb0[1].xyzw, r1.xyzw
dp4 r3.z, cb0[2].xyzw, r1.xyzw
add r1.xyz, -r2.xyzx, r3.xyzx
mov o2.xyz, r2.xyzx
dp3 r1.x, r1.xyzx, r1.xyzx
div o1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r1.x
mul r3.w, v5.x, v5.x
div o2.w, l(1.000000, 1.000000, 1.000000, 1.000000), r3.w
mov o3.xyzw, r3.xyzw
dp4 o4.x, cb0[0].xyzw, r0.xyzw
dp4 o4.y, cb0[1].xyzw, r0.xyzw
dp4 o4.z, cb0[2].xyzw, r0.xyzw
dp4 o5.z, cb0[6].xyzw, r0.xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#2
Posted 11/14/2015 10:48 AM   
[b]THREAD #3[/b] [b]2b – FIX [To correct static objects' depth if rendered wrong e.g. skyboxes / planets ][/b] [i]Time taken when you know what you are doing: less than 5 minutes![/i] :D [list] [.]LOOK AT DODGY SHADER[/.] [.]PRESS NUMPAD 5 to go forward through active shaders (NumKey 4 goes backwards)[/.] [.]FIND DODGY SHADER: It will take around half a minute to cycle through all the shaders! Target shader will either standout very clearly or vanish[/.] [.]HIT NUMKEY 6 to store shader. You should hear a beep.[/.] [.]CYCLE BACK A COUPLE OF SHADERS so your dodgy one is normal[/.] [.]ALT TAB out of the game.[/.] [.]OPEN ShaderFixes FOLDER found where you extracted 3DMigoto; it should contain a file with a name like [b]296f9633b3816357-vs_replace[/b][/.] [.]OPEN FILE in NOTEPAD++[/.] [/list] These shader files can range in length. The following is an example of a middling one: [code]cbuffer cb0 : register(b0) { float4 cb0[15]; } cbuffer cb1 : register(b1) { float4 cb1[2]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : POSITION0, float4 v1 : POSITION1, float4 v2 : TEXCOORD0, float4 v3 : TEXCOORD1, float4 v4 : TEXCOORD2, float4 v5 : TEXCOORD3, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float3 o2 : TEXCOORD2, out float3 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float2 o5 : TEXCOORD5, out float4 o6 : SV_Position0) { float4 r0,r1,r2,r3; uint4 bitmask, uiDest; float4 fDest; r0.x = 1.000000000e+000 + -cb0[9].w; r0.x = cb0[10].w * r0.x; r0.y = -1.000000000e+000 + cb0[9].w; r0.xy = cb0[10].zx * r0.xy; r0.z = cb0[9].w >= 1.000000000e+000; r0.x = r0.z ? -r0.y : r0.x; r0.x = v0.w + r0.x; r0.y = -cb0[10].w + r0.x; r0.z = cb0[10].y + -cb0[10].w; r0.y = saturate(r0.y / r0.z); r0.y = log2(r0.y); r0.y = cb0[13].z * r0.y; r0.y = exp2(r0.y); r0.y = min(r0.y, 1.000000000e+000); o0.w = r0.y; o0.xyz = v1.xyz; o1.xyzw = v5.xyzw; r0.z = r0.x >= cb0[10].w; r0.x = -cb0[14].x + r0.x; r0.z = r0.z ? 1.000000 : 0; r1.xyz = float3(1.000000e+001,1.000000e+001,1.000000e+001) * cb0[6].xyz; r2.xyz = v0.xyz * cb1[0].xyz + cb1[1].xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.x = dot(cb0[7].xyz, r2.xyz); r3.y = dot(cb0[8].xyz, r2.xyz); r3.z = dot(cb0[9].xyz, r2.xyz); r1.xyz = -r3.xyz * float3(1.000000e+001,1.000000e+001,1.000000e+001) + -r1.xyz; r2.xyz = float3(1.000000e+001,1.000000e+001,1.000000e+001) * r3.xyz; r1.xyz = r0.zzz * r1.xyz + r2.xyz; r2.xyz = -cb0[6].xyz * float3(1.000000e+001,1.000000e+001,1.000000e+001) + -r1.xyz; r0.z = v4.x >= 9.999999776e-003; r0.z = r0.z ? 1.000000 : 0; r1.xyz = r0.zzz * r2.xyz + r1.xyz; o2.xyz = r1.xyz; r0.z = -cb0[14].x + cb0[10].y; r0.z = 1.000000e+000 / r0.z; r0.x = saturate(r0.x * r0.z); r0.z = r0.x * -2.000000000e+000 + 3.000000000e+000; r0.x = r0.x * r0.x; r0.x = -r0.z * r0.x + 1.000000000e+000; r0.x = log2(r0.x); r0.x = cb0[14].y * r0.x; r0.x = exp2(r0.x); r0.z = saturate(-cb0[13].x + r0.x); r0.w = 1.000000000e+000 + -cb0[13].x; r0.w = 1.000000e+000 / r0.w; r0.z = r0.z * r0.w; r2.y = cb0[13].y * r0.z; r0.zw = saturate(-cb0[11].yw + r0.xx); r3.xy = float2(1.000000e+000,1.000000e+000) + -cb0[11].yw; r3.xy = float2(1.000000e+000,1.000000e+000) / r3.xy; r0.zw = r3.xy * r0.zw; r2.x = cb0[11].z * r0.z; r2.z = cb0[12].x * r0.w; o3.xyz = cb0[11].xxx * r2.xyz; r0.zw = cb0[12].wy + -cb0[12].yz; r0.y = r0.y * r0.w + cb0[12].z; r0.z = saturate(r0.z); r0.x = r0.x * r0.z + r0.y; r0.x = log2(r0.x); r0.x = cb0[13].w * r0.x; r0.x = exp2(r0.x); r0.y = 1.000000000e+000 + v5.x; r0.x = r0.x * r0.y; r0.xy = v2.zw * r0.xx; r0.xzw = cb0[4].xyz * r0.xxx + r1.xyz; r0.xyz = cb0[5].xyz * r0.yyy + r0.xzw; o4.xyz = r0.xyz; o5.xy = v2.xy; r1.xyzw = cb0[1].xyzw * r0.yyyy; r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw; r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw; o6.xyzw = cb0[3].xyzw + r0.xyzw; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyzw // POSITION 1 xyzw 1 NONE float xyz // TEXCOORD 0 xyzw 2 NONE float xyzw // TEXCOORD 1 xyzw 3 NONE float // TEXCOORD 2 xyzw 4 NONE float x // TEXCOORD 3 xyzw 5 NONE float xyzw // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // TEXCOORD 0 xyzw 0 NONE float xyzw // TEXCOORD 1 xyzw 1 NONE float xyzw // TEXCOORD 2 xyz 2 NONE float xyz // TEXCOORD 3 xyz 3 NONE float xyz // TEXCOORD 4 xyz 4 NONE float xyz // TEXCOORD 5 xy 5 NONE float xy // SV_Position 0 xyzw 6 POS float xyzw // vs_4_0 dcl_constantbuffer cb1[2], immediateIndexed dcl_constantbuffer cb0[15], immediateIndexed dcl_input v0.xyzw dcl_input v1.xyz dcl_input v2.xyzw dcl_input v4.x dcl_input v5.xyzw dcl_output o0.xyzw dcl_output o1.xyzw dcl_output o2.xyz dcl_output o3.xyz dcl_output o4.xyz dcl_output o5.xy dcl_output_siv o6.xyzw, position dcl_temps 4 add r0.x, -cb0[9].w, l(1.000000) mul r0.x, r0.x, cb0[10].w add r0.y, cb0[9].w, l(-1.000000) mul r0.xy, r0.xyxx, cb0[10].zxzz ge r0.z, cb0[9].w, l(1.000000) movc r0.x, r0.z, -r0.y, r0.x add r0.x, r0.x, v0.w add r0.y, r0.x, -cb0[10].w add r0.z, -cb0[10].w, cb0[10].y div_sat r0.y, r0.y, r0.z log r0.y, r0.y mul r0.y, r0.y, cb0[13].z exp r0.y, r0.y min r0.y, r0.y, l(1.000000) mov o0.w, r0.y mov o0.xyz, v1.xyzx mov o1.xyzw, v5.xyzw ge r0.z, r0.x, cb0[10].w add r0.x, r0.x, -cb0[14].x and r0.z, r0.z, l(0x3f800000) mul r1.xyz, cb0[6].xyzx, l(10.000000, 10.000000, 10.000000, 0.000000) mad r2.xyz, v0.xyzx, cb1[0].xyzx, cb1[1].xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx dp3 r3.x, cb0[7].xyzx, r2.xyzx dp3 r3.y, cb0[8].xyzx, r2.xyzx dp3 r3.z, cb0[9].xyzx, r2.xyzx mad r1.xyz, -r3.xyzx, l(10.000000, 10.000000, 10.000000, 0.000000), -r1.xyzx mul r2.xyz, r3.xyzx, l(10.000000, 10.000000, 10.000000, 0.000000) mad r1.xyz, r0.zzzz, r1.xyzx, r2.xyzx mad r2.xyz, -cb0[6].xyzx, l(10.000000, 10.000000, 10.000000, 0.000000), -r1.xyzx ge r0.z, v4.x, l(0.010000) and r0.z, r0.z, l(0x3f800000) mad r1.xyz, r0.zzzz, r2.xyzx, r1.xyzx mov o2.xyz, r1.xyzx add r0.z, cb0[10].y, -cb0[14].x div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z mul_sat r0.x, r0.z, r0.x mad r0.z, r0.x, l(-2.000000), l(3.000000) mul r0.x, r0.x, r0.x mad r0.x, -r0.z, r0.x, l(1.000000) log r0.x, r0.x mul r0.x, r0.x, cb0[14].y exp r0.x, r0.x add_sat r0.z, r0.x, -cb0[13].x add r0.w, -cb0[13].x, l(1.000000) div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w mul r0.z, r0.w, r0.z mul r2.y, r0.z, cb0[13].y add_sat r0.zw, r0.xxxx, -cb0[11].yyyw add r3.xy, -cb0[11].ywyy, l(1.000000, 1.000000, 0.000000, 0.000000) div r3.xy, l(1.000000, 1.000000, 1.000000, 1.000000), r3.xyxx mul r0.zw, r0.zzzw, r3.xxxy mul r2.x, r0.z, cb0[11].z mul r2.z, r0.w, cb0[12].x mul o3.xyz, r2.xyzx, cb0[11].xxxx add r0.zw, -cb0[12].yyyz, cb0[12].wwwy mad r0.y, r0.y, r0.w, cb0[12].z mov_sat r0.z, r0.z mad r0.x, r0.x, r0.z, r0.y log r0.x, r0.x mul r0.x, r0.x, cb0[13].w exp r0.x, r0.x add r0.y, v5.x, l(1.000000) mul r0.x, r0.y, r0.x mul r0.xy, r0.xxxx, v2.zwzz mad r0.xzw, cb0[4].xxyz, r0.xxxx, r1.xxyz mad r0.xyz, cb0[5].xyzx, r0.yyyy, r0.xzwx mov o4.xyz, r0.xyzx mov o5.xy, v2.xyxx mul r1.xyzw, r0.yyyy, cb0[1].xyzw mad r1.xyzw, r0.xxxx, cb0[0].xyzw, r1.xyzw mad r0.xyzw, r0.zzzz, cb0[2].xyzw, r1.xyzw add o6.xyzw, r0.xyzw, cb0[3].xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] The shaders typically come in two halves, with the bottom half beginning with the following and being a reddish colour in this example: [code]/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // // Input signature: //[/code] We are only interested in the top half. At the top, add // then describe what the issue is like this: [code]//StarField - wrong depth too shallow (or 2D) cbuffer cb0 : register(b0) { float4 cb0[15]; } cbuffer cb1 : register(b1) { float4 cb1[2]; } [/code] Near the top you should see lines that look like this (might be longer or smaller): [code] void main( float4 v0 : POSITION0, float4 v1 : POSITION1, float4 v2 : TEXCOORD0, float4 v3 : TEXCOORD1, float4 v4 : TEXCOORD2, float4 v5 : TEXCOORD3, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float3 o2 : TEXCOORD2, out float3 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float2 o5 : TEXCOORD5, out float4 o6 : SV_Position0)[/code] We are interested in the bit that looks like this (it could be anywhere in that abovementioned block): [code] out float4 o6 : SV_Position0)[/code] We need the number that follows the letter o which is 6 in the example above. Scroll the bottom of the first chunk of code where, near the bottom, you should see a chunk like this: [code] r1.xyzw = cb0[1].xyzw * r0.yyyy; r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw; r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw; o6.xyzw = cb0[3].xyzw + r0.xyzw; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler[/code] We are only interested where it says [b]return;[/b] Just above [b]return;[/b] write something to describe what your fix. And add the lines as per the example below. The number following the letter o must be the same as the number mentioned above. [code] r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw; r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw; o6.xyzw = cb0[3].xyzw + r0.xyzw; // Move StarField to infinity. float4 st = StereoParams.Load(0); float separation = st.x; float convergence = st.y; o6.x += separation; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //[/code] [list] [.]CTRL + S to save[/.] [.]ALT TAB into the game[/.] [.]F10 TO RELOAD SHADER. You should hear a high pitch beep and your shader should be deeper! [i]A low pitch beep means you have gone wrong. Compare the code above with yours.[/i][/.] [/list] IF THE DEPTH HASN'T CHANGED OR STILL ISN'T DEEP ENOUGH OR NOW TOO DEEP Try the following. [code] r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw; r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw; o6.xyzw = cb0[3].xyzw + r0.xyzw; // Move StarField to infinity. float4 st = StereoParams.Load(0); float separation = st.x; float convergence = st.y; o6.x += separation * 1.065; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //[/code] That number after the * (in the example: 1.065) will need to be tweaked. Higher numbers mean deeper and [i]vice-versa[/i]. You might need to tweak by tiny increments of 0.005 or super huge increments of 100000s. You might even need to use negative numbers! Start with 1s and then 10s then 100s then 10000s. ALT TAB then F10 to test. Rinse repeat until done! Now repeat for the other shaders you wish to tweak. AWESOME!
THREAD #3

2b – FIX [To correct static objects' depth if rendered wrong e.g. skyboxes / planets ]

Time taken when you know what you are doing: less than 5 minutes! :D

  • LOOK AT DODGY SHADER

  • PRESS NUMPAD 5 to go forward through active shaders (NumKey 4 goes backwards)

  • FIND DODGY SHADER: It will take around half a minute to cycle through all the shaders! Target shader will either standout very clearly or vanish

  • HIT NUMKEY 6 to store shader. You should hear a beep.

  • CYCLE BACK A COUPLE OF SHADERS so your dodgy one is normal

  • ALT TAB out of the game.

  • OPEN ShaderFixes FOLDER found where you extracted 3DMigoto; it should contain a file with a name like 296f9633b3816357-vs_replace

  • OPEN FILE in NOTEPAD++



These shader files can range in length. The following is an example of a middling one:

cbuffer cb0 : register(b0)
{
float4 cb0[15];
}

cbuffer cb1 : register(b1)
{
float4 cb1[2];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : POSITION0,
float4 v1 : POSITION1,
float4 v2 : TEXCOORD0,
float4 v3 : TEXCOORD1,
float4 v4 : TEXCOORD2,
float4 v5 : TEXCOORD3,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float3 o2 : TEXCOORD2,
out float3 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float2 o5 : TEXCOORD5,
out float4 o6 : SV_Position0)
{
float4 r0,r1,r2,r3;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = 1.000000000e+000 + -cb0[9].w;
r0.x = cb0[10].w * r0.x;
r0.y = -1.000000000e+000 + cb0[9].w;
r0.xy = cb0[10].zx * r0.xy;
r0.z = cb0[9].w >= 1.000000000e+000;
r0.x = r0.z ? -r0.y : r0.x;
r0.x = v0.w + r0.x;
r0.y = -cb0[10].w + r0.x;
r0.z = cb0[10].y + -cb0[10].w;
r0.y = saturate(r0.y / r0.z);
r0.y = log2(r0.y);
r0.y = cb0[13].z * r0.y;
r0.y = exp2(r0.y);
r0.y = min(r0.y, 1.000000000e+000);
o0.w = r0.y;
o0.xyz = v1.xyz;
o1.xyzw = v5.xyzw;
r0.z = r0.x >= cb0[10].w;
r0.x = -cb0[14].x + r0.x;
r0.z = r0.z ? 1.000000 : 0;
r1.xyz = float3(1.000000e+001,1.000000e+001,1.000000e+001) * cb0[6].xyz;
r2.xyz = v0.xyz * cb1[0].xyz + cb1[1].xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.x = dot(cb0[7].xyz, r2.xyz);
r3.y = dot(cb0[8].xyz, r2.xyz);
r3.z = dot(cb0[9].xyz, r2.xyz);
r1.xyz = -r3.xyz * float3(1.000000e+001,1.000000e+001,1.000000e+001) + -r1.xyz;
r2.xyz = float3(1.000000e+001,1.000000e+001,1.000000e+001) * r3.xyz;
r1.xyz = r0.zzz * r1.xyz + r2.xyz;
r2.xyz = -cb0[6].xyz * float3(1.000000e+001,1.000000e+001,1.000000e+001) + -r1.xyz;
r0.z = v4.x >= 9.999999776e-003;
r0.z = r0.z ? 1.000000 : 0;
r1.xyz = r0.zzz * r2.xyz + r1.xyz;
o2.xyz = r1.xyz;
r0.z = -cb0[14].x + cb0[10].y;
r0.z = 1.000000e+000 / r0.z;
r0.x = saturate(r0.x * r0.z);
r0.z = r0.x * -2.000000000e+000 + 3.000000000e+000;
r0.x = r0.x * r0.x;
r0.x = -r0.z * r0.x + 1.000000000e+000;
r0.x = log2(r0.x);
r0.x = cb0[14].y * r0.x;
r0.x = exp2(r0.x);
r0.z = saturate(-cb0[13].x + r0.x);
r0.w = 1.000000000e+000 + -cb0[13].x;
r0.w = 1.000000e+000 / r0.w;
r0.z = r0.z * r0.w;
r2.y = cb0[13].y * r0.z;
r0.zw = saturate(-cb0[11].yw + r0.xx);
r3.xy = float2(1.000000e+000,1.000000e+000) + -cb0[11].yw;
r3.xy = float2(1.000000e+000,1.000000e+000) / r3.xy;
r0.zw = r3.xy * r0.zw;
r2.x = cb0[11].z * r0.z;
r2.z = cb0[12].x * r0.w;
o3.xyz = cb0[11].xxx * r2.xyz;
r0.zw = cb0[12].wy + -cb0[12].yz;
r0.y = r0.y * r0.w + cb0[12].z;
r0.z = saturate(r0.z);
r0.x = r0.x * r0.z + r0.y;
r0.x = log2(r0.x);
r0.x = cb0[13].w * r0.x;
r0.x = exp2(r0.x);
r0.y = 1.000000000e+000 + v5.x;
r0.x = r0.x * r0.y;
r0.xy = v2.zw * r0.xx;
r0.xzw = cb0[4].xyz * r0.xxx + r1.xyz;
r0.xyz = cb0[5].xyz * r0.yyy + r0.xzw;
o4.xyz = r0.xyz;
o5.xy = v2.xy;
r1.xyzw = cb0[1].xyzw * r0.yyyy;
r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw;
r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw;
o6.xyzw = cb0[3].xyzw + r0.xyzw;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyzw
// POSITION 1 xyzw 1 NONE float xyz
// TEXCOORD 0 xyzw 2 NONE float xyzw
// TEXCOORD 1 xyzw 3 NONE float
// TEXCOORD 2 xyzw 4 NONE float x
// TEXCOORD 3 xyzw 5 NONE float xyzw
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// TEXCOORD 0 xyzw 0 NONE float xyzw
// TEXCOORD 1 xyzw 1 NONE float xyzw
// TEXCOORD 2 xyz 2 NONE float xyz
// TEXCOORD 3 xyz 3 NONE float xyz
// TEXCOORD 4 xyz 4 NONE float xyz
// TEXCOORD 5 xy 5 NONE float xy
// SV_Position 0 xyzw 6 POS float xyzw
//
vs_4_0
dcl_constantbuffer cb1[2], immediateIndexed
dcl_constantbuffer cb0[15], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xyz
dcl_input v2.xyzw
dcl_input v4.x
dcl_input v5.xyzw
dcl_output o0.xyzw
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_output o3.xyz
dcl_output o4.xyz
dcl_output o5.xy
dcl_output_siv o6.xyzw, position
dcl_temps 4
add r0.x, -cb0[9].w, l(1.000000)
mul r0.x, r0.x, cb0[10].w
add r0.y, cb0[9].w, l(-1.000000)
mul r0.xy, r0.xyxx, cb0[10].zxzz
ge r0.z, cb0[9].w, l(1.000000)
movc r0.x, r0.z, -r0.y, r0.x
add r0.x, r0.x, v0.w
add r0.y, r0.x, -cb0[10].w
add r0.z, -cb0[10].w, cb0[10].y
div_sat r0.y, r0.y, r0.z
log r0.y, r0.y
mul r0.y, r0.y, cb0[13].z
exp r0.y, r0.y
min r0.y, r0.y, l(1.000000)
mov o0.w, r0.y
mov o0.xyz, v1.xyzx
mov o1.xyzw, v5.xyzw
ge r0.z, r0.x, cb0[10].w
add r0.x, r0.x, -cb0[14].x
and r0.z, r0.z, l(0x3f800000)
mul r1.xyz, cb0[6].xyzx, l(10.000000, 10.000000, 10.000000, 0.000000)
mad r2.xyz, v0.xyzx, cb1[0].xyzx, cb1[1].xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
dp3 r3.x, cb0[7].xyzx, r2.xyzx
dp3 r3.y, cb0[8].xyzx, r2.xyzx
dp3 r3.z, cb0[9].xyzx, r2.xyzx
mad r1.xyz, -r3.xyzx, l(10.000000, 10.000000, 10.000000, 0.000000), -r1.xyzx
mul r2.xyz, r3.xyzx, l(10.000000, 10.000000, 10.000000, 0.000000)
mad r1.xyz, r0.zzzz, r1.xyzx, r2.xyzx
mad r2.xyz, -cb0[6].xyzx, l(10.000000, 10.000000, 10.000000, 0.000000), -r1.xyzx
ge r0.z, v4.x, l(0.010000)
and r0.z, r0.z, l(0x3f800000)
mad r1.xyz, r0.zzzz, r2.xyzx, r1.xyzx
mov o2.xyz, r1.xyzx
add r0.z, cb0[10].y, -cb0[14].x
div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z
mul_sat r0.x, r0.z, r0.x
mad r0.z, r0.x, l(-2.000000), l(3.000000)
mul r0.x, r0.x, r0.x
mad r0.x, -r0.z, r0.x, l(1.000000)
log r0.x, r0.x
mul r0.x, r0.x, cb0[14].y
exp r0.x, r0.x
add_sat r0.z, r0.x, -cb0[13].x
add r0.w, -cb0[13].x, l(1.000000)
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mul r0.z, r0.w, r0.z
mul r2.y, r0.z, cb0[13].y
add_sat r0.zw, r0.xxxx, -cb0[11].yyyw
add r3.xy, -cb0[11].ywyy, l(1.000000, 1.000000, 0.000000, 0.000000)
div r3.xy, l(1.000000, 1.000000, 1.000000, 1.000000), r3.xyxx
mul r0.zw, r0.zzzw, r3.xxxy
mul r2.x, r0.z, cb0[11].z
mul r2.z, r0.w, cb0[12].x
mul o3.xyz, r2.xyzx, cb0[11].xxxx
add r0.zw, -cb0[12].yyyz, cb0[12].wwwy
mad r0.y, r0.y, r0.w, cb0[12].z
mov_sat r0.z, r0.z
mad r0.x, r0.x, r0.z, r0.y
log r0.x, r0.x
mul r0.x, r0.x, cb0[13].w
exp r0.x, r0.x
add r0.y, v5.x, l(1.000000)
mul r0.x, r0.y, r0.x
mul r0.xy, r0.xxxx, v2.zwzz
mad r0.xzw, cb0[4].xxyz, r0.xxxx, r1.xxyz
mad r0.xyz, cb0[5].xyzx, r0.yyyy, r0.xzwx
mov o4.xyz, r0.xyzx
mov o5.xy, v2.xyxx
mul r1.xyzw, r0.yyyy, cb0[1].xyzw
mad r1.xyzw, r0.xxxx, cb0[0].xyzw, r1.xyzw
mad r0.xyzw, r0.zzzz, cb0[2].xyzw, r1.xyzw
add o6.xyzw, r0.xyzw, cb0[3].xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


The shaders typically come in two halves, with the bottom half beginning with the following and being a reddish colour in this example:

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//
// Input signature:
//

We are only interested in the top half.

At the top, add // then describe what the issue is like this:

//StarField - wrong depth too shallow (or 2D)

cbuffer cb0 : register(b0)
{
float4 cb0[15];
}

cbuffer cb1 : register(b1)
{
float4 cb1[2];
}


Near the top you should see lines that look like this (might be longer or smaller):
void main(
float4 v0 : POSITION0,
float4 v1 : POSITION1,
float4 v2 : TEXCOORD0,
float4 v3 : TEXCOORD1,
float4 v4 : TEXCOORD2,
float4 v5 : TEXCOORD3,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float3 o2 : TEXCOORD2,
out float3 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float2 o5 : TEXCOORD5,
out float4 o6 : SV_Position0)


We are interested in the bit that looks like this (it could be anywhere in that abovementioned block):
out float4 o6 : SV_Position0)

We need the number that follows the letter o which is 6 in the example above.

Scroll the bottom of the first chunk of code where, near the bottom, you should see a chunk like this:
r1.xyzw = cb0[1].xyzw * r0.yyyy;
r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw;
r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw;
o6.xyzw = cb0[3].xyzw + r0.xyzw;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler


We are only interested where it says return;

Just above return; write something to describe what your fix. And add the lines as per the example below. The number following the letter o must be the same as the number mentioned above.
r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw;
r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw;
o6.xyzw = cb0[3].xyzw + r0.xyzw;

// Move StarField to infinity.
float4 st = StereoParams.Load(0);
float separation = st.x; float convergence = st.y;
o6.x += separation;

return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//


  • CTRL + S to save

  • ALT TAB into the game

  • F10 TO RELOAD SHADER. You should hear a high pitch beep and your shader should be deeper! A low pitch beep means you have gone wrong. Compare the code above with yours.



IF THE DEPTH HASN'T CHANGED OR STILL ISN'T DEEP ENOUGH OR NOW TOO DEEP
Try the following.
r1.xyzw = r0.xxxx * cb0[0].xyzw + r1.xyzw;
r0.xyzw = r0.zzzz * cb0[2].xyzw + r1.xyzw;
o6.xyzw = cb0[3].xyzw + r0.xyzw;

// Move StarField to infinity.
float4 st = StereoParams.Load(0);
float separation = st.x; float convergence = st.y;
o6.x += separation * 1.065;

return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//


That number after the * (in the example: 1.065) will need to be tweaked. Higher numbers mean deeper and vice-versa. You might need to tweak by tiny increments of 0.005 or super huge increments of 100000s. You might even need to use negative numbers! Start with 1s and then 10s then 100s then 10000s. ALT TAB then F10 to test.


Rinse repeat until done!


Now repeat for the other shaders you wish to tweak.

AWESOME!

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#3
Posted 11/14/2015 10:48 AM   
Great stuff andysonofbob!! Also there is another way (easier) to disable shaders. In d3dx.ini file add this line in the ShaderOverride section: [code][ShaderOverride1] Hash=22d0cc9ef81dc3b2 Handling=skip[/code] Where the "22d0cc9ef81dc3b2" is shader you want to disable (VS or PS). For disabling effect is better to disable PS, normally VS disable more stuff that only one effect. And if you add more that one, change the number "1" in the [ShaderOverride1], for 2, 3, 4...... Also you should put this image in the front....jejeje [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67042/[/img]
Great stuff andysonofbob!!

Also there is another way (easier) to disable shaders. In d3dx.ini file add this line in the ShaderOverride section:

[ShaderOverride1]
Hash=22d0cc9ef81dc3b2
Handling=skip


Where the "22d0cc9ef81dc3b2" is shader you want to disable (VS or PS). For disabling effect is better to disable PS, normally VS disable more stuff that only one effect.

And if you add more that one, change the number "1" in the [ShaderOverride1], for 2, 3, 4......


Also you should put this image in the front....jejeje
Image
Attachments

Anyone Can Fix.jpg

MY WEB

Helix Mod - Making 3D Better

My 3D Screenshot Gallery

Like my fixes? you can donate to Paypal: dhr.donation@gmail.com

#4
Posted 11/14/2015 12:09 PM   
Great guide Andy! Love the image too, DHR.
Great guide Andy! Love the image too, DHR.

#5
Posted 11/14/2015 03:40 PM   
Awesome! Thanks mate. Glad that tip That is really helpful!
Awesome!

Thanks mate. Glad that tip

That is really helpful!

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#6
Posted 11/14/2015 04:24 PM   
Excellent, just what I was looking for a few days ago! ... managed to figure out the d3dx.ini edit method anyway and there is a lot you can do with just that once you have the hash # of the offending shader (once you mark a shader using the num pad keys it will appear in the shaderfixes folder with a name like 296f9633b3816357-vs_replace.txt and the part before the first dash is the hash to use in the d3dx.ini file. Just look for this section below and replace the Hash= value with your id'd hash and remove the ";" from the lines you want to activate as described by the comments including the [ShaderOverride1] and Hash= lines [code];------------------------------------------------------------------------------------------------------ ; Shader manipulations without patches + shader filtering. ;------------------------------------------------------------------------------------------------------ ;[ShaderOverride1] ;Hash=6d4e116b42639689 ; Custom stereo separation value while rendering objects using this shader. ;Separation=0 ; Custom stereo convergence value while rendering objects using this ; shader (e.g. convergence=0 will move an object to infinity). ;Convergence=0 ; don't draw anything using this shader. ;Handling=skip ; advanced option: use this to override only if this shader is used rendering the given index buffer. ;IndexBufferFilter=6d4e116b42639689 ; Use replaced shader only when there is no active depth buffer (for UI filtering) ;depth_filter = depth_inactive ; Use replaced shader only when there *IS* an active depth buffer (for UI filtering) ;depth_filter = depth_active ; Only use replaced shader when it is used in conjunction with a specific shader ; (e.g. to adjust a vertex shader ONLY when it is used with a specific pixel shader) ;partner=f838b144b658d062 ; Assignes a dummy render target to o0. Use to fix one-eye rendering issues in ; shaders that only write to a depth target: ;fake_o0=1 ; Override a value from [Constants] when this shader is used: ;x=2.0 ; Pass the dimensions of the active render target and resolution (obtained with ; get_resolution_from) into the shader: ;x1=rt_width ;y1=rt_height ;z1=res_width ;w1=res_height ; Use t0 from active pixel shader for texture filtering. Will be 0 if no ; [TextureOverride*] section exists for the texture or 1 if one does. For advanced ; filtering, set a value for filter_index in the [TextureOverride] section. ;x2=ps-t0[/code] If you are doing more than one you can just add the active lines for each like: [code];remove cloud reflections effect [ShaderOverride1] Hash=6d4e116b42639689 Handling=skip ; Move horizon effect to infinity [ShaderOverride2] Hash=c6e4f19a1f30a71e Convergence=0[/code] Big thanks again to everyone who worked hard to get it this simple for the rest of us to do some basic fixes!
Excellent, just what I was looking for a few days ago! ... managed to figure out the d3dx.ini edit method anyway and there is a lot you can do with just that once you have the hash # of the offending shader (once you mark a shader using the num pad keys it will appear in the shaderfixes folder with a name like 296f9633b3816357-vs_replace.txt and the part before the first dash is the hash to use in the d3dx.ini file. Just look for this section below and replace the Hash= value with your id'd hash and remove the ";" from the lines you want to activate as described by the comments including the [ShaderOverride1] and Hash= lines

;------------------------------------------------------------------------------------------------------
; Shader manipulations without patches + shader filtering.
;------------------------------------------------------------------------------------------------------
;[ShaderOverride1]
;Hash=6d4e116b42639689
; Custom stereo separation value while rendering objects using this shader.
;Separation=0
; Custom stereo convergence value while rendering objects using this
; shader (e.g. convergence=0 will move an object to infinity).
;Convergence=0
; don't draw anything using this shader.
;Handling=skip
; advanced option: use this to override only if this shader is used rendering the given index buffer.
;IndexBufferFilter=6d4e116b42639689
; Use replaced shader only when there is no active depth buffer (for UI filtering)
;depth_filter = depth_inactive
; Use replaced shader only when there *IS* an active depth buffer (for UI filtering)
;depth_filter = depth_active
; Only use replaced shader when it is used in conjunction with a specific shader
; (e.g. to adjust a vertex shader ONLY when it is used with a specific pixel shader)
;partner=f838b144b658d062
; Assignes a dummy render target to o0. Use to fix one-eye rendering issues in
; shaders that only write to a depth target:
;fake_o0=1
; Override a value from [Constants] when this shader is used:
;x=2.0
; Pass the dimensions of the active render target and resolution (obtained with
; get_resolution_from) into the shader:
;x1=rt_width
;y1=rt_height
;z1=res_width
;w1=res_height
; Use t0 from active pixel shader for texture filtering. Will be 0 if no
; [TextureOverride*] section exists for the texture or 1 if one does. For advanced
; filtering, set a value for filter_index in the [TextureOverride] section.
;x2=ps-t0


If you are doing more than one you can just add the active lines for each like:

;remove cloud reflections effect
[ShaderOverride1]
Hash=6d4e116b42639689
Handling=skip


; Move horizon effect to infinity
[ShaderOverride2]
Hash=c6e4f19a1f30a71e
Convergence=0


Big thanks again to everyone who worked hard to get it this simple for the rest of us to do some basic fixes!

Core System Specs: CPU: i7 3960k @ 4.5, Rampage IV Extreme MB, PSU: Ultra X4 1200w, GPU: 2x GTX 980ti sli, 2x OCZ Vertex 3 240 SSD in raid 0 system drive, 2tb WD green storage, 16gb Ram, Win 7 64 & Win 10 dual boot. 3X Planar SA2311w monitors. 3x Acer 5360 projectors + immersive display pro blending, DK2

#7
Posted 11/14/2015 05:22 PM   
[quote="someskunkfunk"][code]; Move horizon effect to infinity [ShaderOverride2] Hash=c6e4f19a1f30a71e Convergence=0[/code] [/quote]I'm the one who added that feature to 3DMigoto to help pirateguybrush with the skybox in DG2, and I completely forgot about it :faceplam: Thanks for bringing it up - if it works (which isn't a sure thing unfortunately) it is the simplest way to fix a skybox.
someskunkfunk said:
; Move horizon effect to infinity
[ShaderOverride2]
Hash=c6e4f19a1f30a71e
Convergence=0

I'm the one who added that feature to 3DMigoto to help pirateguybrush with the skybox in DG2, and I completely forgot about it :faceplam:

Thanks for bringing it up - if it works (which isn't a sure thing unfortunately) it is the simplest way to fix a skybox.

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

#8
Posted 11/15/2015 02:49 AM   
Added to the guide list, thanks
Added to the guide list, thanks

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

#9
Posted 11/15/2015 02:54 AM   
great info, easy to follow but how do you go about fixing things that are not static objects like shadows?
great info, easy to follow but how do you go about fixing things that are not static objects like shadows?

Acer H5360 / BenQ XL2420T + 3D Vision 2 Kit - EVGA GTX 980TI 6GB - i7-3930K@4.0GHz - DX79SI- 16GB RAM@2133 - Win10x64 Home - HTC VIVE

#10
Posted 11/15/2015 01:26 PM   
@DarkStarSword will the hash thingy in the d3dx.ini file work on the older 3DMigoto specifically 1.0.1? I am unable to try atm. Thanks!
@DarkStarSword will the hash thingy in the d3dx.ini file work on the older 3DMigoto specifically 1.0.1? I am unable to try atm.

Thanks!

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#11
Posted 11/15/2015 07:42 PM   
The most important question seems to be how to align shadows with the overall plane, they mostly look to be rendered at some weird angle. Are there some magic formulas one might try?
The most important question seems to be how to align shadows with the overall plane, they mostly look to be rendered at some weird angle. Are there some magic formulas one might try?

Acer H5360 / BenQ XL2420T + 3D Vision 2 Kit - EVGA GTX 980TI 6GB - i7-3930K@4.0GHz - DX79SI- 16GB RAM@2133 - Win10x64 Home - HTC VIVE

#12
Posted 12/04/2015 10:54 PM   
Too hard for me ... sorry ... :-(
Too hard for me ... sorry ... :-(

#13
Posted 04/30/2018 06:00 PM   
Scroll To Top