This project is a shooter demo that showcases advanced rendering and game mechanics.
Key Characteristics of the Project
- Real-time rendering: The project features two different renderers— a software renderer and a DirectX 11 renderer. This allows flexibility in rendering techniques and provides insight into both software and hardware-accelerated rendering methods.
- Phong lighting model: Both renderers utilize the Phong lighting model, which simulates realistic lighting interactions on 3D objects, enhancing the visual quality of the game scene.
- SIMD SSE2 instructions: To improve performance, the software renderer utilizes SIMD SSE2 instructions, enabling the simultaneous processing of multiple data points, resulting in faster rendering times.
- Multithreaded tile-based rendering: The software renderer is optimized with a multithreaded, tile-based rendering approach, allowing the processing of different sections of the screen concurrently, further improving performance.
- Octree-based scene management: An octree structure is used to manage the 3D scene, improving performance by efficiently organizing and retrieving objects in the scene for collision detection and rendering.
- Collision detection and resolution: The game features robust collision detection for AABBs (Axis-Aligned Bounding Boxes), OBBs (Oriented Bounding Boxes), capsules, and spheres. This ensures accurate interaction between game objects, with proper resolution of collisions when they occur.
- Integration of XAudio2: XAudio2 is used for sound integration, enabling 3D audio effects and a rich auditory experience, enhancing immersion in the game.
- Integration of XInput: XInput support is implemented to allow joystick input, enabling compatibility with a wide range of gaming controllers for a more flexible and enjoyable player experience.
Through this shooter demo project, I gained valuable insights into performance optimization techniques. By implementing SIMD instructions (SSE2) and multithreading, I was able to significantly improve the software renderer's performance. Using a tile-based renderer further boosted the efficiency of rendering, allowing for faster processing of large scenes. Additionally, the use of octrees for scene management allowed me to optimize collision detection and resolution. Overall, this project deepened my understanding of real-time performance challenges and the importance of optimizing both rendering and physics calculations to achieve smooth gameplay.