Graphics and gameplay programmer with experience of shader implementation, real-time rendering, and game development.
Worked on collaborative game projects with a strong focus on implementing core gameplay system as well as visual presentation aspects.
Student Projects
click image for more
Shuttlefall
Stress-driven space shuttle management experience.
click image for more
Spy the Man
2D stealth action game featuring spy missions.
click image for more
Ladder Chess
Two-player ladder-tile strategy game.
click image for more
Jelly Run
Auto-scrolling runner with music-synced obstacles.
Shuttlefall
Unreal Engine 5
Date: September 2024 ~ Present
Team: 6 Programmers, 3 Artists, 1 Designer
Role: Gameplay Programmer, Tech Lead
Description
Shuttlefall is a stress-driven space shuttle management game where players must repair failing systems while gathering resources to survive. Players should navigate the chaotic environment and keep the shuttle intact before it’s too late.
Contribution
Worked on game’s main control system, in-game terminal interaction, UI/UX programming, shop and upgrade system, and overall debugging and polishing of the whole game.
Contributed to custom depth shader programming, widget blueprint projection to in-game screen, game loop programming and system design.
Participated on level layout and difficulty design, and additional art assets for the game. Currently working on the game trailer and Steam release.
A 2D hide-and-seek action game where players complete spy missions in each level by hiding from enemies or eliminating them. This was my first student team game project, and also my first experience of tech lead.
Contribution
As a tech lead, I was in charge of implementing the game’s graphic engine and physics simulation, while also distributing appropriate workload to our teammates.
Contributed to OpenGL implementation of 2D images, fonts, and animations, along with in-game programming, particle system design, level design, and illustration of game art assets.
A competitive two-player board game inspired by Amidakuji(Ladder Lottery). Designed as a fast-paced mind game where small tile changes can completely flip the outcome. This was my first student team game project.
Contribution
Built the core gameplay framework and the main gameplay loop, focusing on delivering a playable prototype that showcased the core mechanics.
Implemented the ladder path-tracing algorithm to quickly visualize the current connections, with support for multiple ladder tile types.
An auto-scrolling rhythm runner where obstacles spawn from the right in sync with the music. The goal is to dodge obstacles and survive until the track ends. This project was created as a course final project and was my first attempt at game development.
Contribution
Implemented the core gameplay loop and synced obstacle timing to audio playback.
Built the obstacle spawning and stage progression system aligned to the music flow, including retry/game-over states and basic UI feedback.
Personal Projects
click image for more
The Balloon Adventure
2D platformer using balloon physics to navigate.
click image for more
Epic Fantasy
Game prototype with better 2D Platformer collision.
click image for more
Surface Tension
3D rage platformer guiding a bubble with a fan.
The Balloon Adventure
Unity
Date: September 2022
Team: 3 Programmers
Role: Gameplay Programmer
WebGL version of the game here.
Download the game here.
Description
The Balloon Adventure is a 2D platformer game where the main character is a balloon. Players progress by utilizing properties of real balloons, such as floating, deflating, and charging static electricity to reach the goal. This was my Unity team project submitted to a game contest in South Korea, where it won an award.
Contribution
Contributed to Unity shader programming, gameplay mechanics, particle system customization, and illustration of game art assets. Also worked on level design and UI/UX of the game using Unity tile map and canvas.
Participated on deploying the game on WebGL with Unity, which helped to playtest the game and to prepare showcasing the game for the game contest.
Epic Fantasy
Unity
Date: February 2023 ~ June 2023
Team: 3 Programmers
Role: Physics Programmer, Gameplay Programmer
Description
Epic Fantasy is a Unity 2D platformer prototype featuring a unique, raycast-based physics/collision system. Player movement and camera behavior were tuned to keep controls stable and responsive, especially during fast movement and combat.
Contribution
Built a raycast-based collision and movement controller to replace Unity’s Rigidbody-based behavior. This prevented slope sliding and eliminated high-speed tunneling also with stable ground/slope handling.
Implemented a pixel-perfect camera that follows specified targets while preserving pixel alignment. With multiple targets, the camera computes a weighted center and adjusts framing so all targets remain visible on screen.
Created breakable objects that shatter into multiple random fragments when hit by the player’s attack. A barycentric-inspired method generates fragment pieces, then applies directional force to scatter them.
Surface Tension is a 3D puzzle-platformer about navigating a bubble through a surreal apartment complex using a portable fan. This game was a submission to the Global Game Jam 2025.
Contribution
Contributed to Godot Engine programming, gameplay mechanics, player physics, level design, and debugging.
Academic Projects
click image for more
Motion Dynamics Project
C++/OpenGL demo of graphic simulations.
click image for more
Vulkan Ray Tracing Project
C++/Vulkan real-time ray tracing render demo.
click image for more
Graphics Project
C++/OpenGL showcase of meshes, curves, and shadows.
An interactive C++/OpenGL sandbox that brings together multiple graphics and animation simulating systems. The demo includes a skeletal animation player, a spline-based motion path with speed control, an inverse kinematics reach animation, and a spring-based physics simulator. The demo uses ImGui panels to switch modes, tweak parameters live, and visualize motion paths, IK targets, and simulation states.
Contribution
Animation Player: Built an FBX animation playback pipeline that samples per-joint transforms over time. Supported clip selection, time scaling, and splitting one source animation into reusable sub-clips, with stable interpolation for smooth motion.
Motion Path and Speed Control: Implemented Catmull-Rom spline motion with arc-length reparameterization so movement stays consistent along curves. Added ease-in/ease-out distance-time control and a motion-based animation speed scale to keep the run cycle visually matched to travel speed.
Inverse Kinematics Animation: Implemented a CCD IK solver to drive the end effector toward a target. Added per-joint max rotation step and priority weighting, plus joint constraints (cone/twist and hinge limits) with UI sliders and a full reset to restore default limits.
Spring Physics Simulator: Implemented a mass-spring simulator (chain and cloth) with damping and RK4 integration using sub-stepping for stability. Added pinning options, sphere collision, and real-time parameter tuning with debug rendering (springs, particles, and shaded cloth).
A real-time ray tracing renderer built in C++ using the Vulkan API and VK_KHR_ray_tracing_pipeline. The renderer supports progressive sampling with temporal accumulation, optional history reprojection to keep stable results when the camera moves, and a compute-shader denoiser to reduce Monte Carlo noise in real time. It also includes a lightweight post-process pass for presentation (gamma/tonemap) and an ImGui control panel to toggle features and tune rendering parameters live.
Contribution
Path Tracing Core: Implemented a Monte Carlo path tracing loop with BRDF sampling and PDF evaluation, throughput accumulation, emissive hit handling, and optional explicit light connection (NEE-style direct lighting) to improve convergence.
Temporal Accumulation and Reprojection: Maintained per-pixel history buffers (current/previous color accumulation plus auxiliary buffers such as normal+depth and albedo) to avoid ghosting.
Compute Denoising: Implemented an albedo-demodulate/remodulate denoiser in a compute shader. Performed a 5x5 Gaussian-weighted filter with edge stopping using depth and normal similarity to preserve silhouettes and hard edges.
Post Process and UI: Added a full-screen presentation pass and an ImGui panel for common runtime controls to support fast debugging and parameter iteration.
A C++/OpenGL sandbox showcasing core graphics features through five scenes: Mesh, Noise, Curve, Shadow, and Final. Each scene is interactive with ImGui controls for live tweaking and debugging, ending with a combined roller-coaster demo.
Contribution
Mesh Scene: Implemented procedural 3D primitives and the mesh buffering pipeline (VAO VBO IBO).
Added shader-based rendering options and live toggles for common render states and visual styles.
Noise Scene: Implemented 2D noise generation and variations, with controls for frequency, octaves, and animation offsets. Rendered the generated noise as a texture mapped onto geometry for real-time preview.
Curve Scene: Built an interactive spline curve editor with draggable control points and adjustable sampling.
Visualized curves and controls with lightweight debug drawing for clear iteration.
Shadow Scene: Implemented shadow mapping with a depth pass from a light camera and a main shading pass using the depth map. Added UI controls and debug views to tune bias and inspect shadow results.
Final Scene: Combined terrain generation, spline-based track motion, and shadows into a single showcase scene. Implemented a roller-coaster style demo with editable track parameters and a follow camera for presentation.