render-by-index-meshid #8

Merged
kidrigger merged 6 commits from render-by-index-meshid into canon 2025-01-11 20:51:48 +01:00
2 changed files with 38 additions and 13 deletions
Showing only changes of commit 81541ec842 - Show all commits

View File

@ -8,30 +8,35 @@ A Vulkan based renderer created with Vulkan 1.3 in C++.
- [X] Load Vertex Data - [X] Load Vertex Data
- [X] Load Material Data - [X] Load Material Data
- [ ] Load Animation Data - [ ] Load Animation Data
- [ ] Load Camera
- [ ] Support Specular Materials - [ ] Support Specular Materials
- [X] Bindless Descriptors - [X] Bindless Descriptors
- [X] Simplified Descriptor Creation Pipeline - [X] Simplified Descriptor Creation Pipeline
- [X] Lighting Equations
- [X] Blinn-Phong
- [X] PBR / IBL
- [ ] Debugging - [ ] Debugging
- [ ] Tracy Integration - [ ] Tracy Integration
- [X] Dear ImGui Integration - [X] Dear ImGui Integration
- [ ] Transparency - [ ] Transparency
- [ ] Sorted - [ ] Sorted
- [ ] Order Independent - [ ] Order Independent (Depth Peeling)
- [ ] Shadows v1 - [ ] Shadows
- [ ] Shadow Mapping
- [ ] Omnidirectional Cubemap Shadows - [ ] Omnidirectional Cubemap Shadows
- [ ] SpotLight Shadows - [ ] SpotLight Shadows
- [ ] Directional Shadows - [ ] Directional Shadows
- [ ] Cascaded Shadows - [ ] Cascaded Shadows
- [ ] PCF - [ ] PCF
- [ ] Lighting / Shading Pipelines - [ ] Omnidirectional Dual Paraboloid Shadows
- [ ] Blinn-Phong - [ ] Shadow Masks
- [ ] PBR - [ ] Perspective Shadow Mapping
- [ ] IBL - [ ] RTX Shadows
- [ ] Rendering Techniques - [ ] Rendering Techniques
- [ ] Forward Rendering - [X] Forward Rendering
- [ ] Deferred Rendering - [ ] Deferred Rendering
- [ ] Clustered-Forward Rendering - [ ] Clustered-Forward Rendering
- [ ] V-Buffer Rendering
- [ ] Light Prepass
- [ ] Ambient Occlusion - [ ] Ambient Occlusion
- [ ] SSAO - [ ] SSAO
- [ ] HBAO - [ ] HBAO
@ -43,16 +48,29 @@ A Vulkan based renderer created with Vulkan 1.3 in C++.
- [ ] Cubemap/Probe Reflection - [ ] Cubemap/Probe Reflection
- [ ] Ray-Traced Reflection - [ ] Ray-Traced Reflection
- [ ] Global Illumination - [ ] Global Illumination
- [ ] Light Mapping
- [ ] Light Probes
- [ ] Precomputed Radiance Transfer - [ ] Precomputed Radiance Transfer
- [ ] Voxel Cone Tracing - [ ] Voxel Cone Tracing
- [ ] SDFGI - [ ] SDFGI
- [ ] RTXGI - [ ] RTXGI
- [ ] Shadows v2
- [ ] Omnidirectional Dual Paraboloid Shadows
- [ ] Perspective Shadow Mapping
- [ ] RTX Shadows
- [ ] Animation - [ ] Animation
- [ ] Skeletal Animation - [ ] Skeletal Animation
- [ ] TBD - [ ] TBD
- [ ] Particle Effects - [ ] Particle Effects
- [ ] Full Path Tracing - [ ] Full Path Tracing
- [ ] Culling
- [ ] Frustrum Culling
- [ ] Depth based Occlusion Culling
- [ ] TBD
- [ ] Performance Techniques
- [ ] Instancing
- [ ] Batching
- [ ] Depth Prepass
- [ ] Level of Detail
- [ ] Shadow Atlases
- [X] Buffer sub-division
- [ ] Resource streaming
- [ ] Light Effects
- [ ] Volumetric Lighting
- [ ] Depth based Fog

View File

@ -116,7 +116,7 @@ main(int, char *[])
for (int j = -1; j <= 1; ++j) for (int j = -1; j <= 1; ++j)
{ {
INFO("{}, {}", i, j); INFO("{}, {}", i, j);
auto &model = models.emplace_back(std::move(assetLoader.LoadModelToGpu(MODEL_FILE, "Main Model"))); auto &model = models.emplace_back(assetLoader.LoadModelToGpu(MODEL_FILE, "Main Model"));
registry.get<CDynamicTransform>(model.m_RootEntity).m_Position = vec3(2 * i, 0, 2 * j); registry.get<CDynamicTransform>(model.m_RootEntity).m_Position = vec3(2 * i, 0, 2 * j);
} }
} }
@ -372,6 +372,7 @@ main(int, char *[])
DepthImage *currentDepthImage = &depthImages[currentFrame->m_FrameIdx]; DepthImage *currentDepthImage = &depthImages[currentFrame->m_FrameIdx];
AttachmentImage *currentAttachment = &attachmentImages[currentFrame->m_FrameIdx]; AttachmentImage *currentAttachment = &attachmentImages[currentFrame->m_FrameIdx];
// Resize outdated attachments
if (currentAttachment->m_Extent.width != internalResolution.width || if (currentAttachment->m_Extent.width != internalResolution.width ||
currentAttachment->m_Extent.height != internalResolution.height) currentAttachment->m_Extent.height != internalResolution.height)
{ {
@ -388,14 +389,17 @@ main(int, char *[])
vk::Image currentImage = currentAttachment->m_Image; vk::Image currentImage = currentAttachment->m_Image;
vk::ImageView currentImageView = currentAttachment->m_View; vk::ImageView currentImageView = currentAttachment->m_View;
// Ready the barrier structs
preRenderBarrier.image = currentImage; preRenderBarrier.image = currentImage;
postRenderBarriers[0].image = currentImage; postRenderBarriers[0].image = currentImage;
postRenderBarriers[1].image = currentSwapchainImage; postRenderBarriers[1].image = currentSwapchainImage;
transferDstToGuiRenderBarrier.image = currentSwapchainImage; transferDstToGuiRenderBarrier.image = currentSwapchainImage;
prePresentBarrier.image = currentSwapchainImage; prePresentBarrier.image = currentSwapchainImage;
// Write Camera
ubo.Write(&device, 0, sizeof cameraController.m_Camera, &cameraController.m_Camera); ubo.Write(&device, 0, sizeof cameraController.m_Camera, &cameraController.m_Camera);
// Update all root dynamic object transforms.
for (auto [entity, dynTransform, globalTransform] : rootNodeUpdateView.each()) for (auto [entity, dynTransform, globalTransform] : rootNodeUpdateView.each())
{ {
auto scale = glm::scale(mat4{1.0f}, dynTransform.m_Scale); auto scale = glm::scale(mat4{1.0f}, dynTransform.m_Scale);
@ -406,6 +410,7 @@ main(int, char *[])
} }
// Has been sorted and ordered by parent. // Has been sorted and ordered by parent.
// Update all dynamic object transforms.
for (auto [entity, dynTransform, parent, globalTransform] : nodeWithParentsUpdateView.each()) for (auto [entity, dynTransform, parent, globalTransform] : nodeWithParentsUpdateView.each())
{ {
auto scale = glm::scale(mat4{1.0f}, dynTransform.m_Scale); auto scale = glm::scale(mat4{1.0f}, dynTransform.m_Scale);
@ -421,6 +426,8 @@ main(int, char *[])
nodeDrawInfo.clear(); nodeDrawInfo.clear();
nodeData.reserve(objectCount); nodeData.reserve(objectCount);
nodeDrawInfo.reserve(objectCount); nodeDrawInfo.reserve(objectCount);
// Write all objects into the node data to be pushed.
for (auto [entity, globalTransform, mesh, material] : renderableObjectsGroup.each()) for (auto [entity, globalTransform, mesh, material] : renderableObjectsGroup.each())
{ {
nodeData.push_back({ nodeData.push_back({