Graphics Programming
A scene built with DirectX11 focusing on different aspects of the programmable render pipeline.
University Assignment | C++ | 3 months
-
Lighting
Lighting system that allows multiple light sources in the scene, combining ambient light, directional light and two spotlights. -
Vertex Manipulation
By reading out data from a heightmap, vertices are displaced and their normal vectors are recalculated using the bi-tangent approximation technique. -
Multi-Pass Rendering
Information from the scene is rendered into seperate render targets that stores information of the scene as textures. These can be retrieved at later stages of the rendering process. -
Shadow Mapping
The shadow map stores the distance of each light to the geometry in the scene. This depth map is then used to identify parts of the scene which are unlit and therefore throw shadows. -
Post-Processing
A simple glow effect is achieved by rendering the scene view into a render texture, filtering out the brightest pixels and then blurring these with different sets of shaders. -
Graphics Debugging
Use of tools for debugging graphics processes, such as RenderDoc or NVIDIA Nsight.
Behind the Scenes
Background
My journey in graphics programming started with this project as my first introduction to shaders. Through this experience, I gained an in-depth understanding of the DirectX11 rendering pipeline and how it can be manipulated to create stunning visual effects. I also learned about the intricate communication between the GPU and CPU that is critical to the performance of real-time graphics.
Reflection
During this project, I had the opportunity to work closely with Frank Luna’s highly acclaimed book, „Introduction to 3D Game Programming with DirectX 11,“ as well as „Realtime Rendering.“ Although the project presented a steep learning curve, I was fascinated by the aspect of working on the visual outcome of a scene, which perfectly combines functional logic and artistic eye.
The project also served as a springboard for my bachelor’s thesis, which further explored the potential of shaders. In particular, I am interested in exploring more shader stages, such as tessellation, which allows for dynamic LOD, and working with the Compute Shader. These techniques provide valuable artistic control by enabling me to change the visual outcome of the scene after it has been rendered.
Overall, my introduction to graphics programming and working with shaders was a steep learning curve, but I became deeply passionate about it. The combination of functional logic and artistic expression continues to fascinate me, and I am excited to continue exploring new tools and techniques in this field.