20 Renderer(Tempest::Swapchain& swapchain);
26 void draw(Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t cmdId,
size_t imgId,
27 Tempest::VectorImage::Mesh& uiLayer, Tempest::VectorImage::Mesh& numOverlay,
30 void dbgDraw(Tempest::Painter& painter);
35 enum Quality : uint8_t {
42 Tempest::Size internalResolution()
const;
43 float internalResolutionScale()
const;
44 void updateCamera(
const Camera &camera);
46 bool requiresTlas()
const;
48 Tempest::StorageImage& usesImage2d(Tempest::StorageImage& ret, Tempest::TextureFormat frm, uint32_t w, uint32_t h,
bool mips =
false);
49 Tempest::StorageImage& usesImage2d(Tempest::StorageImage& ret, Tempest::TextureFormat frm, Tempest::Size sz,
bool mips =
false);
50 Tempest::StorageImage& usesImage3d(Tempest::StorageImage& ret, Tempest::TextureFormat frm, uint32_t w, uint32_t h, uint32_t d,
bool mips =
false);
51 Tempest::ZBuffer& usesZBuffer(Tempest::ZBuffer& ret, Tempest::TextureFormat frm, uint32_t w, uint32_t h);
52 Tempest::StorageBuffer& usesSsbo(Tempest::StorageBuffer& ret,
size_t size);
53 Tempest::StorageBuffer& usesScratch(Tempest::StorageBuffer& ret,
size_t size);
55 void prepareUniforms();
56 void resetShadowmap();
60 void prepareSky (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
61 void prepareSSAO (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
62 void prepareFog (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
63 void prepareIrradiance(Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
64 void prepareGi (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
65 void prepareExposure (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
66 void prepareEpipolar (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& wview);
68 void drawHiZ (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& view);
69 void buildHiZ (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
70 void drawVsm (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& view);
71 void drawRtsm (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& view);
72 void drawRtsmOmni (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& view);
73 void drawSwr (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& view);
74 void drawGBuffer (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId,
WorldView& view);
75 void drawGWater (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
WorldView& view);
76 void drawShadowMap (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId,
WorldView& view);
77 void drawShadowResolve(Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& view);
78 void drawLights (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& view);
79 void drawSky (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& view);
80 void drawAmbient (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& view);
81 void draw (Tempest::Attachment& result, Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId);
82 void drawTonemapping (Tempest::Attachment& result, Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
83 void drawCMAA2 (Tempest::Attachment& result, Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
84 void drawReflections (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
85 void drawUnderwater (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
86 void drawFog (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
87 void drawSunMoon (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
88 void drawSunMoon (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview,
bool isSun);
90 void drawSwRT (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
92 void stashSceneAux (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
94 void drawProbesDbg (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
95 void drawProbesHitDbg (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
96 void drawVsmDbg (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
97 void drawSwrDbg (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
98 void drawRtsmDbg (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
const WorldView& wview);
100 void setupSettings();
106 const uint32_t shadowResolution = 2048;
107 bool vsmEnabled =
false;
108 bool rtsmEnabled =
false;
109 bool swrEnabled =
false;
110 bool swrtEnabled =
false;
112 bool zEnvMappingEnabled =
false;
113 bool zCloudShadowScale =
false;
114 bool zFogRadial =
false;
116 bool giEnabled =
false;
117 bool aaEnabled =
false;
119 float zVidBrightness = 0.5;
120 float zVidContrast = 0.5;
121 float zVidGamma = 0.5;
126 float vidResIndex = 0;
128 float vsmMipBias = 0.25;
132 Tempest::Swapchain& swapchain;
133 Tempest::Matrix4x4 proj, viewProj, viewProjLwc;
135 Tempest::Matrix4x4 shadowMatrixVsm;
136 Tempest::Vec3 clipInfo;
138 Tempest::Attachment sceneLinear;
140 Tempest::ZBuffer zbufferUi;
142 Tempest::Attachment sceneOpaque;
143 Tempest::Attachment sceneDepth;
145 Tempest::Attachment gbufDiffuse;
146 Tempest::Attachment gbufNormal;
149 Tempest::RenderPipeline* directLightPso =
nullptr;
153 Tempest::RenderPipeline* directLightPso =
nullptr;
157 Quality quality = Quality::None;
159 Tempest::TextureFormat lutRGBFormat = Tempest::TextureFormat::R11G11B10UF;
160 Tempest::TextureFormat lutRGBAFormat = Tempest::TextureFormat::RGBA16F;
162 bool lutIsInitialized =
false;
163 Tempest::Attachment transLut, multiScatLut, viewLut, viewCldLut;
164 Tempest::StorageImage cloudsLut, fogLut3D, fogLut3DMs;
165 Tempest::StorageImage occlusionLut, irradianceLut;
169 Tempest::TextureFormat aoFormat = Tempest::TextureFormat::R8;
170 Tempest::StorageImage ssaoBuf;
171 Tempest::StorageImage ssaoBlur;
175 Tempest::StorageImage workingEdges;
176 Tempest::StorageBuffer shapeCandidates;
177 Tempest::StorageBuffer deferredBlendLocationList;
178 Tempest::StorageBuffer deferredBlendItemList;
179 Tempest::StorageImage deferredBlendItemListHeads;
180 Tempest::StorageBuffer controlBuffer;
181 Tempest::StorageBuffer indirectBuffer;
185 Tempest::StorageImage
hiZ;
211 const int32_t VSM_PAGE_SIZE = 128;
252 Tempest::TextureFormat shadowFormat = Tempest::TextureFormat::Depth16;
253 Tempest::TextureFormat zBufferFormat = Tempest::TextureFormat::Depth16;