From 5a029d7a6d80dccd9e56594314b8c6f5b802b095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sat, 17 Jun 2017 01:59:01 +0200 Subject: Eevee: Add data display for planar reflection. Maybe not very useful but it's here for feature parity with the other probes. The fragment shader clipping is here because I'm lazy and don't want to creating a proper quad Batch. --- .../shaders/lightprobe_planar_display_frag.glsl | 30 ++++++++++++++++++++++ .../shaders/lightprobe_planar_display_vert.glsl | 13 ++++++++++ 2 files changed, 43 insertions(+) create mode 100644 source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl create mode 100644 source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl (limited to 'source/blender/draw/engines/eevee/shaders') diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl new file mode 100644 index 00000000000..338dc3bf9c0 --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl @@ -0,0 +1,30 @@ + +uniform int probeIdx; +uniform sampler2DArray probePlanars; + +layout(std140) uniform planar_block { + PlanarData planars_data[MAX_PLANAR]; +}; + +in vec3 worldPosition; + +out vec4 FragColor; + +void main() +{ + PlanarData pd = planars_data[probeIdx]; + + /* Fancy fast clipping calculation */ + vec2 dist_to_clip; + dist_to_clip.x = dot(pd.pl_clip_pos_x, worldPosition); + dist_to_clip.y = dot(pd.pl_clip_pos_y, worldPosition); + float fac = dot(step(pd.pl_clip_edges, dist_to_clip.xxyy), vec2(-1.0, 1.0).xyxy); /* compare and add all tests */ + + if (fac != 2.0) { + discard; + } + + vec4 refco = pd.reflectionmat * vec4(worldPosition, 1.0); + refco.xy /= refco.w; + FragColor = vec4(textureLod(probePlanars, vec3(refco.xy, float(probeIdx)), 0.0).rgb, 1.0); +} diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl new file mode 100644 index 00000000000..3c620982273 --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl @@ -0,0 +1,13 @@ + +in vec3 pos; + +uniform mat4 ModelViewProjectionMatrix; +uniform mat4 ModelMatrix; + +out vec3 worldPosition; + +void main() +{ + gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); + worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz; +} \ No newline at end of file -- cgit v1.2.3