Skip to content

Commit dd90529

Browse files
committed
[DDGI] Add initial setup and probe visualizer
1 parent 5f2ee62 commit dd90529

File tree

10 files changed

+640
-2
lines changed

10 files changed

+640
-2
lines changed

src/graphics/config/graphicconfig.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,14 @@ class ETH_GRAPHIC_DLL GraphicConfig
139139
int32_t m_SpatialHashSize = 1 << 16; // Roughly 1mb budget for a float3 payload
140140
float m_SpatialHashCellSize = 0.1; // Roughly 1mb budget for a float3 payload
141141

142+
// DDGI
143+
float m_IrradianceFieldGridSpacing = 1.0f;
144+
ethVector3 m_IrradianceFieldGridOrigin = { 0, 0, 0 };
145+
ethVector3u m_IrradianceFieldGridResolution = { 32, 4, 32 };
146+
uint32_t m_IrradianceFieldNumIrradianceInteroirTexels = 6;
147+
uint32_t m_IrradianceFieldNumDepthInteroirTexels = 16;
148+
float m_IrradianceFieldVisualizeProbeRadius = 0.1f;
149+
142150
private:
143151
ethVector4 m_ClearColor;
144152
ethVector2u m_Resolution;

src/graphics/rhi/dx12/dx12translation.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,8 @@ DXGI_FORMAT Ether::Graphics::Translate(const RhiFormat& rhiType)
250250
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
251251
case RhiFormat::R16G16B16A16Float:
252252
return DXGI_FORMAT_R16G16B16A16_FLOAT;
253+
case RhiFormat::R16G16Float:
254+
return DXGI_FORMAT_R16G16_FLOAT;
253255
case RhiFormat::R32G32Float:
254256
return DXGI_FORMAT_R32G32_FLOAT;
255257
case RhiFormat::R32G32B32Float:

src/graphics/rhi/rhienums.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ enum class RhiFormat
142142
R8G8B8A8UnormSrgb,
143143
R11G11B10Float,
144144
R16G16B16A16Float,
145+
R16G16Float,
145146
R32G32Float,
146147
R32G32B32Float,
147148
R32G32B32A32Float,

src/graphics/rhi/rhiimguiwrapper.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,28 @@ void Ether::Graphics::RhiImguiWrapper::DrawDebugMenu() const
200200
ImGui::TreePop();
201201
}
202202

203+
if (ImGui::TreeNode("Global Illumination"))
204+
{
205+
if (ImGui::TreeNode("Irradiance Field"))
206+
{
207+
uint32_t minRes = 1;
208+
uint32_t maxRes = 128;
209+
210+
ImGui::SliderFloat("Grid Spacing", &gfxConfig.m_IrradianceFieldGridSpacing, 0.1f, 10.0f);
211+
ImGui::DragFloat3("Grid Origin", (float*)&gfxConfig.m_IrradianceFieldGridOrigin, 0.1f);
212+
ImGui::Separator();
213+
ImGui::DragScalarN("Grid Resolution", ImGuiDataType_U32, &gfxConfig.m_IrradianceFieldGridResolution, 3, 1.0f, &minRes, &maxRes);
214+
ImGui::Separator();
215+
ImGui::Text("Num Probes: %u", gfxConfig.m_IrradianceFieldGridResolution.x * gfxConfig.m_IrradianceFieldGridResolution.y * gfxConfig.m_IrradianceFieldGridResolution.z);
216+
ImGui::Text("Irradiance Interior Texels: %u", gfxConfig.m_IrradianceFieldNumIrradianceInteroirTexels);
217+
ImGui::Text("Depth Interior Texels: %u", gfxConfig.m_IrradianceFieldNumDepthInteroirTexels);
218+
ImGui::Separator();
219+
ImGui::SliderFloat("Visualize Probe Radius", &gfxConfig.m_IrradianceFieldVisualizeProbeRadius, 0.01f, 1.0f);
220+
ImGui::TreePop();
221+
}
222+
ImGui::TreePop();
223+
}
224+
203225
if (ImGui::TreeNode("Raytracing"))
204226
{
205227
ImGui::Checkbox("Enabled", &gfxConfig.m_IsRaytracingEnabled);

src/graphics/schedule/framescheduler.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
#include "graphics/schedule/producers/pathtracedlightingproducer.h"
3333
#include "graphics/schedule/producers/translucencyproducer.h"
3434

35+
#include "graphics/schedule/producers/globalillumination/irradiancefieldproducer.h"
36+
3537
#include "graphics/schedule/producers/postprocess/postfxsourceproducer.h"
3638
#include "graphics/schedule/producers/postprocess/bloomproducer.h"
3739
#include "graphics/schedule/producers/postprocess/depthoffieldproducer.h"
@@ -45,13 +47,14 @@
4547

4648
DECLARE_GFX_PA(GBufferProducer)
4749
DECLARE_GFX_PA(GlobalConstantsProducer)
48-
DECLARE_GFX_PA(LightingCompositeProducer)
4950
DECLARE_GFX_PA(MaterialTableProducer)
5051
DECLARE_GFX_PA(ProceduralSkyProducer)
5152
DECLARE_GFX_PA(RaytracingResourceProducer)
53+
DECLARE_GFX_PA(IrradianceFieldProducer)
5254
DECLARE_GFX_PA(RaytracedLightingProducer)
5355
DECLARE_GFX_PA(RaytracedTranslucencyProducer)
5456
DECLARE_GFX_PA(PathtracedLightingProducer)
57+
DECLARE_GFX_PA(LightingCompositeProducer)
5558
DECLARE_GFX_PA(TranslucencyProducer)
5659

5760
DECLARE_GFX_PA(PostFxSourceProducer)
@@ -60,6 +63,8 @@ DECLARE_GFX_PA(DepthOfFieldProducer)
6063
DECLARE_GFX_PA(TemporalAAProducer)
6164
DECLARE_GFX_PA(FinalCompositeProducer)
6265

66+
DECLARE_GFX_PA(IrradianceFieldVisualizationProducer)
67+
6368
#if ETH_TOOLMODE
6469
DECLARE_GFX_PA(EditorGridProducer)
6570
DECLARE_GFX_PA(EditorOutlineProducer)
@@ -69,13 +74,14 @@ Ether::Graphics::FrameScheduler::FrameScheduler()
6974
{
7075
Register(ACCESS_GFX_PA(GBufferProducer), new GBufferProducer());
7176
Register(ACCESS_GFX_PA(GlobalConstantsProducer), new GlobalConstantsProducer());
72-
Register(ACCESS_GFX_PA(LightingCompositeProducer), new LightingCompositeProducer());
7377
Register(ACCESS_GFX_PA(MaterialTableProducer), new MaterialTableProducer());
7478
Register(ACCESS_GFX_PA(ProceduralSkyProducer), new ProceduralSkyProducer());
7579
Register(ACCESS_GFX_PA(RaytracingResourceProducer), new RaytracingResourceProducer());
80+
Register(ACCESS_GFX_PA(IrradianceFieldProducer), new IrradianceFieldProducer());
7681
Register(ACCESS_GFX_PA(RaytracedLightingProducer), new RaytracedLightingProducer());
7782
Register(ACCESS_GFX_PA(RaytracedTranslucencyProducer), new RaytracedTranslucencyProducer());
7883
Register(ACCESS_GFX_PA(PathtracedLightingProducer), new PathtracedLightingProducer());
84+
Register(ACCESS_GFX_PA(LightingCompositeProducer), new LightingCompositeProducer());
7985
Register(ACCESS_GFX_PA(TranslucencyProducer), new TranslucencyProducer());
8086

8187
Register(ACCESS_GFX_PA(PostFxSourceProducer), new PostFxSourceProducer());
@@ -84,6 +90,8 @@ Ether::Graphics::FrameScheduler::FrameScheduler()
8490
Register(ACCESS_GFX_PA(TemporalAAProducer), new TemporalAAProducer());
8591
Register(ACCESS_GFX_PA(FinalCompositeProducer), new FinalCompositeProducer());
8692

93+
Register(ACCESS_GFX_PA(IrradianceFieldVisualizationProducer), new IrradianceFieldVisualizationProducer());
94+
8795
#if ETH_TOOLMODE
8896
Register(ACCESS_GFX_PA(EditorGridProducer), new EditorGridProducer());
8997
Register(ACCESS_GFX_PA(EditorOutlineProducer), new EditorOutlineProducer());
@@ -101,6 +109,7 @@ Ether::Graphics::FrameScheduler::~FrameScheduler()
101109
ACCESS_GFX_PA(MaterialTableProducer).Release();
102110
ACCESS_GFX_PA(ProceduralSkyProducer).Release();
103111
ACCESS_GFX_PA(RaytracingResourceProducer).Release();
112+
ACCESS_GFX_PA(IrradianceFieldProducer).Release();
104113
ACCESS_GFX_PA(RaytracedLightingProducer).Release();
105114
ACCESS_GFX_PA(PathtracedLightingProducer).Release();
106115
ACCESS_GFX_PA(TranslucencyProducer).Release();
@@ -112,6 +121,8 @@ Ether::Graphics::FrameScheduler::~FrameScheduler()
112121
ACCESS_GFX_PA(TemporalAAProducer).Release();
113122
ACCESS_GFX_PA(FinalCompositeProducer).Release();
114123

124+
ACCESS_GFX_PA(IrradianceFieldVisualizationProducer).Release();
125+
115126
#if ETH_TOOLMODE
116127
ACCESS_GFX_PA(EditorGridProducer).Release();
117128
ACCESS_GFX_PA(EditorOutlineProducer).Release();
@@ -182,6 +193,7 @@ void Ether::Graphics::FrameScheduler::BuildSchedule()
182193
m_OrderedProducers.push(ACCESS_GFX_PA(MaterialTableProducer).Get());
183194
m_OrderedProducers.push(ACCESS_GFX_PA(ProceduralSkyProducer).Get());
184195
m_OrderedProducers.push(ACCESS_GFX_PA(RaytracingResourceProducer).Get());
196+
m_OrderedProducers.push(ACCESS_GFX_PA(IrradianceFieldProducer).Get());
185197
m_OrderedProducers.push(ACCESS_GFX_PA(GBufferProducer).Get());
186198
m_OrderedProducers.push(ACCESS_GFX_PA(RaytracedLightingProducer).Get());
187199
m_OrderedProducers.push(ACCESS_GFX_PA(PathtracedLightingProducer).Get());
@@ -198,6 +210,9 @@ void Ether::Graphics::FrameScheduler::BuildSchedule()
198210
// TODO: Add a tonemapping pass instead of dumping it in final composite, and move it before TAA
199211
m_OrderedProducers.push(ACCESS_GFX_PA(FinalCompositeProducer).Get());
200212

213+
// Debug Visualizers:
214+
m_OrderedProducers.push(ACCESS_GFX_PA(IrradianceFieldVisualizationProducer).Get());
215+
201216
#if ETH_TOOLMODE
202217
m_OrderedProducers.push(ACCESS_GFX_PA(EditorGridProducer).Get());
203218
m_OrderedProducers.push(ACCESS_GFX_PA(EditorOutlineProducer).Get());

0 commit comments

Comments
 (0)