velocity.glslf 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #version GLSL_VERSION
  2. #include <precision_statement.glslf>
  3. #include <std.glsl>
  4. #include <pack.glslf>
  5. uniform sampler2D u_depth;
  6. uniform mat4 u_view_proj_inverse;
  7. uniform mat4 u_view_proj_prev;
  8. /*==============================================================================
  9. SHADER INTERFACE
  10. ==============================================================================*/
  11. GLSL_IN vec2 v_texcoord;
  12. //------------------------------------------------------------------------------
  13. GLSL_OUT vec4 GLSL_OUT_FRAG_COLOR;
  14. /*==============================================================================
  15. MAIN
  16. ==============================================================================*/
  17. void main(void) {
  18. float depth = GLSL_TEXTURE(u_depth, v_texcoord).x;
  19. vec4 curr_view_pos = vec4(v_texcoord * 2.0 - 1.0, 2.0 * depth - 1.0, 1.0);
  20. vec4 D = u_view_proj_inverse * curr_view_pos;
  21. vec4 worldPos = D / D.w;
  22. vec4 prev_view_pos = u_view_proj_prev * worldPos;
  23. prev_view_pos /= prev_view_pos.w;
  24. vec2 velocity = (curr_view_pos.xy - prev_view_pos.xy) / 4.0 + 0.5;
  25. velocity = clamp(velocity, 0.0, 1.0);
  26. GLSL_OUT_FRAG_COLOR = pack(velocity);
  27. }