Branimir Karadžić 9 lat temu
rodzic
commit
4744a44880
1 zmienionych plików z 52 dodań i 35 usunięć
  1. 52 35
      examples/31-rsm/reflectiveshadowmap.cpp

+ 52 - 35
examples/31-rsm/reflectiveshadowmap.cpp

@@ -9,40 +9,57 @@
 #include "imgui/imgui.h"
 #include <bx/rng.h>
 
-// Intro:
-// RSM (reflective shadow map) is a technique for global illumination.
-// It is similar to shadow map.  It piggybacks on the shadow map, in fact.
-
-// RSM is compatible with any type of lighting which can handle handle
-// a lot of point lights.  This sample happens to use a deferred renderer,
-// but other types would work.
-
-// Overview:
-// 1.  Draw into G-Buffer
-// 2.  Draw Shadow Map (with RSM piggybacked on)
-// 3.  Populate light buffer
-// 4.  Deferred "combine" pass.
-
-// Details:
-// 1.  G-Buffer:
-// Typical G-Buffer with normals, color, depth.
-// 2.  RSM:
-// A typical shadow map, except it also outputs to a "RSM" buffer.
-// The RSM contains the color of the item drawn, as well as a scalar value which represents
-// how much light would bounce off of the surface if it were hit with light from the origin
-// of the shadow map.
-// 3.  Light Buffer
-// We draw a lot of spheres into the light buffer.  These spheres are called VPL (virtual
-// point lights).  VPLs represent bounced light, and let us eliminate the classic "ambient"
-// term.  Instead of us supplying their world space position in a transform matrix,
-// VPLs gain their position from the shadow map from step 2, using an unprojection.  They gain
-// their color from the RSM.  You could also store their position in a buffer while drawing shadows,
-// I'm just using depth to keep the sample smaller.
-// 4.  Deferred combine:
-// Typical combine used in almost any sort of deferred renderer.
-
-// References
-// http://www.bpeers.com/blog/?itemid=517
+/*
+ * Intro
+ * =====
+ *
+ * RSM (reflective shadow map) is a technique for global illumination.
+ * It is similar to shadow map.  It piggybacks on the shadow map, in fact.
+ *
+ * RSM is compatible with any type of lighting which can handle handle
+ * a lot of point lights.  This sample happens to use a deferred renderer,
+ * but other types would work.
+ *
+ * Overview:
+ *
+ *  - Draw into G-Buffer
+ *  - Draw Shadow Map (with RSM piggybacked on)
+ *  - Populate light buffer
+ *  - Deferred "combine" pass.
+ *
+ * Details
+ * =======
+ *
+ * ## G-Buffer
+ *
+ * Typical G-Buffer with normals, color, depth.
+ *
+ * ## RSM
+ *
+ * A typical shadow map, except it also outputs to a "RSM" buffer.
+ * The RSM contains the color of the item drawn, as well as a scalar value which represents
+ * how much light would bounce off of the surface if it were hit with light from the origin
+ * of the shadow map.
+ *
+ * ## Light Buffer
+ *
+ * We draw a lot of spheres into the light buffer.  These spheres are called VPL (virtual
+ * point lights).  VPLs represent bounced light, and let us eliminate the classic "ambient"
+ * term.  Instead of us supplying their world space position in a transform matrix,
+ * VPLs gain their position from the shadow map from step 2, using an unprojection.  They gain
+ * their color from the RSM.  You could also store their position in a buffer while drawing shadows,
+ * I'm just using depth to keep the sample smaller.
+ *
+ * ## Deferred combine
+ *
+ * Typical combine used in almost any sort of deferred renderer.
+ *
+ * References
+ * ==========
+ *
+ * http: *www.bpeers.com/blog/?itemid=517
+ *
+ */
 
 // Render passes
 #define RENDER_PASS_GBUFFER      0  // GBuffer for normals and albedo
@@ -424,7 +441,7 @@ public:
 			// Use debug font to print information about this example.
 			bgfx::dbgTextClear();
 			bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/31-reflectiveshadowmap");
-			bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: GI via reflective shadow map.");
+			bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Global Illumination with Reflective Shadow Map.");
 			bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
 
 			// Update camera