Engine Design
c++, hlsl, directx
building a game engine from scratch
january - may 2025
key skills learned:
- advanced graphics debugging though Visual Studio
- writing complex hlsl shaders
- profiling multithreaded jobs to analyze performance
- designing rigorous unit tests
- applying high-level vector math

- added a debug line to verify the position calculations before adding rotations
- utilized debug axes to visualize joint positions/rotations
- made a bloom shader to isolate the bright parts of the image
- added down-sampled targets, half and quarter, to apply a two-pass gaussian blur with linear sampling
- implemented two different blend states (opaque and additive) to add the bloom filter onto the original rendering


- created a new input layout to be able to take in the tangent variable
- implemented the normal map shader
- created a simple rotation component that can be added to any object to verify the normal map works properly
- wrote this data to both a txt and json file to save the timing of the various functions being tracked
- implemented a job manager and multithreaded workers to handle various jobs
- learned to use chrome tracing to visualize that data ↓



- designed a unit test system for the AABB-AABB and AABB-LineSegment intersection
- added a collision component to the player character so that it can stand on platforms and fall if not on the ground


- modified lambert to follow half-life's shading model, half-lambert (let the light wrap around the object, only hit black at 180°)
- finally, added a rim shader to the half-lambert
- created an animation class to dictate how those bones will move over the course of an animation
- added a skinned shader to handle the the matrix vector and all the bones of the model


- implemented json level loading for scene objects
- added components to scene objects to allow for different behavior, demonstrated with a point light component
- implemented the lighting system to keep track of point lights in the scene
- created a phong shader to consider point light colors, material constants, and color/texture of the cube


- loaded a texture and created a new mesh to handle its uv coordinates
- added that texture information to the cube shader
- added the vertex and index arrays for the cube, taking into account proper draw order


- implemented a simple shader to render the triangle on screen
- created helper classes (VertexBuffer, RenderObj) to encapsulate rendering of simple objects