diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-06-17 02:59:01 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-06-19 11:47:56 +0300 |
commit | 5a029d7a6d80dccd9e56594314b8c6f5b802b095 (patch) | |
tree | 12ab1314b8b14a5d83ff8fa0cb6d3a652e1a56a1 /source/blender/draw/engines/eevee/shaders | |
parent | bd9a328b588d32d82a6ee03c2256b21abfc81d39 (diff) |
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.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl | 30 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl | 13 |
2 files changed, 43 insertions, 0 deletions
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 |