AccelerationStructureBuilder.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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/Renderer/Utils/GpuVisibility.h>
  8. namespace anki {
  9. /// @addtogroup renderer
  10. /// @{
  11. ANKI_CVAR2(NumericCVar<F32>, Render, Rt, ExtendedFrustumDistance, 200.0f, 10.0f, 10000.0f,
  12. "Every object that its distance from the camera is bellow that value will take part in ray tracing")
  13. ANKI_CVAR2(NumericCVar<U32>, Render, Rt, LightGridCellCountXZ, 64, 1, 1024, "The number of cells in the X and Z axis")
  14. ANKI_CVAR2(NumericCVar<U32>, Render, Rt, LightGridCellCountY, 4, 1, 1024, "The number of cells in the Y axis")
  15. ANKI_CVAR2(NumericCVar<F32>, Render, Rt, LightGridSizeXZ, 128.0f, 10.0f, 10000.0f, "The size of the grid volume in the X and Z dimensions")
  16. ANKI_CVAR2(NumericCVar<F32>, Render, Rt, LightGridSizeY, 64.0f, 10.0f, 10000.0f, "The size of the grid in the Y dimension")
  17. ANKI_CVAR2(NumericCVar<U32>, Render, Rt, LightIndexListSize, 64 * 1024, 128, 256 * 1024, "The light index list size")
  18. /// @memberof AccelerationStructureBuilder
  19. class AccelerationStructureVisibilityInfo
  20. {
  21. public:
  22. BufferHandle m_depedency; ///< Dependency for the buffer views bellow.
  23. BufferView m_visibleRenderablesBuffer;
  24. BufferView m_buildSbtIndirectArgsBuffer;
  25. };
  26. /// Builds acceleration structures and also bins lights to some sort of grid.
  27. class AccelerationStructureBuilder : public RendererObject
  28. {
  29. public:
  30. Error init()
  31. {
  32. return Error::kNone;
  33. }
  34. void populateRenderGraph(RenderingContext& ctx);
  35. AccelerationStructureHandle getAccelerationStructureHandle() const
  36. {
  37. return m_runCtx.m_tlasHandle;
  38. }
  39. void getVisibilityInfo(AccelerationStructureVisibilityInfo& asVisInfo, GpuVisibilityLocalLightsOutput& lightVisInfo) const
  40. {
  41. asVisInfo.m_depedency = m_runCtx.m_dependency;
  42. asVisInfo.m_visibleRenderablesBuffer = m_runCtx.m_visibleRenderablesBuff;
  43. asVisInfo.m_buildSbtIndirectArgsBuffer = m_runCtx.m_buildSbtIndirectArgsBuff;
  44. lightVisInfo = m_runCtx.m_lightVisInfo;
  45. }
  46. const LocalLightsGridConstants& getLocalLightsGridConstants() const
  47. {
  48. return m_runCtx.m_lightGridConsts;
  49. }
  50. public:
  51. class
  52. {
  53. public:
  54. AccelerationStructurePtr m_tlas;
  55. AccelerationStructureHandle m_tlasHandle;
  56. BufferHandle m_dependency;
  57. BufferView m_visibleRenderablesBuff;
  58. BufferView m_buildSbtIndirectArgsBuff;
  59. GpuVisibilityLocalLightsOutput m_lightVisInfo;
  60. LocalLightsGridConstants m_lightGridConsts = {};
  61. } m_runCtx;
  62. };
  63. /// @}
  64. } // namespace anki