Skip to content

Commit 3cb7c49

Browse files
committed
-Dev: Advances on Procedural Sky
1 parent d75878e commit 3cb7c49

File tree

20 files changed

+729
-81
lines changed

20 files changed

+729
-81
lines changed

examples/sponza/application.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ void Application::init(Systems::RendererSettings settings) {
1919
std::placeholders::_4));
2020

2121
Systems::DeferredRenderer* rndr = new Systems::DeferredRenderer(m_window, ShadowResolution::MEDIUM, settings);
22-
m_renderer = rndr;
22+
m_renderer = rndr;
2323

2424
setup();
25+
m_renderer->init();
2526
setup_gui();
2627
}
2728

@@ -58,15 +59,14 @@ void Application::setup() {
5859
m_scene->set_ambient_intensity(0.1f);
5960
m_scene->use_IBL(false);
6061

61-
m_camera = m_scene->get_active_camera();
62+
m_camera = m_scene->get_active_camera();
6263
m_controller = new Tools::Controller(m_camera, m_window, ControllerMovementType::WASD);
6364
}
6465

6566
void Application::setup_gui() {
6667
m_interface.overlay = new Tools::GUIOverlay(
6768
(float)m_window->get_extent().width, (float)m_window->get_extent().height, GuiColorProfileType::DARK);
6869

69-
7070
Tools::Panel* explorerPanel = new Tools::Panel("EXPLORER", 0, 0, 0.2f, 0.7f, PanelWidgetFlags::NoMove, false);
7171
m_interface.scene = new Tools::ExplorerWidget(m_scene, m_renderer);
7272
explorerPanel->add_child(m_interface.scene);
@@ -87,7 +87,6 @@ void Application::setup_gui() {
8787

8888
m_interface.overlay->add_panel(propertiesPanel);
8989
m_interface.properties = propertiesPanel;
90-
9190
}
9291

9392
void Application::update() {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
This file is part of Vulkan-Engine, a simple to use Vulkan based 3D library
3+
4+
MIT License
5+
6+
Copyright (c) 2023 Antonio Espinosa Garcia
7+
8+
*/
9+
#ifndef SKY_PASS_H
10+
#define SKY_PASS_H
11+
#include <engine/core/passes/pass.h>
12+
13+
VULKAN_ENGINE_NAMESPACE_BEGIN
14+
15+
namespace Core {
16+
/*
17+
Procedural Physically Based Sky generation pass.
18+
*/
19+
class SkyPass : public GraphicPass
20+
{
21+
protected:
22+
Mesh* m_vignette;
23+
Graphics::DescriptorSet m_LUTdescriptor;
24+
25+
public:
26+
SkyPass(Graphics::Device* ctx, Extent2D extent, Mesh* vignette)
27+
: BasePass(ctx, extent, 2, 1, false, "SKY GENERATION")
28+
, m_vignette(vignette) {
29+
}
30+
31+
virtual void setup_attachments(std::vector<Graphics::AttachmentInfo>& attachments,
32+
std::vector<Graphics::SubPassDependency>& dependencies);
33+
34+
virtual void setup_uniforms(std::vector<Graphics::Frame>& frames);
35+
36+
virtual void setup_shader_passes();
37+
38+
virtual void render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex = 0);
39+
};
40+
41+
} // namespace Core
42+
VULKAN_ENGINE_NAMESPACE_END
43+
44+
#endif

include/engine/systems/renderers/deferred.h

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <engine/core/passes/tonemapping_pass.h>
1313
#include <engine/core/passes/variance_shadow_pass.h>
1414
#include <engine/core/passes/voxelization_pass.h>
15+
#include <engine/core/passes/sky_pass.h>
1516

1617
VULKAN_ENGINE_NAMESPACE_BEGIN
1718

@@ -22,30 +23,36 @@ Renders a given scene data to a given window using deferred rendering. Fully par
2223
*/
2324
class DeferredRenderer : public BaseRenderer
2425
{
26+
protected:
2527
enum RendererPasses
2628
{
27-
ENVIROMENT_PASS = 0,
28-
SHADOW_PASS = 1,
29-
VOXELIZATION_PASS = 2,
30-
GEOMETRY_PASS = 3,
31-
PRECOMPOSITION_PASS = 4,
32-
COMPOSITION_PASS = 5,
33-
BLOOM_PASS = 6,
34-
TONEMAPPIN_PASS = 7,
35-
FXAA_PASS = 8,
29+
SKY_PASS = 0,
30+
ENVIROMENT_PASS = 1,
31+
SHADOW_PASS = 2,
32+
VOXELIZATION_PASS = 3,
33+
GEOMETRY_PASS = 4,
34+
PRECOMPOSITION_PASS = 5,
35+
COMPOSITION_PASS = 6,
36+
BLOOM_PASS = 7,
37+
TONEMAPPIN_PASS = 8,
38+
FXAA_PASS = 9,
3639
};
3740

3841
// Graphic Settings
3942
ShadowResolution m_shadowQuality = ShadowResolution::MEDIUM;
40-
Core::SSR m_SSR = {};
41-
Core::VXGI m_VXGI = {};
42-
Core::AO m_AO = {};
43-
float m_bloomStrength = 0.05f;
4443

4544
// Query
4645
bool m_updateShadows = false;
4746
bool m_updateGI = false;
4847

48+
virtual void on_before_render(Core::Scene* const scene);
49+
50+
virtual void on_after_render(RenderResult& renderResult, Core::Scene* const scene);
51+
52+
virtual void create_passes();
53+
54+
virtual void update_enviroment(Core::Skybox* const skybox);
55+
4956
public:
5057
DeferredRenderer(Core::IWindow* window)
5158
: BaseRenderer(window) {
@@ -57,39 +64,43 @@ class DeferredRenderer : public BaseRenderer
5764
, m_shadowQuality(shadowQuality) {
5865
}
5966

60-
inline ShadowResolution get_shadow_quality() const {
67+
inline ShadowResolution get_shadow_quality() {
6168
return m_shadowQuality;
6269
}
6370
inline void set_shadow_quality(ShadowResolution quality) {
6471
m_shadowQuality = quality;
6572
if (m_initialized)
6673
m_updateShadows = true;
6774
}
68-
inline float get_bloom_strength() const {
69-
return m_bloomStrength;
75+
inline float get_bloom_strength() {
76+
return get_pass<Core::BloomPass*>(BLOOM_PASS)->get_bloom_strength();
7077
}
7178
inline void set_bloom_strength(float st) {
72-
m_bloomStrength = st;
79+
get_pass<Core::BloomPass*>(BLOOM_PASS)->set_bloom_strength(st);
7380
}
7481
inline void set_SSR_settings(Core::SSR settings) {
75-
m_SSR = settings;
82+
get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_SSR_settings(settings);
7683
};
77-
inline Core::SSR get_SSR_settings() const {
78-
return m_SSR;
84+
inline Core::SSR get_SSR_settings() {
85+
return get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->get_SSR_settings();
7986
};
8087
inline void set_VXGI_settings(Core::VXGI settings) {
81-
if (m_VXGI.resolution != settings.resolution)
88+
if (get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->get_VXGI_settings().resolution != settings.resolution)
8289
m_updateGI = true;
83-
m_VXGI = settings;
90+
get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_VXGI_settings(settings);
91+
m_passes[VOXELIZATION_PASS]->set_active(settings.enabled);
8492
};
85-
inline Core::VXGI get_VXGI_settings() const {
86-
return m_VXGI;
93+
inline Core::VXGI get_VXGI_settings() {
94+
return get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->get_VXGI_settings();
8795
};
8896
inline void set_SSAO_settings(Core::AO settings) {
89-
m_AO = settings;
97+
get_pass<Core::PreCompositionPass*>(PRECOMPOSITION_PASS)->set_SSAO_settings(settings);
98+
get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->enable_AO(settings.enabled);
99+
get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_AO_type(static_cast<int>(settings.type));
100+
m_passes[PRECOMPOSITION_PASS]->set_active(settings.enabled && settings.type != Core::AOType::VXAO);
90101
};
91-
inline Core::AO get_SSAO_settings() const {
92-
return m_AO;
102+
inline Core::AO get_SSAO_settings() {
103+
return get_pass<Core::PreCompositionPass*>(PRECOMPOSITION_PASS)->get_SSAO_settings();
93104
};
94105
inline void set_shading_output(Core::OutputBuffer output) {
95106
get_pass<Core::CompositionPass*>(COMPOSITION_PASS)->set_output_buffer(output);
@@ -110,15 +121,6 @@ class DeferredRenderer : public BaseRenderer
110121
inline void set_tonemapping_type(Core::TonemappingType type) {
111122
get_pass<Core::TonemappingPass*>(TONEMAPPIN_PASS)->set_tonemapping_type(type);
112123
}
113-
114-
protected:
115-
virtual void on_before_render(Core::Scene* const scene);
116-
117-
virtual void on_after_render(RenderResult& renderResult, Core::Scene* const scene);
118-
119-
virtual void create_passes();
120-
121-
virtual void update_enviroment(Core::Skybox* const skybox);
122124
};
123125
} // namespace Systems
124126
VULKAN_ENGINE_NAMESPACE_END

include/engine/systems/renderers/renderer.h

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,11 @@ class BaseRenderer
6969
BaseRenderer(Core::IWindow* window)
7070
: m_window(window)
7171
, m_device(nullptr) {
72-
on_instance();
7372
}
7473
BaseRenderer(Core::IWindow* window, RendererSettings settings)
7574
: m_window(window)
7675
, m_settings(settings)
7776
, m_device(nullptr) {
78-
on_instance();
7977
}
8078

8179
#pragma region Getters & Setters
@@ -116,11 +114,6 @@ class BaseRenderer
116114
virtual inline void set_clearcolor(Vec4 c) {
117115
m_settings.clearColor = c;
118116
}
119-
template <typename T> inline T get_pass(uint32_t id) {
120-
T pass = id < m_passes.size() ? static_cast<T>(m_passes[id]) : nullptr;
121-
ASSERT_PTR(pass);
122-
return pass;
123-
}
124117

125118
#pragma endregion
126119
#pragma region Public Functions
@@ -150,11 +143,6 @@ class BaseRenderer
150143
*/
151144
virtual void create_passes();
152145
/*
153-
What to do when instancing the renderer
154-
*/
155-
virtual void on_instance() {
156-
}
157-
/*
158146
What to do when initiating the renderer
159147
*/
160148
virtual void on_init() {
@@ -194,6 +182,14 @@ class BaseRenderer
194182
*/
195183
void init_gui();
196184
#pragma endregion
185+
#pragma region Utility
186+
187+
template <typename T> inline T get_pass(uint32_t id) {
188+
T pass = id < m_passes.size() ? static_cast<T>(m_passes[id]) : nullptr;
189+
ASSERT_PTR(pass);
190+
return pass;
191+
}
192+
#pragma endregion
197193
};
198194
} // namespace Systems
199195
VULKAN_ENGINE_NAMESPACE_END

resources/shaders/deferred/skybox.glsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ void main()
3030

3131
#shader fragment
3232
#version 460
33-
#include reindhart.glsl
3433
#include light.glsl
3534
#include scene.glsl
3635
#include material_defines.glsl

resources/shaders/env/panorama_converter.glsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ void main() {
4343

4444
#shader fragment
4545
#version 460 core
46-
#include reindhart.glsl
4746

4847
#define MATH_PI 3.1415926535897932384626433832795
4948
#define MATH_INV_PI (1.0 / MATH_PI)

0 commit comments

Comments
 (0)