2013-12-19 19:32:50 +01:00

44 lines
1.4 KiB
NASM

// Pixel Shader for doing bump mapping with parallax plus diffuse and specular lighting by nfz
// uv TEXCOORD0
// lightDir TEXCOORD1
// eyeDir TEXCOORD2
// half TEXCOORD3
// lightDiffuse c0
// lightSpecular c1
// Parallax scale and bias c2
// normal/height map texunit 0 - height map in alpha channel
// diffuse texture texunit 1
ps.1.4
texld r0, t0 // get height
texcrd r2.xyz, t0 // get uv coordinates
texcrd r3.xyz, t2 // get eyedir vector
mad r0.xyz, r0.a, c2.x, c2.y // displacement = height * scale + bias
mad r2.xyz, r3, r0, r2 // newtexcoord = eyedir * displacement + uv
phase
texld r0, r2.xyz // get normal N using newtexcoord
texld r1, r2.xyz // get diffuse texture using newtexcoord
texcrd r4.xyz, t1 // get lightdir vector
texcrd r5.xyz, t3 // get half angle vector
dp3_sat r5.rgb, r0_bx2, r5 // N dot H - spec calc
dp3_sat r4.rgb, r0_bx2, r4 // N dot L - diffuse calc
+ mul r5.a, r5.r, r5.r
mul r0.rgb, r4, r1 // colour = diffusetex * N dot L
+ mul r5.a, r5.a, r5.a
mul r5.rgb, r5.a, r5.a
mul r5.rgb, r5, r5
mul r5.rgb, r5, r5
mul r5.rgb, r5, c1 // specular = (N dot H)^32 * specularlight
mad r0.rgb, r0, c0, r5 // colour = diffusetex * (N dot L)* diffuselight + specular
+ mov r0.a, c2.b