// 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