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/lookdev_world_frag.glsl')
-rw-r--r--source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl52
1 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl b/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl
new file mode 100644
index 00000000000..9077b414026
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lookdev_world_frag.glsl
@@ -0,0 +1,52 @@
+
+#pragma BLENDER_REQUIRE(common_math_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
+#pragma BLENDER_REQUIRE(lightprobe_lib.glsl)
+#pragma BLENDER_REQUIRE(surface_lib.glsl)
+
+uniform sampler2D studioLight;
+
+uniform float backgroundAlpha;
+uniform mat3 StudioLightMatrix;
+uniform float studioLightIntensity = 1.0;
+uniform float studioLightBlur = 0.0;
+
+out vec4 FragColor;
+
+vec3 background_transform_to_world(vec3 viewvec)
+{
+ vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
+ vec4 co_homogenous = (ProjectionMatrixInverse * v);
+
+ vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
+ return (ViewMatrixInverse * co).xyz;
+}
+
+float hypot(float x, float y)
+{
+ return sqrt(x * x + y * y);
+}
+
+vec4 node_tex_environment_equirectangular(vec3 co, sampler2D ima)
+{
+ vec3 nco = normalize(co);
+ float u = -atan(nco.y, nco.x) / (2.0 * M_PI) + 0.5;
+ float v = atan(nco.z, hypot(nco.x, nco.y)) / M_PI + 0.5;
+ return textureLod(ima, vec2(u, v), 0.0);
+}
+
+void main()
+{
+ vec3 worldvec = background_transform_to_world(viewPosition);
+
+ vec3 background_color;
+#if defined(LOOKDEV_BG)
+ background_color = probe_evaluate_world_spec(worldvec, studioLightBlur).rgb;
+#else
+ worldvec = StudioLightMatrix * worldvec;
+ background_color = node_tex_environment_equirectangular(worldvec, studioLight).rgb;
+ background_color *= studioLightIntensity;
+#endif
+
+ FragColor = vec4(clamp(background_color, vec3(0.0), vec3(1e10)), 1.0) * backgroundAlpha;
+}