Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders')
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl16
-rw-r--r--source/blender/draw/engines/eevee/shaders/prepass_frag.glsl9
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_frag.glsl1
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_geom.glsl28
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl1
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_store_geom.glsl1
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_vert.glsl18
7 files changed, 69 insertions, 5 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index 5aac853da00..ceed99a7b80 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -10,12 +10,26 @@
uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrixInverse;
-uniform mat4 ViewMatrix;
uniform vec4 viewvecs[2];
+#ifndef SHADOW_SHADER
+uniform mat4 ViewMatrix;
+#else
+layout(std140) uniform shadow_render_block {
+ mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
+ vec4 lampPosition;
+ int layer;
+ float exponent;
+};
+
+flat in int shFace; /* Shadow layer we are rendering to. */
+#define ViewMatrix FaceViewMatrix[shFace]
+#endif
#define cameraForward normalize(ViewMatrixInverse[2].xyz)
#define cameraPos ViewMatrixInverse[3].xyz
+
/* ------- Structures -------- */
#ifdef VOLUMETRICS
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
index f921d56e3bc..cf59b29548a 100644
--- a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
@@ -62,6 +62,10 @@ float hashed_alpha_threshold(vec3 co)
uniform float alphaThreshold;
#endif
+#ifdef SHADOW_SHADER
+out vec4 FragColor;
+#endif
+
void main()
{
/* For now do nothing.
@@ -82,4 +86,9 @@ void main()
discard;
#endif
#endif
+
+#ifdef SHADOW_SHADER
+ float dist = distance(lampPosition.xyz, worldPosition.xyz);
+ FragColor = vec4(dist, 0.0, 0.0, 1.0);
+#endif
}
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl
index 3fc3c146c66..df6fbc4c2fe 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl
@@ -1,6 +1,7 @@
layout(std140) uniform shadow_render_block {
mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
vec4 lampPosition;
int layer;
float exponent;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
index afc78c4a8f8..d9d30c4d9e6 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
@@ -1,6 +1,7 @@
layout(std140) uniform shadow_render_block {
mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
vec4 lampPosition;
int layer;
float exponent;
@@ -12,15 +13,36 @@ layout(triangle_strip, max_vertices=3) out;
in vec4 vPos[];
flat in int face[];
+#ifdef MESH_SHADER
+in vec3 vNor[];
+in vec3 vNor[];
+#endif
+
out vec3 worldPosition;
+#ifdef MESH_SHADER
+out vec3 viewPosition; /* Required. otherwise generate linking error. */
+out vec3 worldNormal; /* Required. otherwise generate linking error. */
+out vec3 viewNormal; /* Required. otherwise generate linking error. */
+flat out int shFace;
+#else
+int shFace;
+#endif
void main() {
- int f = face[0];
- gl_Layer = f;
+ shFace = face[0];
+ gl_Layer = shFace;
for (int v = 0; v < 3; ++v) {
- gl_Position = ShadowMatrix[f] * vPos[v];
+ gl_Position = ShadowMatrix[shFace] * vPos[v];
worldPosition = vPos[v].xyz;
+#ifdef MESH_SHADER
+ worldNormal = vNor[v];
+ viewPosition = (FaceViewMatrix[shFace] * vec4(worldPosition, 1.0)).xyz;
+ viewNormal = (FaceViewMatrix[shFace] * vec4(worldNormal, 0.0)).xyz;
+#ifdef ATTRIB
+ pass_attrib(v);
+#endif
+#endif
EmitVertex();
}
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
index 40b980b3904..6782922a2e4 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
@@ -1,6 +1,7 @@
layout(std140) uniform shadow_render_block {
mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
vec4 lampPosition;
int layer;
float exponent;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_store_geom.glsl b/source/blender/draw/engines/eevee/shaders/shadow_store_geom.glsl
index 1d456095e02..78ccb025ce6 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_store_geom.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_store_geom.glsl
@@ -1,6 +1,7 @@
layout(std140) uniform shadow_render_block {
mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
vec4 lampPosition;
int layer;
float exponent;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
index 288098ba771..777902ccba8 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
@@ -1,13 +1,29 @@
uniform mat4 ShadowModelMatrix;
+#ifdef MESH_SHADER
+uniform mat3 WorldNormalMatrix;
+#endif
in vec3 pos;
+#ifdef MESH_SHADER
+in vec3 nor;
+#endif
out vec4 vPos;
+#ifdef MESH_SHADER
+out vec3 vNor;
+#endif
flat out int face;
void main() {
vPos = ShadowModelMatrix * vec4(pos, 1.0);
face = gl_InstanceID;
-} \ No newline at end of file
+
+#ifdef MESH_SHADER
+ vNor = WorldNormalMatrix * nor;
+#ifdef ATTRIB
+ pass_attrib(pos);
+#endif
+#endif
+}