You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
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 |
|
|
|
|
|
|