update irradiance caculation

pull/2/head
ink-soul 2023-05-24 16:10:36 +08:00
parent 441aca4df4
commit 463ac6fe59
3 changed files with 999 additions and 9 deletions

View File

@ -20,6 +20,17 @@
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "clang_cl_x64_x64" ]
},
{
"name": "x64-Clang-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "clang_cl_x64_x64" ],
"variables": []
}

File diff suppressed because it is too large Load Diff

View File

@ -249,6 +249,11 @@ public:
vks::Buffer skinSSBO;
} shaderData;
struct StagingBuffer {
VkBuffer buffer;
VkDeviceMemory memory;
} vertexStaging, indexStaging;
struct Pipelines {
VkPipeline solid;
VkPipeline wireframe = VK_NULL_HANDLE;
@ -325,6 +330,28 @@ public:
vks::Texture2D lutBrdf;
} ibltextures;
struct OffScreen
{
VkImage image;
VkImageView view;
VkDeviceMemory memory;
VkFramebuffer framebuffer;
} offscreen;
struct IrradiancePushBlock
{
glm::mat4 mvp;
// Sampling deltas
float deltaPhi = (2.0f * float(M_PI)) / 180.0f;
float deltaTheta = (0.5f * float(M_PI)) / 64.0f;
} irradinacePushBlock;
struct PrefilterPushBlock {
glm::mat4 mvp;
float roughness;
uint32_t numSamples = 32u;
} prefilterPushBlock;
VulkanglTFModel skyboxModel;
VulkanExample();
@ -356,7 +383,7 @@ public:
shaderData.buffer.destroy();
shaderData.skinSSBO.destroy();
}
void loadglTFFile(std::string filename);
void loadglTFFile(std::string filename, VulkanglTFModel& model, bool bSkyboxFlag = false);
virtual void getEnabledFeatures();
void createAttachment(VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment* attachment, uint32_t width, uint32_t height);
virtual void setupFrameBuffer();
@ -365,6 +392,9 @@ public:
void setupDescriptors();
void preparePipelines();
void prepareToneMappingPipeline();
void generateIrradianceCubemap();
void generatePrefilteredCubemap();
void generateBRDFLUT();
void prepareUniformBuffers();
void updateUniformBuffers();
void prepare();