TraditionalDeferredShadingSkybox.ankiprog 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright (C) 2009-2022, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma anki mutator METHOD 0 1 // 0: solid colod, 1: 2D image
  6. #pragma anki start vert
  7. #include <AnKi/Shaders/QuadVert.glsl>
  8. #pragma anki end
  9. #pragma anki start frag
  10. #include <AnKi/Shaders/Functions.glsl>
  11. #include <AnKi/Shaders/Include/TraditionalDeferredShadingTypes.h>
  12. layout(location = 0) in Vec2 in_uv;
  13. layout(location = 0) out ANKI_RP Vec3 out_color;
  14. layout(push_constant, row_major, std140) uniform b_pc
  15. {
  16. DeferredSkyboxUniforms u_unis;
  17. };
  18. layout(binding = 0) uniform sampler u_nearestAnyClampSampler;
  19. layout(binding = 1) uniform texture2D u_depthTex;
  20. #if METHOD == 1
  21. layout(binding = 2) uniform sampler u_trilinearAnySampler;
  22. layout(binding = 3) uniform ANKI_RP texture2D u_envMapTex;
  23. #endif
  24. void main()
  25. {
  26. const Vec2 uvToRead = fma(Vec2(gl_FragCoord.xy), u_unis.m_inputTexUvScale, u_unis.m_inputTexUvBias);
  27. const F32 depth = textureLod(u_depthTex, u_nearestAnyClampSampler, uvToRead, 0.0).r;
  28. if(depth != 1.0)
  29. {
  30. discard;
  31. }
  32. #if METHOD == 0
  33. out_color = u_unis.m_solidColor;
  34. #else
  35. const F32 depthFar = 1.0;
  36. const Vec2 ndc = UV_TO_NDC(in_uv);
  37. const Vec4 worldPos4 = u_unis.m_invertedViewProjectionMat * Vec4(ndc, depthFar, 1.0);
  38. const Vec3 worldPos = worldPos4.xyz / worldPos4.w;
  39. const Vec3 eyeToFrag = normalize(worldPos - u_unis.m_cameraPos);
  40. const Vec2 uv = equirectangularMapping(eyeToFrag);
  41. out_color = texture(u_envMapTex, u_trilinearAnySampler, uv).rgb;
  42. #endif
  43. }
  44. #pragma anki end