User:DJ-RK

From Bo3b's School for Shaderhackers
Revision as of 16:54, 1 February 2015 by DJ-RK (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Lesson 0

Hopefully the beginning of a productive and helpful undertaking. Wish me luck!

TheBall02 50.jpg


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: RK - TheBall - Broken bloom on.jpg After: RK - TheBall - Broken bloom off.jpg

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)

RK - TheBall01 - L3 Const.jpg