Back to Projects
Game Dev · Created at Sep 20, 2024 · Last updated at Sep 20, 2024 · 2 mins read

Daemon Chess

A 3D chess game with procedural piece geometry, Blinn-Phong shading, and raycast-based interaction, built on a custom C++ engine.

C++ DirectX 11 HLSL Chess 3D Graphics

Overview

Daemon Chess is a 3D chess game built on Daemon Engine as a course assignment at SMU Guildhall. Every piece is procedurally constructed from geometric primitives (spheres, cylinders, AABB3s, OBB3s) defined in XML, with OBJ models also supported through a ResourceSubsystem I built to improve loading performance and asset management. The board renders with Blinn-Phong shading and a bloom post-process pass.

Players interact through a free-fly 3D camera — aim at a piece, click to select, then click a valid destination to move. A ghost piece preview shows where the piece will land before committing. The game implements the full chess rule set: pawn double-step, en passant, castling, pawn promotion, path blocking, and king adjacency.

Highlights

The raycast-based 3D interaction was the hardest part of this assignment. Instead of clicking squares on a flat 2D board, the player aims a camera ray that tests against AABB3 volumes (board squares) and CylinderZ3D volumes (pieces), with the closest hit determining the selection. Making the interaction feel good required more than just hit detection — I had to implement piece selection and cancellation states, plus ghost pieces that render at every valid destination to hint the player’s options. The ghost piece feedback turned a technically correct but confusing interaction into something intuitive.

Pieces smoothly interpolate to their target positions over 2 seconds, with knights following a parabolic hop arc. Captured pieces play a sinking animation before removal through a delayed cleanup queue. These are small touches, but they’re what make the difference between “chess logic running in 3D” and “a chess game you’d actually want to play.”

What I Learned

The obvious answer is chess rules — implementing en passant and castling from scratch means you really understand them. But the bigger takeaway was discovering what Daemon Engine could actually do. Seeing OBJ models rendered with Blinn-Phong shading and bloom post-processing surprised me — I hadn’t realized the engine’s rendering pipeline was capable of that level of visual quality. It triggered a curiosity about the render pipeline internals that’s still on my list to explore deeper. I also built a ResourceSubsystem for OBJ loading that improved asset management, which carried forward to later projects.

Technical Specifications

ComponentTechnology
LanguageC++20
GraphicsDirectX 11, HLSL (Blinn-Phong, Bloom)
AudioFMOD
DataXML definitions (pieces, board), OBJ models
EngineDaemon Engine
PlatformWindows (x64)