diff --git a/demos/CubeMapping/README.md b/demos/CubeMapping/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..fff34fc9a93cf0f0979d99067ac489edcd014a78
--- /dev/null
+++ b/demos/CubeMapping/README.md
@@ -0,0 +1,13 @@
+# CubeMapping
+A demo project to show how to implement cube maps with the VkCV framework
+
+![Screenshot of CubeMapping](../../screenshots/CubeMapping.png)
+
+## Details
+
+Cube maps can be used to create the illusion of a big environment, render a highly detailed sky 
+around the camera or to create very efficient reflections on smooth surfaces.
+
+The cube map texture will contain six different images which are stored on different layers of the
+image resource in Vulkan. The shaders can later simply access the pixel data via a 3D directional
+vector.
\ No newline at end of file
diff --git a/demos/InstancingDemo/README.md b/demos/InstancingDemo/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..304a366baa8b3e1f880f84678c9d1987ccba7a75
--- /dev/null
+++ b/demos/InstancingDemo/README.md
@@ -0,0 +1,10 @@
+# InstancingDemo
+A demo project to show how to render meshes using instancing with the VkCV framework
+
+![Screenshot of InstancingDemo](../../screenshots/InstancingDemo.png)
+
+## Details
+
+Recording many draw calls can be expensive for your GPU because each draw call has to manage a lot
+of data to work properly. But in cases you want to render the same vertex data multiple times with
+only slight variations, you can use instancing to save up resource cost.
\ No newline at end of file
diff --git a/demos/NormalMapping/README.md b/demos/NormalMapping/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7069282beaecb31b0d0f6004c8cce3b394c9a080
--- /dev/null
+++ b/demos/NormalMapping/README.md
@@ -0,0 +1,13 @@
+# NormalMapping
+A demo project to show how to use normal maps with the VkCV framework
+
+![Screenshot of NormalMapping](../../screenshots/NormalMapping.png)
+
+## Details
+
+Ideally we want to render highly detailed meshes with a GPU. But that can be very expensive in terms
+of processing power. It is much more efficient to load such details like normal vectors from a
+texture instead of using only interpolation between vertices to calculate them.
+
+So we get a lot of visual details without many vertices actually processed. It is a great tradeoff 
+between processing power and memory usage.
\ No newline at end of file
diff --git a/demos/SSAO/README.md b/demos/SSAO/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a05e4f9c056ee57f81b8b9f87c55112eb1482ab3
--- /dev/null
+++ b/demos/SSAO/README.md
@@ -0,0 +1,14 @@
+# SSAO
+A demo project to show how to use screen-space ambient occlusion with the VkCV framework
+
+![Screenshot of SSAO](../../screenshots/SSAO.png)
+
+## Details
+
+Using rasterization for rendering has one huge drawback. We usually don't have proper indirect 
+lighting. That also means that we don't get any ambient occlusion or indirect shadows for the 
+rendered scene.
+
+This project shows off a technique which utilizes deferred shading to calculate the amount of 
+occlusion by other geometry for each pixel. The technique will only use information from the 
+screen-space. So keep in mind it is limited in accuracy.
\ No newline at end of file
diff --git a/screenshots/CubeMapping.png b/screenshots/CubeMapping.png
new file mode 100644
index 0000000000000000000000000000000000000000..3013478f47a42eaa59ae1148ef0aad91e930bd46
--- /dev/null
+++ b/screenshots/CubeMapping.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a68b5ce3ff65ee4d1ef24885a95bbe359bc33e944db0ab99219bf4e174b1c750
+size 1288458
diff --git a/screenshots/InstancingDemo.png b/screenshots/InstancingDemo.png
new file mode 100644
index 0000000000000000000000000000000000000000..2fbc52236438665126e70f6004b676be342ebede
--- /dev/null
+++ b/screenshots/InstancingDemo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b72f6e5bd8b35af08e15453be84c3e8df7c4b8a80b62f6f55541a095741745f1
+size 202572
diff --git a/screenshots/NormalMapping.png b/screenshots/NormalMapping.png
new file mode 100644
index 0000000000000000000000000000000000000000..969b0008939747f8e61403c561588033564d5aee
--- /dev/null
+++ b/screenshots/NormalMapping.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25b95d7d195ef64eb68155defcd4e7c14fcdf9a34050d9fddfdfcd2eb37e73bf
+size 156313
diff --git a/screenshots/SSAO.png b/screenshots/SSAO.png
new file mode 100644
index 0000000000000000000000000000000000000000..32aa50d06a1880cfc2cd9637b08deb0096d7a7ad
--- /dev/null
+++ b/screenshots/SSAO.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:346b195d4868e9c39e15c28282dad21c8f4de4b836ef4be41567a9dffac70040
+size 359407