summaryrefslogtreecommitdiff
path: root/shaders/humus-dynamicbranching/10.shader_test
diff options
context:
space:
mode:
Diffstat (limited to 'shaders/humus-dynamicbranching/10.shader_test')
-rw-r--r--shaders/humus-dynamicbranching/10.shader_test169
1 files changed, 169 insertions, 0 deletions
diff --git a/shaders/humus-dynamicbranching/10.shader_test b/shaders/humus-dynamicbranching/10.shader_test
new file mode 100644
index 0000000..968b9f1
--- /dev/null
+++ b/shaders/humus-dynamicbranching/10.shader_test
@@ -0,0 +1,169 @@
+[require]
+GLSL >= 1.10
+
+[fragment shader]
+#version 130
+#define saturate(x) clamp(x,0.0,1.0)
+#define lerp mix
+#define LIGHT_COUNT 3
+#line 43
+uniform sampler2D Base;
+uniform sampler2D Bump;
+uniform samplerCube ShadowMap;
+
+uniform vec3 lightColor[LIGHT_COUNT];
+uniform vec2 plxCoeffs;
+
+uniform bool hasParallax;
+
+varying vec3 lVec[LIGHT_COUNT];
+varying vec2 texCoord;
+varying vec3 vVec;
+#ifdef SHADOWS
+varying vec3 shadowVec[LIGHT_COUNT];
+#endif
+
+void main(){
+// float atten[LIGHT_COUNT];
+ vec3 atten;
+ for (int i = 0; i < LIGHT_COUNT; i++){
+ atten[i] = 1.0 - dot(lVec[i], lVec[i]);
+ }
+ atten = max(atten, 0.0);
+
+
+ vec3 viewVec = normalize(vVec);
+
+ vec2 plxTexCoord = texCoord;
+ if (hasParallax){
+ float height = texture2D(Bump, texCoord).w;
+ float offset = height * plxCoeffs.x + plxCoeffs.y;
+ plxTexCoord += offset * viewVec.xy;
+ }
+
+ vec3 base = texture2D(Base, plxTexCoord).rgb;
+ vec3 lighting = 0.1 * base;
+
+#ifdef BRANCHING
+ if (dot(atten, atten) > 0.0)
+#endif
+ {
+
+ vec3 bump = texture2D(Bump, plxTexCoord).xyz * 2.0 - 1.0;
+ bump = normalize(bump);
+ vec3 reflVec = reflect(-viewVec, bump);
+
+ for (int i = 0; i < LIGHT_COUNT; i++){
+#ifndef BRANCHING
+ atten[i] *= float(lVec[i].z > 0.0);
+#else
+ if (atten[i] > 0.0)
+ if (lVec[i].z > 0.0)
+#endif
+ {
+
+#ifdef SHADOWS
+# ifndef BRANCHING
+ atten[i] *= float(length(shadowVec[i]) < textureCube(ShadowMap, shadowVec[i])[i]);
+# else
+ if (length(shadowVec[i]) < textureCube(ShadowMap, shadowVec[i])[i])
+# endif
+#endif
+ {
+ vec3 lightVec = normalize(lVec[i]);
+
+ float diffuse = saturate(dot(lightVec, bump));
+ float specular = pow(saturate(dot(reflVec, lightVec)), 16.0);
+
+ lighting += atten[i] * lightColor[i] * (diffuse * base + 0.6 * specular);
+ }
+ }
+ }
+ }
+
+ gl_FragColor.rgb = lighting;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[vertex shader]
+#version 130
+#define saturate(x) clamp(x,0.0,1.0)
+#define lerp mix
+#define LIGHT_COUNT 3
+#line 2
+uniform vec3 camPos;
+uniform vec3 lightPos[LIGHT_COUNT];
+uniform float invRadius[LIGHT_COUNT];
+
+attribute vec2 textureCoord;
+attribute vec3 tangent;
+attribute vec3 binormal;
+attribute vec3 normal;
+
+varying vec3 lVec[LIGHT_COUNT];
+varying vec2 texCoord;
+varying vec3 vVec;
+#ifdef SHADOWS
+varying vec3 shadowVec[LIGHT_COUNT];
+#endif
+
+void main(){
+ gl_Position = ftransform();
+
+ texCoord = textureCoord;
+
+ for (int i = 0; i < LIGHT_COUNT; i++){
+ vec3 lightVec = invRadius[i] * (lightPos[i] - gl_Vertex.xyz);
+
+#ifdef SHADOWS
+ shadowVec[i] = -lightVec;
+#endif
+ lVec[i].x = dot(lightVec, tangent);
+ lVec[i].y = dot(lightVec, binormal);
+ lVec[i].z = dot(lightVec, normal);
+ }
+
+ vec3 viewVec = camPos - gl_Vertex.xyz;
+ vVec.x = dot(viewVec, tangent);
+ vVec.y = dot(viewVec, binormal);
+ vVec.z = dot(viewVec, normal);
+}
+
+
+