render-by-index-meshid #8
42
README.md
42
README.md
|
|
@ -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
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue