ps.1.1 ;------------------------------------------------------------------------------ ; Sphere-lit particle pixel shader. ; ; The ParticleSphere lighting equation is: ; A + [[N dot |L - P|] * 0.5 + 0.5] * C * r / ||L - P|| ; ; where: ; A = ambient light color ; N = particle normal (stored in the texture) ; L = light position ; P = point on surface ; C = directional light color ; r = directional light intensity ; ; This shader takes as input: ; t0 = Normal map texture coordinates (N) ; t1 = Light vector Normalize(L - P) * 0.5 in range [0,1] ; v0 = Directional color (C * r / ||L - P||^2) * 0.5 ; t2 = Ambient light color (A) ; c0 = 0.5 ; ; and outputs [v1 + (sample(t0) dot t1) * 0.5f + 0.5f] ;------------------------------------------------------------------------------ tex t0 ; Get the 3-vector from the normal map texcoord t1 ; Interpret tcoord t1 as color data. texcoord t2 ; Ambient light color dp3 r1, t0_bx2, t1_bx2 ; r0 = sample(t0) dot t1 add r0, r1, c0 ; + 0.5 mul r1, v0, r0 ; scale the dot product by the dirlight's actual color add r0.rgb, r1, t2 ; add the ambient color in v1 mul r0.a, t0, v0 ; Alpha = normal map alpha * vertex alpha