---
title: "CPU로 3D 래스터라이저를 밑바닥부터 만들어보는 튜토리얼 시리즈"
published: 2026-01-25T22:45:34.000Z
canonical: https://jeff.news/article/1181
---
# CPU로 3D 래스터라이저를 밑바닥부터 만들어보는 튜토리얼 시리즈

대학 OpenGL 강사가 GPU 래스터라이제이션을 CPU로 직접 구현하는 튜토리얼 시리즈를 시작함. 첫 파트에서는 SDL2 윈도우 생성, 드로우 버퍼 설계, 화면 클리어, 자체 그래픽스 API 설계까지 다룸.

- 대학에서 OpenGL 강의하는 개발자가 "GPU가 해주는 래스터라이제이션, 직접 CPU로 구현하면 어떨까?" 하는 가려움을 참지 못하고 시작한 프로젝트임. 삼각형 하나 그리는 데 성공했더니 "이거 풀 렌더링 엔진으로 키워볼까?" 하는 두 번째 가려움이 왔고, 결국 튜토리얼 시리즈로 문서화하기로 함

- CPU 래스터라이저가 실용적이냐고? 당연히 아님. 하지만 정당한 이유는 있음:
  - GPU가 내부적으로 뭘 하는지 진짜 이해하게 됨
  - Nanite 같은 컴퓨트 셰이더 기반 소프트웨어 렌더링의 사전 학습으로 좋음
  - FPGA로 자작 GPU 만들기 전 스테핑 스톤
  - 그리고 뭐니 뭐니 해도 재밌음

- 첫 번째 파트는 "화면 지우기"부터 시작함. SDL2로 윈도우 만들고, 드로우 버퍼(서피스) 생성하고, 고정 색상으로 채우는 것까지가 목표임. 아주 겸손한 시작

## 드로우 버퍼 설계

- SDL2 윈도우 서피스에 직접 쓰는 대신 자체 RGBA8 서피스를 만들어서 복사하는 방식을 선택함. 이유는 윈도우 서피스의 포맷을 컨트롤할 수 없기 때문 (시스템마다 다름)
- `SDL_SetSurfaceBlendMode`으로 자동 블렌딩도 꺼버림. 렌더링 엔진을 직접 만드는 마당에 블렌딩까지 SDL한테 맡길 순 없다는 철학

## API 설계 철학

- OpenGL이나 Vulkan을 그대로 구현할 수도 있었지만, 기존 API들은 두 부류로 나뉨:
  - 오래돼서 수십 년 된 설계 결정의 기이함을 80% 시간 써서 처리해야 하거나
  - 지나치게 장황해서 스펙 맞추는 글루 코드가 80%이거나
- 그래서 제3의 길을 선택: **자체 API 설계**. 기존 그래픽스 API를 참고하되 더 심플하고 깔끔하게 만드는 방향

- 기본 타입부터 정의함. `color4ub` (RGBA 각 1바이트), `vector4f` (부동소수점 4D 벡터), `image_view` (픽셀 배열 + 가로세로 크기) 같은 구조체를 만들고, `clear()` 함수 하나로 시작

## 성능 측정

- 1920x1080 해상도 기준, clear 호출은 약 **0.3ms**, SDL 블리팅은 약 **3.3ms**, 전체 프레임은 약 **3.7ms**로 약 **270 FPS**가 나옴
- clear는 꽤 빠르지만 블리팅이 느린 편. 플랫폼 동기화 오버헤드가 있을 듯
- 물론 이게 CPU 래스터라이저니까 640x480 정도에서 간단한 씬이 아니면 60 FPS 유지가 힘들 거라는 경고도 미리 해둠. GPU한테 감사해야 하는 이유를 체감하게 될 거라는 거임

## 핵심 포인트

- SDL2 기반 CPU 래스터라이저 엔진을 밑바닥부터 구현하는 튜토리얼
- 기존 OpenGL/Vulkan 대신 자체 API를 설계하는 방향 선택
- 1920x1080에서 clear 0.3ms, 전체 프레임 3.7ms로 약 270 FPS
- GPU가 해주는 일을 직접 구현하면서 그래픽스 프로그래밍을 깊이 이해하는 것이 목적

## 인사이트

그래픽스 프로그래밍의 기초를 이해하는 가장 좋은 방법은 직접 만들어보는 것이라는 걸 잘 보여주는 시리즈. Nanite 같은 소프트웨어 렌더링을 이해하고 싶다면 좋은 시작점.
