Sky.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Renderer/RendererObject.h>
  7. #include <AnKi/Resource/ImageResource.h>
  8. #include <AnKi/Gr.h>
  9. namespace anki {
  10. /// @addtogroup renderer
  11. /// @{
  12. /// Resolves shadowmaps into a single texture.
  13. class GeneratedSky : public RendererObject
  14. {
  15. public:
  16. GeneratedSky()
  17. {
  18. registerDebugRenderTarget("SkyLut");
  19. }
  20. Error init();
  21. void populateRenderGraph(RenderingContext& ctx);
  22. void getDebugRenderTarget([[maybe_unused]] CString rtName, Array<RenderTargetHandle, U32(DebugRenderTargetRegister::kCount)>& handles,
  23. [[maybe_unused]] DebugRenderTargetDrawStyle& drawStyle) const override
  24. {
  25. handles[0] = m_runCtx.m_envMapRt;
  26. }
  27. RenderTargetHandle getSkyLutRt() const
  28. {
  29. ANKI_ASSERT(isEnabled());
  30. return m_runCtx.m_skyLutRt;
  31. }
  32. RenderTargetHandle getEnvironmentMapRt() const
  33. {
  34. ANKI_ASSERT(isEnabled());
  35. return m_runCtx.m_envMapRt;
  36. }
  37. Texture& getEnvironmentMapTexture() const
  38. {
  39. return *m_envMap;
  40. }
  41. ANKI_PURE Bool isEnabled() const;
  42. public:
  43. ShaderProgramResourcePtr m_prog;
  44. ShaderProgramPtr m_transmittanceLutGrProg;
  45. ShaderProgramPtr m_multipleScatteringLutGrProg;
  46. ShaderProgramPtr m_skyLutGrProg;
  47. ShaderProgramPtr m_computeSunColorGrProg;
  48. ShaderProgramPtr m_computeEnvMapGrProg;
  49. static constexpr UVec2 kTransmittanceLutSize{256, 64};
  50. static constexpr UVec2 kMultipleScatteringLutSize{32, 32};
  51. static constexpr UVec2 kSkyLutSize{256, 256};
  52. static constexpr UVec2 kEnvMapSize{64, 64};
  53. TexturePtr m_transmittanceLut;
  54. TexturePtr m_multipleScatteringLut;
  55. TexturePtr m_skyLut;
  56. TexturePtr m_envMap;
  57. Vec3 m_sunDir = Vec3(0.0f);
  58. F32 m_sunPower = -100.0f;
  59. Bool m_transmittanceAndMultiScatterLutsGenerated = false;
  60. Bool m_skyLutImportedOnce = false;
  61. class
  62. {
  63. public:
  64. RenderTargetHandle m_skyLutRt;
  65. RenderTargetHandle m_envMapRt;
  66. } m_runCtx;
  67. };
  68. /// @}
  69. } // namespace anki