본문으로 건너뛰기
피드

CPU로 3D 래스터라이저를 밑바닥부터 만들어보는 튜토리얼 시리즈

frontend 약 4분
vote
0
댓글
북마크

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

  • 1

    SDL2 기반 CPU 래스터라이저 엔진을 밑바닥부터 구현하는 튜토리얼

  • 2

    기존 OpenGL/Vulkan 대신 자체 API를 설계하는 방향 선택

  • 3

    1920x1080에서 clear 0.3ms, 전체 프레임 3.7ms로 약 270 FPS

  • 4

    GPU가 해주는 일을 직접 구현하면서 그래픽스 프로그래밍을 깊이 이해하는 것이 목적

  • 대학에서 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한테 감사해야 하는 이유를 체감하게 될 거라는 거임

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

댓글

댓글

댓글을 불러오는 중...

frontend

타입스크립트 7.0, Go 네이티브 포팅으로 빌드가 8~12배 빨라졌다

마이크로소프트가 타입스크립트 7.0을 출시하면서 기존 자바스크립트 기반 구현을 Go로 네이티브 포팅했다. 전체 빌드는 평균 8~12배 빨라졌고, VS코드 빌드는 125.7초에서 10.6초로 줄었으며, 슬랙은 CI 타입 검사 시간을 7.5분에서 1.25분으로 낮췄다.

frontend

타입스크립트 7 공개, 고 포팅으로 빌드가 최대 10배 이상 빨라짐

마이크로소프트가 고(Go)로 네이티브 포팅한 타입스크립트 7을 공개했다. 전체 빌드는 보통 8~12배 빨라지고, VS 코드 코드베이스에서는 125.7초가 10.6초로 줄었으며, 편집기 첫 오류 표시도 17.5초에서 1.3초 미만으로 내려갔다.

frontend

“98% 지원”이 생각보다 별로 안 넉넉한 이유

브라우저 기능 지원률 98%는 얼핏 높아 보이지만, 실제 서비스에서는 2%의 사용자를 깨진 화면 앞에 세우는 숫자일 수 있다는 글이다. 특히 일반 통계와 내 서비스 방문자 분포는 다를 수 있고, 실제 사례로 어떤 사이트는 최신 중첩 CSS 기능 지원 브라우저가 방문자의 약 70%뿐이었다.

frontend

메타, AI가 읽고 쓰는 디자인 시스템 ‘Astryx’ 오픈소스로 공개

메타가 내부 디자인 시스템 Astryx를 오픈소스로 공개했다. React와 StyleX 기반의 150개 이상 접근성 지원 컴포넌트, 디자인 토큰, 테마, 템플릿, CLI를 제공하며, 특히 AI 에이전트가 컴포넌트 구조를 이해하고 UI를 생성·수정할 수 있도록 MCP 서버까지 포함한 점이 핵심이다.

frontend

shadcn/ui, 기본 컴포넌트 라이브러리를 Radix에서 Base UI로 변경

shadcn/ui가 새 프로젝트의 기본 컴포넌트 라이브러리를 Radix가 아니라 Base UI로 바꿨어. Radix 지원은 계속되지만, Base UI가 안정화됐고 주간 다운로드 600만 이상, shadcn/create 신규 프로젝트 선택 비율 2대1이라는 이유로 기본값을 바꾼 거야. 동시에 채팅 UI용 MessageScroller와 관련 컴포넌트, headless 패키지인 @shadcn/react도 공개됐어.