aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core-data/Common/MatDefs/Light/GBuf.frag
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/core-data/Common/MatDefs/Light/GBuf.frag')
-rw-r--r--engine/src/core-data/Common/MatDefs/Light/GBuf.frag86
1 files changed, 86 insertions, 0 deletions
diff --git a/engine/src/core-data/Common/MatDefs/Light/GBuf.frag b/engine/src/core-data/Common/MatDefs/Light/GBuf.frag
new file mode 100644
index 0000000..3970624
--- /dev/null
+++ b/engine/src/core-data/Common/MatDefs/Light/GBuf.frag
@@ -0,0 +1,86 @@
+#import "Common/ShaderLib/Optics.glsllib"
+
+uniform float m_Shininess;
+
+varying vec2 texCoord;
+varying vec4 AmbientSum;
+varying vec4 DiffuseSum;
+varying vec4 SpecularSum;
+
+varying float vDepth;
+varying vec3 vNormal;
+
+#ifdef DIFFUSEMAP
+ uniform sampler2D m_DiffuseMap;
+#endif
+
+#ifdef SPECULARMAP
+ uniform sampler2D m_SpecularMap;
+#endif
+
+#ifdef PARALLAXMAP
+ uniform sampler2D m_ParallaxMap;
+#endif
+
+#ifdef NORMALMAP
+ uniform sampler2D m_NormalMap;
+ varying mat3 tbnMat;
+#endif
+
+vec2 encodeNormal(in vec3 n){
+ vec2 enc = normalize(n.xy) * (sqrt(-n.z*0.5+0.5));
+ enc = enc*vec2(0.5)+vec2(0.5);
+ return enc;
+}
+
+void main(){
+ vec2 newTexCoord = texCoord;
+ float height = 0.0;
+ #if defined(PARALLAXMAP) || defined(NORMALMAP_PARALLAX)
+ #ifdef PARALLAXMAP
+ height = texture2D(m_ParallaxMap, texCoord).r;
+ #else
+ height = texture2D(m_NormalMap, texCoord).a;
+ #endif
+ float heightScale = 0.05;
+ float heightBias = heightScale * -0.5;
+ height = (height * heightScale + heightBias);
+ #endif
+
+
+ // ***********************
+ // Read from textures
+ // ***********************
+ #if defined(NORMALMAP) && !defined(VERTEX_LIGHTING)
+ vec4 normalHeight = texture2D(m_NormalMap, newTexCoord);
+ vec3 normal = (normalHeight.xyz * vec3(2.0) - vec3(1.0));
+ normal.y = -normal.y;
+
+ normal = tbnMat * normal;
+ #else
+ vec3 normal = vNormal;
+ #if !defined(LOW_QUALITY) && !defined(V_TANGENT)
+ normal = normalize(normal);
+ #endif
+ #endif
+
+ #ifdef DIFFUSEMAP
+ vec4 diffuseColor = texture2D(m_DiffuseMap, newTexCoord);
+ #else
+ vec4 diffuseColor = vec4(1.0);
+ #endif
+
+ #ifdef SPECULARMAP
+ vec4 specularColor = texture2D(m_SpecularMap, newTexCoord);
+ #else
+ vec4 specularColor = vec4(1.0);
+ #endif
+
+ diffuseColor.rgb *= DiffuseSum.rgb;
+ specularColor.rgb *= SpecularSum.rgb;
+
+ gl_FragData[0] = vec4(diffuseColor.rgb, 1.0);
+ gl_FragData[1] = vec4(encodeNormal(normal), 0.0, 0.0);
+ /*encodeNormal(vNormal));*/
+ gl_FragData[2] = vec4(specularColor.rgb, m_Shininess / 128.0);
+}