Skip to content
Sascha Willems edited this page Aug 30, 2016 · 14 revisions

List of planned examples

This is a loose list of examples that I plan on adding to this repository. No guarantee that these will make it.

Dynamic terrain tessellation

Rendering a terrain using dynamic tessellation, texture arrays for textures, etc.

Dynamic cube mapping

Omni directional shadows already use a dynamic cube map. The new example would use a dynamic cube map for reflections. Maybe combined with layered rendering for single pass dynamic cube maps using the geometry shader and doing a full mip map chain (refs #178).

Indirect (multi) draw

Instanced rendering is already there, indirect with maybe multi draw is a pretty recent (GL) feature, so an example on this rendering multiple instances of different geom (need to store in one buffer) would be a nice addition.

Sparse texturing

Maybe also based on a terrain that loads sparse mip maps delayed to showcase the effect.

PBR

Already started one on the develop branch. Using a more sophisticated lighting model like Cook-Torrance and some HDR stuff.

SSAO

Based on the defferred shading example. Maybe go with HBAO.

Separable filter using compute

Demonstrate the use of shared memory to do a separable filter using e.g. for a prefix sum to do something like depth of field.

Advanced shadow mapping

Example to show off cascaded shadow maps.

Deferred shadow mapping

Based on deferred shading, add shadows maybe with multiple lights.

Additional geometry shader samples

The normal debugging one is the most basic use case for a geometry shader. Additional demos would be nice, referenced by the dynamic cube map example. (update: partially done with deferred shadows using gs invocations for layered rendering)

Atomics

Maybe OIT, which is the most common (?) use case for atomics. Would need to check if fragmentStoresAndAtomics is supported.

Read back

Maybe color picking. Some example that reads back from the framebuffer and uses that data to do something with it.

Async compute

Because that's the latest hype and something that can be easily implemented with Vulkan. Hardest part will be finding a nice use case for a simple example.

GPU Skinning

The current skinning example does most of the calculations on the CPU. An additional one that does this one the GPU would make sense. Maybe with a more complex mesh?

Memory allocation

Demonstrating a custom block (heap) allocator that allocates in large chunks rather than the small separate allocations done by the other examples (which is not the best way to allocate in Vulkan). Maybe also use the custom allocation callbacks.

Voxelization

As a base for stuff like GI. No native conservative rasterization support in Vulkan (yet), so maybe with GS?

Run time mip chain generation

Instead of loading offline generated mip maps, show how to generate a complete mip chain at runtime. Including multiple samplers to show off the difference.

SPIR-V specialization

Specialization constants can be used to change the behavior of a shader without having to change the shader itself and can be used to generate multiple pipelines from one shader with different branches that are determined by specialization constants.

Simple example that uses these for generating multiple pipelines from one "uber" shader.