screen_space_reflection_inc.glsl 721 B

12345678910111213141516171819202122232425262728
  1. layout(constant_id = 0) const bool sc_multiview = false;
  2. layout(set = 4, binding = 0, std140) uniform SceneData {
  3. mat4x4 projection[2];
  4. mat4x4 inv_projection[2];
  5. vec4 eye_offset[2];
  6. }
  7. scene_data;
  8. vec3 reconstructCSPosition(vec2 screen_pos, float z) {
  9. if (sc_multiview) {
  10. vec4 pos;
  11. pos.xy = (2.0 * vec2(screen_pos) / vec2(params.screen_size)) - 1.0;
  12. pos.z = z * 2.0 - 1.0;
  13. pos.w = 1.0;
  14. pos = scene_data.inv_projection[params.view_index] * pos;
  15. pos.xyz /= pos.w;
  16. return pos.xyz;
  17. } else {
  18. if (params.orthogonal) {
  19. return vec3(-(screen_pos.xy * params.proj_info.xy + params.proj_info.zw), z);
  20. } else {
  21. return vec3((screen_pos.xy * params.proj_info.xy + params.proj_info.zw) * z, z);
  22. }
  23. }
  24. }