Skip to content

Commit 92c95f3

Browse files
committed
wip (+33 squashed commit)
Squashed commit: [6f640c5] cleanup [08ed354] cleanup [a67d61a] adjustable poisson kernel [c10c3ad] poisson noise [bcbdb8d] scene frag [1d25a68] wip [7d230fb] cleanup [732a8e6] pcf NoL [6476a0a] pcf [81a83df] cleanup [2e6b1e6] wip [ca1288d] wip [f71f222] wip [d3220f0] wip [34ba6ab] cleanup [2ecafa0] it works [ac2638b] wip [e32622d] wip [fa59864] trying learn opengl code [d3bc9a0] not working [1f96444] wip [fadcfd4] wip [6257d75] wip [b800dda] wip [ef8be53] wip [a81315d] wip [8911252] wip [74cd2db] multiple views [04e289d] image view [e880a4c] wip [23e8245] wip [c0d1913] wip [035cef9] wip
1 parent 507dad8 commit 92c95f3

30 files changed

+585
-187
lines changed

HelloVulkan/Header/Apps/AppPBRShadow.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class AppPBRShadow final : AppBase
4646
std::unique_ptr<PipelineLightRender> lightPtr_;
4747
std::unique_ptr<PipelineImGui> imguiPtr_;
4848

49-
std::unique_ptr<ResourcesLight> resLights_;
49+
std::unique_ptr<ResourcesLight> resLight_;
5050
std::unique_ptr<ResourcesShadow> resShadow_;
5151

5252
std::unique_ptr<Scene> scene_;

HelloVulkan/Header/Camera.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@ class Camera
3232
void ProcessMouseMovement(float xoffset, float yoffset, bool constrainPitch = true);
3333
void ProcessMouseScroll(float yoffset);
3434

35-
glm::mat4 GetProjectionMatrix() const;
36-
glm::mat4 GetViewMatrix() const;
37-
glm::vec3 Position() const;
38-
CameraUBO GetCameraUBO() const;
39-
ClusterForwardUBO GetClusterForwardUBO() const;
40-
RaytracingCameraUBO GetRaytracingCameraUBO() const;
35+
[[nodiscard]] glm::mat4 GetProjectionMatrix() const;
36+
[[nodiscard]] glm::mat4 GetViewMatrix() const;
37+
[[nodiscard]] glm::vec3 Position() const;
38+
[[nodiscard]] CameraUBO GetCameraUBO() const;
39+
[[nodiscard]] ClusterForwardUBO GetClusterForwardUBO() const;
40+
[[nodiscard]] RaytracingCameraUBO GetRaytracingCameraUBO() const;
41+
42+
private:
43+
void UpdateInternal();
4144

4245
private:
4346
glm::mat4 projectionMatrix_;
@@ -64,9 +67,6 @@ class Camera
6467
// Screen size
6568
float screenWidth_;
6669
float screenHeight_;
67-
68-
private:
69-
void UpdateInternal();
7070
};
7171

7272
#endif

HelloVulkan/Header/Configs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace CameraConfig
3232
constexpr float Zoom = 45.0f;
3333

3434
constexpr float Near = 0.1f;
35-
constexpr float Far = 100.0f;
35+
constexpr float Far = 50.0f;
3636
}
3737

3838
namespace ClusterForwardConfig
@@ -66,6 +66,7 @@ namespace IBLConfig
6666
namespace ShadowConfig
6767
{
6868
constexpr uint32_t DepthSize = 4096;
69+
constexpr uint32_t CascadeCount = 4u;
6970
}
7071

7172
#endif

HelloVulkan/Header/Pipelines/PipelineShadow.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33

44
#include "PipelineBase.h"
55
#include "ResourcesShadow.h"
6+
#include "ResourcesLight.h"
7+
#include "Camera.h"
68
#include "Scene.h"
9+
#include "Configs.h"
10+
11+
#include <array>
712

813
class PipelineShadow final : public PipelineBase
914
{
@@ -13,11 +18,10 @@ class PipelineShadow final : public PipelineBase
1318
ResourcesShadow* resShadow);
1419
~PipelineShadow();
1520

16-
void SetShadowMapUBO(VulkanContext& ctx, ShadowMapUBO& ubo)
17-
{
18-
const uint32_t frameIndex = ctx.GetFrameIndex();
19-
shadowMapUBOBuffers_[frameIndex].UploadBufferData(ctx, &ubo, sizeof(ShadowMapUBO));
20-
}
21+
void CalculateCascade(VulkanContext& ctx,
22+
const Camera* camera,
23+
const LightData* light,
24+
ShadowMapUBO* ubo);
2125

2226
virtual void FillCommandBuffer(VulkanContext& ctx, VkCommandBuffer commandBuffer) override;
2327

@@ -30,6 +34,8 @@ class PipelineShadow final : public PipelineBase
3034
Scene* scene_;
3135
ResourcesShadow* resShadow_;
3236

37+
std::array<VulkanFramebuffer, ShadowConfig::CascadeCount> cascadeFramebuffers_;
38+
3339
std::vector<VulkanBuffer> shadowMapUBOBuffers_;
3440
std::vector<VkDescriptorSet> descriptorSets_;
3541
std::vector<VulkanBuffer> indirectBuffers_;

HelloVulkan/Header/PushConstants.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,9 @@ struct PushConstPBR
2828
float albedoMultipler = 0.0f; // Show albedo color if the scene is too dark, default value should be zero
2929
};
3030

31+
struct PushConstCascadeShadow
32+
{
33+
uint32_t cascadeIndex;
34+
};
35+
3136
#endif

HelloVulkan/Header/Resources/ResourcesShadow.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
#include "VulkanContext.h"
55
#include "VulkanImage.h"
6+
#include "Configs.h"
7+
8+
#include <array>
69

710
struct ResourcesShadow
811
{
@@ -11,10 +14,12 @@ struct ResourcesShadow
1114
~ResourcesShadow();
1215

1316
void CreateSingleShadowMap(VulkanContext& ctx);
17+
void CreateCascadeShadowMap(VulkanContext& ctx);
1418
void Destroy();
1519

1620
public:
1721
VulkanImage shadowMap_;
22+
std::array<VkImageView, ShadowConfig::CascadeCount> views_;
1823

1924
private:
2025
VkDevice device_;

HelloVulkan/Header/UBOs.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef UNIFORM_BUFFER_OBJECTS
22
#define UNIFORM_BUFFER_OBJECTS
33

4+
#include "Configs.h"
45
#include "glm/glm.hpp"
56

67
// General-purpose
@@ -26,21 +27,21 @@ struct RaytracingCameraUBO
2627
struct ShadowMapUBO
2728
{
2829
alignas(16)
29-
glm::mat4 lightSpaceMatrix;
30+
glm::mat4 lightSpaceMatrices[ShadowConfig::CascadeCount];
31+
alignas(16)
32+
glm::vec4 splitValues;
3033
alignas(16)
3134
glm::vec4 lightPosition;
3235
alignas(4)
3336
float shadowMinBias;
3437
alignas(4)
3538
float shadowMaxBias;
3639
alignas(4)
37-
float shadowNearPlane;
38-
alignas(4)
39-
float shadowFarPlane;
40+
float cameraNearPlane;
4041
alignas(4)
41-
float pcfScale;
42+
float cameraFarPlane;
4243
alignas(4)
43-
uint32_t pcfIteration;
44+
float poissonSize;
4445
};
4546

4647
// Per model transformation matrix

HelloVulkan/Header/Vulkan/VulkanContext.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ struct ContextConfig
4444

4545
bool supportBindlessRendering_ = true;
4646

47+
bool supportAnisotropicFilterting = false;
48+
4749
// TODO Set validation layer as optional
4850
};
4951

HelloVulkan/Header/Vulkan/VulkanImage.h

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class VulkanImage
7272
float maxLod = 0.f,
7373
VkFilter minFilter = VK_FILTER_LINEAR,
7474
VkFilter maxFilter = VK_FILTER_LINEAR,
75+
VkBool32 anisoptropy = VK_FALSE,
7576
VkSamplerAddressMode addressMode = VK_SAMPLER_ADDRESS_MODE_REPEAT);
7677

7778
void CreateDefaultSampler(
@@ -80,6 +81,7 @@ class VulkanImage
8081
float maxLod = 0.f,
8182
VkFilter minFilter = VK_FILTER_LINEAR,
8283
VkFilter maxFilter = VK_FILTER_LINEAR,
84+
VkBool32 anisoptropy = VK_FALSE,
8385
VkSamplerAddressMode addressMode = VK_SAMPLER_ADDRESS_MODE_REPEAT);
8486

8587
void CreateImage(
@@ -117,7 +119,6 @@ class VulkanImage
117119
VulkanContext& ctx,
118120
uint32_t width,
119121
uint32_t height,
120-
uint32_t layerCount,
121122
VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT,
122123
VkImageUsageFlags additionalUsage = 0);
123124

@@ -133,8 +134,22 @@ class VulkanImage
133134
VkFormat format,
134135
VkImageAspectFlags aspectFlags,
135136
VkImageViewType viewType = VK_IMAGE_VIEW_TYPE_2D,
136-
uint32_t layerCount = 1,
137-
uint32_t mipCount = 1);
137+
uint32_t mipLevel = 0u,
138+
uint32_t mipCount = 1u,
139+
uint32_t layerLevel = 0u,
140+
uint32_t layerCount = 1u);
141+
142+
static void CreateImageView(
143+
VulkanContext& ctx,
144+
VkImage image,
145+
VkImageView& view,
146+
VkFormat format,
147+
VkImageAspectFlags aspectFlags,
148+
VkImageViewType viewType = VK_IMAGE_VIEW_TYPE_2D,
149+
uint32_t mipLevel = 0u,
150+
uint32_t mipCount = 1u,
151+
uint32_t layerLevel = 0u,
152+
uint32_t layerCount = 1u);
138153

139154
void CopyBufferToImage(
140155
VulkanContext& ctx,

HelloVulkan/HelloVulkan.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@
153153
<None Include="..\Shaders\LightData.glsl" />
154154
<None Include="..\Shaders\PBRPushConstants.glsl" />
155155
<None Include="..\Shaders\Radiance.glsl" />
156+
<None Include="..\Shaders\ShadowMapping\Depth.frag" />
157+
<None Include="..\Shaders\ShadowMapping\Poisson.glsl" />
156158
<None Include="..\Shaders\SlotBased\Mesh.frag" />
157159
<None Include="..\Shaders\SlotBased\Mesh.vert" />
158160
<None Include="..\Shaders\TangentNormalToWorld.glsl" />

0 commit comments

Comments
 (0)