aboutsummaryrefslogtreecommitdiff
path: root/mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-12-23 14:58:45 -0800
committerJoe Ludwig <[email protected]>2013-12-23 15:00:03 -0800
commit7309a5f13f63fdcc7b1e090f6c176113a9d95061 (patch)
treead65c7fbe46a3c70bdc0a1426e88247ce1b0d7f5 /mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh
parentMerge pull request #182 from ardneran/master (diff)
downloadsource-sdk-2013-7309a5f13f63fdcc7b1e090f6c176113a9d95061.tar.xz
source-sdk-2013-7309a5f13f63fdcc7b1e090f6c176113a9d95061.zip
Added many shader source files
This should include the latest version of every shader that was in the 2007 SDK. It also includes a smattering of debug shaders, both VR distortion shaders, and other assorted shaders that will hopefully be useful. None of these new files are included in the game shader DLL project. If you need to modify one of these shaders for use in your mod you will need to rename it so that you don't collide with the version of that shader that lives in stdshader_dx9.dll.
Diffstat (limited to 'mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh')
-rw-r--r--mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh66
1 files changed, 66 insertions, 0 deletions
diff --git a/mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh b/mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh
new file mode 100644
index 00000000..ba349187
--- /dev/null
+++ b/mp/src/materialsystem/stdshaders/LightmappedGeneric_BumpmappedEnvmap.psh
@@ -0,0 +1,66 @@
+; STATIC: "NORMALMAPALPHAENVMAPMASK" "0..1"
+ps.1.1
+
+;------------------------------------------------------------------------------
+; Environment mapping on a bumped surface
+; t0 - Normalmap
+; t3 - Cube environment map (*must* be a cube map!)
+;
+; c0 - color to multiply the results by
+; c1 - envmap contrast
+; c2 - envmap saturation
+; c3 - grey weights
+; c4 - fresnel amount
+; Input texture coords required here are a little wonky.
+; tc0.uv <- U,V into the normal map
+; tc1.uvw, tc2.uvw, tc3.uvw <- 3x3 matrix transform
+; from tangent space->env map space
+; tc1.q, tc2.q, tc3.q <- eye vector in env map space
+;------------------------------------------------------------------------------
+
+; Get the 3-vector from the normal map
+tex t0
+
+; Perform matrix multiply to get a local normal bump. Then
+; reflect the eye vector through the normal and sample from
+; a cubic environment map.
+texm3x3pad t1, t0_bx2
+texm3x3pad t2, t0_bx2
+texm3x3vspec t3, t0_bx2
+
+; FIXME FIXME - Need to do specialized versions of this with and without:
+; - constant color
+; - fresnel amount of exactly 0 or 1 or in between
+; - envmap contrast of 0, 1, or in between
+; - envmap saturation of 0, 1, or in between
+
+; r0 = constant color * result of bump into envmap
+mul r0.rgb, t3, c0
+
+; dot eye-vector with per-pixel normal from t0
+dp3_sat r1, v0_bx2, t0_bx2
+
+; run Fresnel approx. on it: R0 + (1-R0) (1-cos(q))^5 in alpha channel
+mul r1.rgb, r0, r0 ; color squared
++mul r0.a, 1-r1.a, 1-r1.a ; squared
+
+lrp r0.rgb, c1, r1, r0 ; blend between color and color * color
++mul r0.a, r0.a, r0.a ; quartic
+
+dp3 r1.rgb, r0, c3 ; color greyscaled
++mul r0.a, r0.a, 1-r1.a ; quintic
+
+; FIXME - these should be able to pair (I think), but don't on nvidia for some reason.
+; (I think) cannot pair due to use of >2 constants in single stage
+lrp r0.rgb, c2, r0, r1 ; blend between color and greyscale
+mad r0.a, r0.a, c6.a, c4.a ; Take Fresnel R(0) into consideration
+
+mul r0.rgb, r0, r0.a ; multiply output color by result of fresnel calc
+
+#if NORMALMAPALPHAENVMAPMASK
++mul r0.a, c0.a, t0.a ; Fade amount * alpha from the texture
+#else
++mov r0.a, c0.a ; Just use the fade amount
+#endif
+
+