Add depth peeling example for order-independent transparency (OIT)#386
Merged
Conversation
Collaborator
|
Thanks for the example. I have now merged with vsgExamples master, turns out a bit premature as it broke the build on non Windows systems :-| I have fixed the build error - was simply a capitalization issue with an include. There are quite a few warnings that will need fixing too: $ make
[ 25%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/depthpeeling/Bindings.cpp.o
[ 25%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/depthpeeling/Builder.cpp.o
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp: In member function ‘vsg::ref_ptr<vsg::ClearAttachments> vsg::oit::depthpeeling::Builder::createClearAttachments() const’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:111:26: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
111 | attachments.push_back({ VK_IMAGE_ASPECT_COLOR_BIT, 0, {0.0f, 0.0f, 0.0f, 0.0f} });
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:111:26: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:111:26: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:111:26: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:111:26: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:111:26: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:112:26: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
112 | attachments.push_back({ VK_IMAGE_ASPECT_DEPTH_BIT, 0, {0.0f, 0} });
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:112:26: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:112:26: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:112:26: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:112:26: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Builder.cpp:112:26: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
[ 50%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/depthpeeling/PipelineConfigurator.cpp.o
[ 50%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/depthpeeling/RenderGraph.cpp.o
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp: In constructor ‘vsg::oit::depthpeeling::RenderGraph::RenderGraph(vsg::ref_ptr<vsg::Window>, vsg::ref_ptr<vsg::View>)’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp:39:42: warning: declaration of ‘window’ shadows a member of ‘vsg::oit::depthpeeling::RenderGraph’ [-Wshadow]
39 | RenderGraph::RenderGraph(ref_ptr<Window> window, ref_ptr<View> view)
| ~~~~~~~~~~~~~~~~^~~~~~
In file included from /home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.h:5,
from /home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.h:3,
from /home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp:1:
/home/robert/install/include/vsg/app/RenderGraph.h:43:25: note: shadowed declaration is here
43 | ref_ptr<Window> window;
| ^~~~~~
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp: In constructor ‘vsg::oit::depthpeeling::RenderGraph::RenderGraph(vsg::ref_ptr<vsg::Window>, vsg::ref_ptr<vsg::View>)’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp:39:42: warning: declaration of ‘window’ shadows a member of ‘vsg::oit::depthpeeling::RenderGraph’ [-Wshadow]
39 | RenderGraph::RenderGraph(ref_ptr<Window> window, ref_ptr<View> view)
| ~~~~~~~~~~~~~~~~^~~~~~
/home/robert/install/include/vsg/app/RenderGraph.h:43:25: note: shadowed declaration is here
43 | ref_ptr<Window> window;
| ^~~~~~
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp: In constructor ‘vsg::oit::depthpeeling::RenderGraph::RenderGraph(vsg::ref_ptr<vsg::Window>, vsg::ref_ptr<vsg::View>)’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/RenderGraph.cpp:39:42: warning: declaration of ‘window’ shadows a member of ‘vsg::oit::depthpeeling::RenderGraph’ [-Wshadow]
39 | RenderGraph::RenderGraph(ref_ptr<Window> window, ref_ptr<View> view)
| ~~~~~~~~~~~~~~~~^~~~~~
/home/robert/install/include/vsg/app/RenderGraph.h:43:25: note: shadowed declaration is here
43 | ref_ptr<Window> window;
| ^~~~~~
[ 75%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/depthpeeling/Resources.cpp.o
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp: In member function ‘vsg::ref_ptr<vsg::RenderPass> vsg::oit::depthpeeling::Resources::createTransparencyPass(const CreateRenderPassInfo&)’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:72:76: warning: missing initializer for member ‘vsg::SubpassDescription::inputAttachments’ [-Wmissing-field-initializers]
72 | SubpassDescription renderSubpass{0, VK_PIPELINE_BIND_POINT_GRAPHICS};
| ^
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:72:76: warning: missing initializer for member ‘vsg::SubpassDescription::colorAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:72:76: warning: missing initializer for member ‘vsg::SubpassDescription::resolveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:72:76: warning: missing initializer for member ‘vsg::SubpassDescription::depthStencilAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:72:76: warning: missing initializer for member ‘vsg::SubpassDescription::preserveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:72:76: warning: missing initializer for member ‘vsg::SubpassDescription::depthStencilResolveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:90:77: warning: missing initializer for member ‘vsg::SubpassDescription::inputAttachments’ [-Wmissing-field-initializers]
90 | SubpassDescription combineSubpass{0, VK_PIPELINE_BIND_POINT_GRAPHICS};
| ^
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:90:77: warning: missing initializer for member ‘vsg::SubpassDescription::colorAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:90:77: warning: missing initializer for member ‘vsg::SubpassDescription::resolveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:90:77: warning: missing initializer for member ‘vsg::SubpassDescription::depthStencilAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:90:77: warning: missing initializer for member ‘vsg::SubpassDescription::preserveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:90:77: warning: missing initializer for member ‘vsg::SubpassDescription::depthStencilResolveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:106:73: warning: missing initializer for member ‘vsg::SubpassDescription::inputAttachments’ [-Wmissing-field-initializers]
106 | SubpassDescription combineSubpass{0, VK_PIPELINE_BIND_POINT_GRAPHICS};
| ^
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:106:73: warning: missing initializer for member ‘vsg::SubpassDescription::colorAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:106:73: warning: missing initializer for member ‘vsg::SubpassDescription::resolveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:106:73: warning: missing initializer for member ‘vsg::SubpassDescription::depthStencilAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:106:73: warning: missing initializer for member ‘vsg::SubpassDescription::preserveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:106:73: warning: missing initializer for member ‘vsg::SubpassDescription::depthStencilResolveAttachments’ [-Wmissing-field-initializers]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp: In static member function ‘static const vsg::RenderGraph::ClearValues& vsg::oit::depthpeeling::Resources::clearValues()’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
267 | };
| ^
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘VkClearColorValue’ [-Wmissing-braces]
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/depthpeeling/Resources.cpp:267:5: warning: missing braces around initializer for ‘float [4]’ [-Wmissing-braces]
[ 75%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/depthpeeling/ShaderSet.cpp.o
[100%] Building CXX object examples/oit/vsgdepthpeeling/CMakeFiles/vsgdepthpeeling.dir/vsgdepthpeeling.cpp.o
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/vsgdepthpeeling.cpp: In function ‘vsg::ref_ptr<vsg::Group> createScene(vsg::oit::depthpeeling::Builder&, vsg::ref_ptr<vsg::Data>, bool)’:
/home/robert/dev/vsgExamples/examples/oit/vsgdepthpeeling/vsgdepthpeeling.cpp:135:38: warning: missing braces around initializer for ‘std::__array_traits<vsg::t_vec4<float>, 5>::_Type’ {aka ‘vsg::t_vec4<float> [5]’} [-Wmissing-braces]
135 | vsg::vec4(0.0, 0.0, 1.0, 0.5)};
| ^
[100%] Linking CXX executable ../../../bin/vsgdepthpeeling
[100%] Built target vsgdepthpeeling |
Collaborator
|
I have fixed the remaining warnings and have moved the example from examples/oit/vsgdepthpeeling into examples/app as a single example doesn't warrent it's own dedicated directory category. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request adds a depth peeling example to VulkanSceneGraph, intended both as a demonstration and as a prototype for potential integration of order-independent transparency (OIT) techniques into VSG.
The example implements a multi-pass depth peeling approach to correctly render overlapping transparent geometry without requiring manual sorting. It is designed with clarity in mind and aims to explore how such a technique could fit into VSG’s rendering architecture.
This work is related to the ongoing discussion about transparency handling in VSG:
vsg-dev/VulkanSceneGraph#1290
The example can serve as:
Key aspects:
Usage:
The example can be built and run via the standard vsgExamples workflow.
Notes: