C++ | Direct3D 11

Omnidirectional Shadow Mapping

An implementation of omnidirectional shadow mapping with a single point light source. The depth cube map is computed in a single pass using Geometry Shaders and Multiple Render Targets (MRT).

Environment Mapping with Geometry Shaders

An implementation of environment mapping. Traditional environment mapping (Direct3D 9 and below) requires each face of a cube map to be rendered in 6 separate passes. This implementation uses Direct3D 11 Geometry Shaders to re-project primitives into multiple render targets (MRT) producing the cube map in a single pass.

Adaptive Level of Detail via Hardware Tessellation

An implementation of DirectX 11 hardware tessellation. A spherical displacement function is used to position generated vertices. Tessellation detail is calculated based on the view’s distance from the object of interest. This adaptive approach keeps the cost of distant objects low, while increasing the detail of closer objects on the fly.

Shadowing

Multi-View Soft Shadows (MVSS)

An implementation of MVSS similar to Louis Bavoil’s in NVIDIA’s SDK11. As described by Louis, this technique “renders contact-hardening shadows by averaging hard shadows from multiple point lights evenly distributed on an area light.”

Percentage Closer Filtering (PCF)

Percentage Closer Filtering (PCF) applied to shadow maps to reduce aliasing. High filtering kernels can soften the shadow edge for an approximation of the penumbra.

Shadow Mapping

An implementation of the basic shadow mapping technique using a single point light source and a 2048 x 2048 depth (shadow) map.

Texturing and Materials

Normal Mapping

An implementation of normal mapping (also known as bump mapping) first presented by Jim Blinn. Notice how flat surfaces can appear to have depth detail without additional geometry when viewed straight on.

Basic Techniques

Phong & Blinn-Phong Shading

An implementation of the Phong Lighting model for specular highlights. Includes the Blinn-Phong variation, as well as normalized versions of each to demonstrate constant total reflectance per surface area.

Light Attenuation & Range

An implementation of light attenuation for point light sources. Models the radiant flux of a light source through a range factor and attenuation function.

GPU Instancing

An implementation of GPU instancing using DirectX 11’s DrawIndexedInstanced(). The column model is exported to Collada from Crytek’s Sponza scene.

Models & Mesh Hierarchy

An implementation of OBJ file format load and parse. Multiple mesh support for hierarchical models as well as per mesh materials. Lit with a single directional light.