User:DJ-RK
Contents
Lesson 0
Hopefully the beginning of a productive and helpful undertaking. Wish me luck!
Lesson 1
Took a while to get the shaders to dump. Thankfully reading the forum thread helped me find the answer to simply launch the .exe from the folder. Might be a good idea to mention this as a possible hiccup in the lesson!
Here is the pixel shader that I dumped, which is for the bloom effect around certain lights.
// // Generated by Microsoft (R) HLSL Shader Compiler 9.27.952.3022 // // Parameters: // // float4 AmbientColorAndSkyFactor; // float4 MinZ_MaxZRatio; // sampler2D Texture2D_0; // sampler2D Texture2D_1; // sampler2D Texture2D_2; // sampler2D Texture2D_3; // float4 UniformPixelVector_0; // float4 UniformPixelVector_1; // float4 UniformPixelVector_2; // // // Registers: // // Name Reg Size // ------------------------ ----- ---- // UniformPixelVector_0 c0 1 // MinZ_MaxZRatio c2 1 // UniformPixelVector_1 c4 1 // UniformPixelVector_2 c5 1 // AmbientColorAndSkyFactor c6 1 // Texture2D_0 s0 1 // Texture2D_1 s1 1 // Texture2D_2 s2 1 // Texture2D_3 s3 1 // ps_3_0 def c1, 2, -1, 0.200000003, 9.99999997e-007 def c3, 0.200000003, 0.100000001, 0, 3 def c7, 7.5, 3, 0.375, 1.5 def c8, 5, 2, 0.25, 0 def c9, 0.816496611, 0.577350259, 0, 0.600000024 def c10, -0.707106769, -0.408248305, 0.577350259, 0.707106769 dcl_texcoord2_pp v0.xyz dcl_texcoord3_pp v1.xyz dcl_texcoord5 v2.w dcl_texcoord6 v3.xyz dcl_texcoord v4.xy dcl_2d s0 dcl_2d s1 dcl_2d s2 dcl_2d s3 nrm r0.xyz, v3 texld r1, v4, s0 mad_pp r1.xyz, r1, c1.x, c1.y nrm_pp r2.xyz, r1 dp3 r0.w, r2, r0 mul r1.xyz, r0.w, r2 mad r0.xyz, r1, c1.x, -r0 dp2add_sat_pp r1.x, r0.yzzw, c9, c9.z dp3_sat_pp r1.y, r0, c10 dp3_sat_pp r1.z, r0.yzxw, c10.yzww max r0.xyz, r1, c1.w mul r1.xyz, r0, r0 mul r1.xyz, r1, r1 mul r1.xyz, r1, r1 mul r1.xyz, r1, r1 mul r1.xyz, r1, r1 mul_pp r0.xyz, r0, r1 dp3_pp r0.x, v1, r0 mov r0.y, c3.y add r0.z, r0.y, c5.x cmp_sat r0.y, c5.x, r0.z, r0.y texld r1, v4, s1 mul r0.y, r0.y, r1.w mul r1.xyz, r1, c9.w mad r0.yzw, r0.y, c8.xxyz, -r1.xxyz mad r0.yzw, r1.w, r0, r1.xxyz mul r1.xyz, r0.yzww, r1 mul_pp r1.xyz, r1, v0 mul_pp r1.xyz, r1, c3.w mul_pp r1.xyz, r0.x, r1 dp2add_sat_pp r3.x, r2.yzzw, c9, c9.z dp3_sat_pp r3.y, r2, c10 dp3_sat_pp r3.z, r2.yzxw, c10.yzww mul_pp r2.xyz, r3, r3 max_pp r3.xyz, r2, c1.w dp3_pp r0.x, v1, r3 mul r2.xy, c3.w, v4 texld r2, r2, s3 mul r2.xyz, r2, c7.w mul r0.yzw, r0, r2.xxyz mov r2.yz, c1 add r2.xyw, -r2.y, -c0.xyzz mul_pp r0.yzw, r0, r2.xxyw mul_pp r2.xyw, r0.yzzw, v0.xyzz mad_pp r1.xyz, r2.xyww, r0.x, r1 mad r2.xy, v4, r2.z, c4 texld r2, r2, s2 add r0.x, r2.y, r2.y mul r0.x, r1.w, r0.x mul r2.xyz, r1.w, c3 mad r2.xyz, r0.x, c7, r2 mov r3.xyz, c0 mad_pp r2.xyz, c5.x, r2, r3 add_pp r1.xyz, r1, r2 mad_pp oC0.xyz, r0.yzww, c6, r1 rcp r0.x, v2.w mad_pp oC0.w, c2.x, r0.x, c2.y // approximately 63 instruction slots used (4 texture, 59 arithmetic)
Lesson 2
Disabling broken bloom effect. Easy enough to follow, but only understand about half of it. Hope more understanding will come.
Before:
After:
Lesson 3
Figured it out, despite the explanation behind certain things being extremely lacking/vague. Glad I have some basic programming knowledge to help me get this far, otherwise going off the lesson info alone I wouldn't have been able to do this.
From DX9Settings.ini
[General] // UseRenderedShaders=true is nearly always useful, because it trims the // list of shaders seen while hunting down to just those active in the // current scene. Disable this only if you get crashes during hunting. UseRenderedShaders=true // DumpAll will generate ASM text files for every shader seen by the game. // This is usually worth doing once, but not useful for every run. DumpAll=false // Constant registers that will arrive in Vertex and Pixel Shaders, as // c220. The constants below will be assigned, based on the key preset. DefVSConst1 = 220 DefPSConst1 = 220 // The PresetKeysList specifies which KEYs will be used. // Multiple keys lists are supported. PresetsKeysList = 1; // For this single key example, we only need one keylist, KEY1. This specifies // that the Numpad 0 keyboard key (Key=96) should act as a toggle. And toggle // between the two Presets of PRES1, PRES2. Which will change the Const1 being // passed to the shader code from 1.0 to 0.0 as floating point numbers. // Type=1 is toggle, Type=2 is momentary. [KEY1] Key = 110 Presets = 1;2; Type = 2 // Constants that will be sent to every shader through constant register c220. // The Const1 tells us that we'll need to use c220.x to compare against these // values. Const2 would be seen as c220.y. // 0x3f800000 is 1.0 in floating point hex, 0x00000000 is 0.0 in hex // UseByDef specifies which constant is the default starting value. [PRES1] Const1 = 0x3f800000 [PRES2] UseByDef=True Const1 = 0x00000000
From A977E84A.txt
// Annoying bloom on ball light // Generated by Microsoft (R) HLSL Shader Compiler 9.27.952.3022 // // Parameters: // // sampler2D Texture2D_0; // float UniformPixelScalar_7; // float4 UniformPixelVector_0; // float4 UniformPixelVector_3; // float4 UniformPixelVector_4; // float4 UniformPixelVector_5; // float4 UniformPixelVector_6; // // // Registers: // // Name Reg Size // -------------------- ----- ---- // UniformPixelVector_0 c0 1 // UniformPixelVector_3 c4 1 // UniformPixelVector_4 c5 1 // UniformPixelVector_5 c6 1 // UniformPixelVector_6 c7 1 // UniformPixelScalar_7 c8 1 // Texture2D_0 s0 1 // ps_3_0 def c1, 0.5, 1, -0.5, 0 def c2, 3, 0, 0, 0 //def c220, Const1, Const2, Const3, Const4 def c200, 0, 1, 0.0625, 0 // x=0 for comparison to Const1 dcl_texcoord v0.xy dcl_texcoord1 v1 dcl_texcoord2 v2.y dcl_texcoord4 v3.w dcl_2d s0 add r0.xy, c1.z, v0 mov r0.w, c1.w dp2add r1.x, c5, r0, r0.w dp2add r1.y, c6, r0, r0.w add r0.xy, r1, c1.x texld r0, r0, s0 mad_sat r0.y, v2.y, -c1.x, c1.y mul r0.yzw, r0.y, v1.xxyz mul r0.yzw, r0, v1.w mul_sat r0.xyz, r0.yzww, r0.x mul r1.xyz, r0, c4 mad r0.xyz, c4, -r0, r0 mad r0.xyz, c8.x, r0, r1 mul r0.xyz, r0, c4.w mul r0.xyz, r0, c7 mov r1.x, c2.x mad_pp r0.xyz, r0, r1.x, c0 mul_pp oC0.xyz, r0, v3.w mov oC0.w, c1.w // Disable game-breaking bloom effect // if Const1 = 0 disable effect, else leave it on mov r30.x, c220.x if_eq r30.x, c200.x mov oC0.xyzw, c200.wwww else mov oC0.xyzw, c200.yyww endif // approximately 21 instruction slots used (1 texture, 20 arithmetic)