yanghyunw00.github.io / portfolio.txt
~2 min read · updated 2026

Hyunwoo Yang

Gameplay Programmer · Redmond, WA
Portrait of Hyunwoo Yang
fig. portrait

# Hello


I'm a Computer Science student at DigiPen who loves building games. My recent focus has been gameplay programming, and I've been getting hands-on with different engines to build familiarity across the board. I've also been diving into low-level graphics through Vulkan, which has only grown my interest further.

I really enjoy working as part of a team, and right now I'm looking to grow my network and connect with more people in the industry. Feel free to reach out for any reason — I'd love to connect!

status Open to Work school DigiPen Institute of Technology, WA now In school — 2026 Fall

# Recent Work


# Work


7 projects, 2022 — 2026, grouped by game vs. web work, most recent first within each group.

details
Game

## I.G.Y — Isometric City-Builder

role Tech Lead team 7 members year 09/2025 — 06/2026 stack C++20 · OpenGL 4 · SDL2 · Dear ImGui · CMake
I.G.Y screenshot 1 I.G.Y screenshot 2 I.G.Y screenshot 3
fig. igy — screenshots (click to open)

Quarter-view city-builder simulation inspired by Caesar 3 and SimCity 2000, built from the ground up on a custom C++/OpenGL engine. As Tech Lead I owned the engine and technical architecture across rendering, simulation, and AI.

### Architecture & Leadership

  • Owned the overall technical architecture, defining module boundaries and the main update/render loop so simulation, rendering, and AI could evolve independently
  • Set technical direction for a team of 7: made the core engine and tooling decisions, ran code reviews, and coordinated integration of each member's systems into a single build
  • Onboarded teammates with little graphics or engine experience, writing usage examples and lightweight docs so they could contribute gameplay and AI features without touching low-level code

### Engine — Dokev

  • Grew my Computer Graphics course renderer into a reusable engine, Dokev, wrapping raw OpenGL state and draw calls into single-function shape drawing, coloring, and texturing
  • Built core engine modules: a scene graph for hierarchical transforms, a resource manager for textures and shared assets, and an event bus for decoupled communication between systems
  • Added a pan/zoom camera and texture atlasing so tile, building, and agent sprites could share a single bound texture

### Rendering — GPU Instancing

  • Replaced the immediate-mode 2D renderer with a GPU-instanced batch renderer across the 67×67 isometric tile world, cutting draw calls from 9,256 to 11 per frame at an identical ~9,300 quad workload and improving frame time from 58.6 ms to 38.3 ms (17 → 26 FPS)
  • Eliminated all 46,353 per-draw uniform uploads and cut redundant texture binds from 9,232 to 157 per frame by packing a 3×3 transform, four UV pairs, tint, and SDF parameters into a 96-byte instance record, batching up to 10,000 quads across 64 texture slots in a single DrawElementsInstanced call
  • Unified textured sprites and SDF primitives — circles, rectangles, lines — into one instance buffer so UI and debug geometry batch through the same path instead of falling back to per-shape draw calls

### Pathfinding — A*

  • Profiled the pathfinder in-engine and found 91% of all node-reset work was wasted: 1,934,759 grid nodes cleared to expand only 160,603 over a nine-second window, because every query cleared the full 4,489-tile grid before knowing which region the search would visit — a two-tile walk reset 4,489 nodes to expand three
  • Rewrote the search with generation-stamped lazy initialization so reset cost scales with the visited region instead of the whole grid, and replaced the per-expansion heap-allocated neighbor vector with a stack array, removing all 160,172 allocations observed in that window
  • Cut cost per expanded node from 1.6 µs to 0.84 µs in-game, and 31.2 µs to 18.7 µs per query on NPC-range paths in a controlled 2,000-query benchmark, with node resets falling from 4,489 to 145 and heap allocations to zero — verified to return identical paths across all 2,000 queries
  • Isolated a 179 ms frame spike where 184 simultaneous path requests consumed 83% of the frame, resetting 825,976 grid nodes and allocating 95,973 times in a single frame, and projected the rewrite to cut that spike to 111 ms by reducing its pathfinding cost from 148 ms to 80 ms

### Instrumentation

  • Built an in-engine profiling HUD with runtime A/B switches for the renderer and the pathfinder, tracking draw calls, batch flushes, uniform uploads, texture binds, and per-query search cost, with CSV capture for offline comparison
  • Used it to establish that rendering was no longer the bottleneck after instancing, redirecting optimization effort to the CPU-side simulation

### Simulation & Agent AI

  • Implemented a seven-state NPC agent FSM covering work, rest, gambling, and fire response, driven by A* over terrain with height-based climb costs
  • Built 22 simulation managers for population, happiness, taxation, immigration, weather, and disaster events

role Solo Developer team Solo year Jan 2026 — Mar 2026 stack Unity · C# · Netcode for GameObjects · Unity Relay
LostGuns screenshot 1 LostGuns screenshot 2 LostGuns screenshot 3
fig. lostguns — screenshots (click to open)

LostGuns is a self-driven copy-study project where I recreated the core mechanics of the mobile game LostGuns in Unity, pushed all the way to functional online multiplayer over Unity Relay so friends could connect and play together. The game features a pre-match lobby, 4 combat maps, 2 characters sharing a 9-weapon roster, and a Gun Game mode that unlocks each weapon in sequence on kills.

### Networking — NGO + Unity Relay

  • Built netcode on Netcode for GameObjects 2.11.1 over Unity Relay, syncing position/rotation, animation state, HP, team, and match/bomb progress through NetworkVariables and [ServerRpc]/[ClientRpc] calls, with a low-level FastBufferWriter channel reserved for chat
  • Split authority by concern: movement is client-authoritative (ClientNetworkTransform, each owner writes its own transform) for responsive controls, while hit registration is fully server-authoritative — HP is a server-write-locked NetworkVariable, and all bullet and melee damage resolves only on the server
  • Cut redundant transform traffic by suppressing NetworkTransform updates below a 0.005 position / 0.01 scale threshold, while disabling interpolation on bullets specifically so hits register instantly instead of lagging behind their travel

### Lag Compensation — Rewind-Based Hit Registration

  • Found that the original hit-scan mixed a fixed rewind offset with both the target's current and rewound positions, so shots could land on hits that looked dodged on the client's screen
  • Rewrote it around a per-shot view delay — RTT/2 plus a two-tick interpolation buffer, clamped to 0.4 s — recomputed by the server every FixedUpdate, resolving player hitboxes only against the rewound position while static geometry like walls still raycasts against the current position, and extended the position-history buffer from 0.5 s to 1 s to support it
  • Unified melee attacks onto the same rewind path, and designed grenades — a delayed-area attack — to rewind against the victim's own screen state instead, separating aimed-attack and timed-attack fairness into two distinct resolution models

### Session Flow

  • Built the join flow on UGS anonymous auth plus PlayFab, with the host creating a Relay allocation and join code and clients joining directly with it, then routing through a dedicated Plaza lobby scene where teams ready up before picking a map

## MINIGAME COLLECTION

role Solo Developer team Solo year Jul 2025 stack C++ · Raylib
Shooter screenshot 1 Shooter screenshot 2
fig. shooter — flow field pathfinding (click to open)
Sudoku screenshot 1 Sudoku screenshot 2
fig. sudoku — backtracking solver (click to open)

A minigame collection built in C++ with Raylib. Rather than one big game, I used it as a sandbox to implement two self-contained games, each exploring a distinct technical problem — pathfinding at scale and constraint solving.

### 01  Shooter  // A* + Flow Field

A top-down shooter on a procedurally generated 40×40 tile grid — tiles are randomized and the map is regenerated until an A* check confirms a path exists corner to corner. The player aims and fires at the cursor; hitting an enemy scores and removes it, touching one ends the run, and clearing every enemy or reaching the finish tile wins.

  • Started with each enemy running its own A* search toward the player every time it needed a new tile, which duplicates the same search once per enemy — O(enemies × grid) in the worst case
  • Replaced it with a single flow field shared by every enemy: one BFS pass from the player's tile floods a cost value outward to every walkable tile, then each cell's direction is set toward its lowest-cost neighbor — a one-time gradient that turns "find a path" into "read a direction," cutting the per-frame cost to O(grid) regardless of enemy count
  • Enemies that spawn on or next to an obstacle snap to the nearest walkable tile via an 8-directional BFS fallback

### 02  Sudoku  // Backtracking

A playable 9×9 Sudoku board with cell selection, same-number highlighting, and a run timer.

  • Generates a fresh solved board every run with randomized backtracking — shuffling the candidate order at each cell before recursing — then clears 45 cells to produce the puzzle
  • Reuses the same row/column/3×3-box constraint check for both generation (rejecting placements that break Sudoku's rules) and win detection (validating the completed board), instead of duplicating that logic

## HELP ME! DOCTOR WATER

role QA & Gameplay Programmer team 4 members year 03/2023 — 06/2023 stack C++ · Custom Engine
Doctor Water screenshot 1 Doctor Water screenshot 2 Doctor Water screenshot 3
fig. doctor-water — screenshots (click to open)

2D vertical-scrolling escape-action game. Dr. Water climbs a volcano on the verge of eruption, fighting through enemies and boss encounters with an arsenal of weapons. Awarded Microdegree Expo Best Award 2023.

### QA & Playtesting

  • Ensured gameplay quality through systematic playtesting across all stages and bosses
  • Identified and documented bugs in enemy behaviour, weapon interactions, and level progression
  • Worked closely with engineers to validate fixes and regression tests

### Gameplay Programming

  • Implemented boss attack mechanics — multi-phase patterns with distinct telegraphed moves, timed attack sequences, and phase transitions tied to boss health
  • Built enemy attack mechanics for regular encounters, including projectile spreads, charge attacks, and spawn/wave behavior
  • Implemented the player's 5 weapons, each with its own damage, fire rate, and projectile behavior

Won Microdegree Expo Best Award, 2023.


## LEGACY OF DRAGONS

role Tech Lead team 4 members year 09/2022 — 12/2022 stack C++ · Custom Engine
Legacy of Dragons screenshot 1 Legacy of Dragons screenshot 2 Legacy of Dragons screenshot 3
fig. legacy-of-dragons — screenshots (click to open)

A top-down action-survival shooter set in a dragon-vs-dragon world. The player carves through enemy waves across multiple stages, capped by two boss fights.

  • Led development of core gameplay systems including enemy wave mechanics and stage progression
  • Directed technical architecture as Tech Lead, coordinating system integration across a team of 4
  • Designed and implemented 6 distinct enemy attack patterns, tuning telegraphs, timing, and projectile behavior for each
  • Built the player's arsenal of 5 weapons, each with its own fire rate, damage, and projectile pattern
Web

## GRAPHICS CALCULATOR

role Solo Developer team Solo year Jun – Sep 2026 stack React · Vite · Three.js · math.js · KaTeX
Graphics Calculator — main calculator view Graphics Calculator — 3D visualization
fig. graphics calculator — main view & 3D visualization (click to open)

A single-page math toolkit that shows its work, built to make my Computer Graphics coursework easier to get through. It covers the linear-algebra and calculus operations I kept reaching for, and renders every intermediate step as a proper formula instead of a final answer.

Four calculators — matrix, calculus, vector, and 3D graphics — sharing one step-by-step solver and KaTeX rendering. Full Korean / English toggle across the UI, solution steps, and error messages.

  • Implemented matrix routines (determinant, inverse, rank, LU, SVD, eigenvalues) with per-row-operation step output
  • Built the calculus engine — derivatives, integrals, limits, Taylor series — on top of math.js with live LaTeX preview
  • Wrote real-time Three.js viewers for the MVP pipeline, lighting/shadow mapping, and vector dot/cross products
  • Added a runtime i18n layer (ko/en) and a responsive layout that re-fits the 3D viewport to any window ratio
  • Cut the initial JS payload 83% — 504 KB to 85 KB gzip — with route-level code splitting, deferring Three.js, math.js and KaTeX to the routes that actually need them
  • Took the project from first prototype to production build and static deployment on GitHub Pages entirely on my own

## HANGOUT TIMER

role Full-Stack Developer team Solo year Sep 2025 stack Web
Hangout Timer screenshot 1 Hangout Timer screenshot 2 Hangout Timer screenshot 3
fig. hangout-timer — screenshots (click to open)

At DigiPen Korea, we held a weekly "Hangout" every Tuesday or Wednesday — professors and students stayed late at school, working on our own projects or sharing a meal together. It became some of the most focused, productive time I've ever had, and that memory still means a lot to me. I built this timer to hold onto that feeling, and I still use it today to study while looking back on those hangouts.

A web app that turns the Pomodoro technique into a shared activity. Built end-to-end as a full-stack developer, with AI-assisted iteration on UX flows and backend logic.

  • Designed and built the full stack — frontend, real-time sync, and persistence
  • Implemented shared room logic so friends can join and run a timer together
  • Used Claude and Gemini Pro for rapid prototyping and code review
  • Shipped as a deployable web application used by DigiPen peers
Graphics Work (Academic)

DigiPen CS250 Computer Graphics assignments in C++ / OpenGL, each with a live in-browser demo.

# About


My name is Hyunwoo, and I major in RTIS at DigiPen Institute of Technology in Redmond, WA. I'm currently a student, exploring and experimenting with all kinds of things like game engines and game graphics to grow my interests further.

I love solving problems in ways I once only imagined, and I really enjoy making fun games and other side projects.

I'm originally from Daegu, South Korea. I have a strong foundation in creativity and a strategic approach to problem-solving.

I'm always keeping an eye out for new projects. If you come across anything on this site that catches your interest or raises a question, feel free to reach out — take your time looking around and enjoy your stay!

## Education

DigiPen Institute of Technology
2026 — 2028 · Redmond, Washington

B.S. in Computer Science, Real-Time Interactive Simulation (RTIS). GPA 3.913. Dual-degree program with Keimyung University.

Relevant courses: Computer Graphics · Advanced C/C++ · Game Projects · Data Structures & Algorithms

Keimyung University
2022 — Spring 2026 · Daegu, South Korea

B.S. in Computer Science. Dual-degree program with DigiPen Institute of Technology.

## Skills

Languages
C / C++, C#, JavaScript, GLSL, Rust
Tools
Unity, Unreal, Vulkan, OpenGL, SDL2, Raylib, React, Three.js, Linux, GitHub, Perforce, CMake
Concepts
Data Structures & Algorithms, OOP, Rendering Pipeline, GPU Instancing, Pathfinding & AI (A*, FSM), Networking & Multiplayer, Performance Profiling & Optimization
Soft skills
Teamwork & Collaboration, Problem-Solving, Creativity, Communication, Growth Mindset

## Leadership

Military Service — Leader
Aug 2023 — Feb 2025 · Daegu, KR

Completed mandatory military service with an honorable discharge at the rank of Sergeant. Served as squad leader of a mortar unit, responsible for training and coordinating a team of soldiers during operations.

Linkers — Fundraising Volunteer
Feb 2025 — Aug 2025 · Daegu, KR

Collaborated with World Vision to provide aid to vulnerable populations. Fostered community engagement to support fundraising initiatives.

Daegu Futsal Team — Captain
Mar 2025 — Jul 2026 · Daegu, KR

Captain of a futsal team based in Daegu, South Korea.

# Contact


Feel free to reach out for any reason — I'd love to connect.

email
hyunwoo.yang@digipen.edu
github
github.com/yanghyunw00
linkedin
linkedin.com/in/hyunw00
resume
docs/Resume.pdf
EOF · yanghyunw00.github.io
Hyunwoo Yang — Gameplay Programmer, Redmond, WA
back to top ↑