User:Bo3b

From Bo3b's School for Shaderhackers
Jump to: navigation, search

Lesson 0. Easy right?

TheBall04 50 - Copy.jpg


Lesson 1. Scary right?

This is first shader file, Pixel Shader of entire ball.

// 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
    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
mov oC0.xyzw, c1.wwww

// approximately 21 instruction slots used (1 texture, 20 arithmetic)
 
 

Lesson 2. Amazing right?

Done! First effect disabled.

Before: Before TheBall01 85 - Copy.jpg

After: After TheBall02 85 - Copy.jpg


Lesson 3. Interesting, right?

Works with toggle or with momentary style. Tried middle mouse button and right-ctrl key. Can't take snapshot with ctrl in use though.

Also worth noting that changing the color doesn't give us only the bloom as purple, it gives the whole box. That's because this is some sort of mask for the effect, not the actual output color.

[KEY1]
Key = 4
Presets = 1;2;
Type = 2
 
// Annoying bloom on ball light

//
...
    ps_3_0

//def c220, Const1, Const2, Const3, Const4
def c200, 0, 1, 0.0625, 0	// x=0 for comparison to Const1
def c201, 1, 0, 1, 1		// purple color as r,g,b,a

    def c1, 0.5, 1, -0.5, 0
    def c2, 3, 0, 0, 0
    dcl_texcoord v0.xy
    dcl_texcoord1 v1
...
    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
mov oC0.rgba, c201.rgba		// if it's active, make it purple
	
// 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
endif
 

PurpleRain.jpg


Test URL captcha: capped