Sample Programs

Hieroglyph 3 is a Direct3D 11 rendering framework, and rendering frameworks are used to produce samples that implement rendering algorithms.  The samples that are included with the main Hieroglyph 3 distribution are described here.  If you see a sample that looks interesting to you, then head over to the Hieroglyph 3 repository page to download the latest copy of the framework.

There are two different general groups of samples.  Some of the samples demonstrate very simple programs, and are generally used to do something with Hieroglyph 3.  The other group of samples use Hieroglyph 3 to implement some interesting rendering techniques or effects.  This page will provide information about the advanced samples first, with a short description of the basic samples further down below.

ParticleStorm

The particle storm demo implements a particle system (almost) entirely on the GPU.  The individual particle states reside in a structured buffer resource, and particles are dynamically inserted, updated and removed through the use of compute shaders.  The compute shaders utilize the Append/Consume unordered access views to manage the particles without the host C++ program knowing how many particles are currently active.  The resulting particle state is rendered with an indirect draw call, which again allows the particles to be drawn without the CPU knowing how many are there.  This sample is based on Chapter 12 of Practical Rendering and Computation with Direct3D 11.

DeferredRendering

The DeferredRendering demo contains a sample implementation of deferred rendering with multiple G-Buffers. The sample demonstrates several common optimizations that can be used to accelerate a deferred renderer in Direct3D 11, and also demonstrates how to implement artifact-free MSAA. The sample allows toggling on and of the various opimization modes so that the performance difference can be seen in real time, and also has debugging visualization modes for demonstrating how the basic deferred rendering algorithm works.  This sample is based on Chapter 11 of Practical Rendering and Computation with Direct3D 11.

LightPrepass

The LightPrepass sample implements Light Prepass Deferred Rendering, which is a variant of deferred rendering which uses a simplified G-Buffer and two geometry passes. Like the DeferredRendering sample it contains common optimizations, and also implements MSAA. In addition, the light rendering is implemented using instancing to batch many lights into a single draw call. The geometry shader is also used to expand points into quads based on the size of the light source.  This sample is based on Chapter 11 of Practical Rendering and Computation with Direct3D 11.

MirrorMirror

The MirrorMirror sample provides two different types of objects within its rendered scenes: diffuse objects and reflective objects.  While the diffuse objects are rendered in a traditional fashion, the reflective objects each require an environment map to render its surroundings.  These environment maps are generated dynamically every frame with dual paraboloid maps.  The generation process allows the previous frame’s environment maps to be used, which provides multiple bounce reflections to be visible.  In addition, each rendering pass takes advantage of the multi-threading capabilities of Direct3D 11, providing a significant performance boost when compared to single-threaded mode.  This sample is based on Chapter 13 of Practical Rendering and Computation with Direct3D 11.

ImageProcessor

The ImageProcessor sample provides an interesting test bed for using the compute shader to perform image processing operations.  Several variations of a Gaussian filter, including brute force, separable, and cached separable implementations can be compared.  In addition, two variants of a Bilateral filter are also supplied which produce nearly identical results, but with significantly different performance characteristics.  This sample is based on Chapter 10 of Practical Rendering and Computation with Direct3D 11.

WaterSimulationI

The WaterSimulationI sample generates a heightfield to represent a fluid’s surface over time.  This simulation is performed in a compute shader, which processes 16×16 blocks of the fluid surface at a time.  This modular processing technique allows the system to scale up to very large surface sizes and fully utilize the power of today’s modern GPUs.  This sample is based on Chapter 12 of Practical Rendering and Computation with Direct3D 11.

AmbientOcclusionI

The AmbientOcclusionI sample performs a screen space ambient occlusion calculation in the compute shader, and then performs a blurring operation on the results to remove the high frequency noise from it.  This sample was based on the Game Programming Gems 8 chapter: Ambient Occlusion using DirectX Compute Shader.

SkinAndBones

The SkinAndBones sample demonstrates several different ways to render meshes.  A static mesh, a vertex skinned mesh, and also a displacement mapped skinned mesh are all rendered side by side to show the differences between them.  The displacement mapped skinned mesh utilizes the tessellation capabilities of Direct3D 11 to perform seamless tessellation in hardware.  This sample is based on Chapter 8 of Practical Rendering and Computation with Direct3D 11.

CurvedPointNormalTriangles

This sample is based on Chapter 9 of Practical Rendering and Computation with Direct3D 11.

InterlockingTerrainTiles

This sample is based on Chapter 9 of Practical Rendering and Computation with Direct3D 11.

ViewFromTheWindow

The ViewFromTheWindow sample generates many windows which can be moved in whatever location that is desired.  The image that appears in the window’s client area corresponds to the area of a rendered scene that would be located in that region of the desktop if it were rendered as a fullscreen application.

TessellationParams

This sample is based on Chapter 4 of Practical Rendering and Computation with Direct3D 11.

BasicApplication

BasicComputeShader

BasicTessellation

BasicRenderViews

BasicScenes

BasicScripting

Advertisements