2 분 소요

Graphics Rendering Pipeline

Image

현재 배우고 있는 Direct X는
그래픽 API 중 하나이다

Graphics API

응용 프로그램 (ex : 게임, 3D 툴 등)과
하드웨어 사이를 이어주는 프로그래밍 인터페이스

개발자가 이들을 이용하여
‘삼각형 그리기’, ‘텍스쳐 적용’ 등의 명령을
GPU에게 내릴 수 있게 됨
(추상화)

  • API(Application Programming Interface)
    앱(어플레이케이션, 게임 등)을 프로그래밍할 때 사용하는
    인터페이스(완충제, 창구 등) 를 총칭한다
    (개발 도구의 일종)
    (다른 개념 들 사이를 이어줄때 많이 이용)
    -> 이 예시에서는 GPU를 이용할 때
    각각의 그래픽 카드나 드라이버에 따라
    코드를 고칠 수 없으니 Graphics API를 이용한다
    (OpenGL, WebGL, Vulkan 등도 이와 같은 역할을 해준다)
    (Vulkan : 차세데 API - 안드로이드 쪽의 렌더링할거면 공부!)
    (Metal : 아이폰 쪽 렌더링 할거면 공부!)
    (DirectX : Windows나 XBox 같은 Microsoft 쪽 계열의 공부!)
    (dx 11 : OpenGL에 대응, dx 12 : Vulkan, Metal에 대응)

Direct X

Image

우리가 DirectX 의 여러 기능 중
가장 많이 사용할 것은 Direct 3D!
(DirectX 중 3D 그래픽스 API 를 담당)

대부분 그래픽스 자료 등에서
Direct X를 표현할 때
Direct 3D를 말하는 경우가 많으니 인지는 해둘 것


Graphics Driver (GPU Compiler 포함)

DirectX 같은 그래픽 API 에서 내려온 명령을
GPU가 이해할 수 있도록 ‘저수준 언어’으로 변환

  • GPU Compiler
    HLSL(High-Level Shading Language) 같은 셰이더 코드를
    GPU의 ISA(Instruction Set Architecture)로 변환
    (ISA : 명령어 집합 구조)
    (즉, 기계어 명령들로 변환하여 실행시킴)

GPU (그래픽 처리 장치)

주어진 명령어를 실제로 실행하여 픽셀을 계산

  • Command Processor: CPU에서 내려온 명령들을 스케줄링
  • Shader Cores (SM, CU 등): 정점/픽셀/컴퓨트 셰이더 실행
  • Rasterizer: 삼각형을 픽셀 단위로 잘라냄
  • ROP (Render Output Units): 최종 색상/깊이 값을 계산하고 프레임 버퍼에 저장

병렬 처리가 가능하기에 한 번에 수천 개 이상의 스레드 실행 가능

보통 교재 등에서 나오는 그래픽 파이프라인 등은
‘GPU’ 내부 단계를 표현 하는 것

ex)

  • Input Assembler – 정점(Vertex) 데이터 입력
  • Vertex Shader – 각 정점 변환 (월드/뷰/투영 행렬)
  • Tessellation / Geometry Shader – (선택적) 기하 분할, 도형 생성
  • Rasterizer – 삼각형을 픽셀 단위로 쪼갬
  • Pixel(Fragment) Shader – 각 픽셀 색상 계산 (조명, 텍스처 샘플링)
  • Output Merger (ROP) – 깊이/스텐실/블렌딩 처리 → 프레임 버퍼 기록

등이 존재

(크게 IA -> VS -> RS -> PS -> OM 이며
세부 단계(ex : 테셀레이션,GS 등)가 중간에 더 존재)


Buffers(프레임 버퍼 / 백 버퍼)

GPU가 계산한 최종 픽셀 색을 담아두는 메모리 영역

ex)

  • Color Buffer: 최종 RGBA 색상 값
  • Depth Buffer: 픽셀 깊이 값(Z-buffer)
  • Stencil Buffer: 마스킹용 값

더블 버퍼링 / 트리플 버퍼링?

화면에 출력 중인 버퍼(프런트 버퍼)와
GPU가 새로 그리는 버퍼(백 버퍼)를 교체하면서
깜빡임이나 티어링 방지

동기화?

V-Sync를 켜면 디스플레이 주사율(예: 60Hz)과 맞춰 버퍼 스왑


Display(모니터 등 출력장치)

GPU가 제공한 프레임 버퍼의 내용을
주기적으로 스캔하여 화면에 출력

  • 주사율?
    60Hz → 초당 60번 화면을 새로 그림 (1프레임 = 16.67ms)
    모니터가 “언제” 프레임을 받아서 보여줄지 결정

댓글남기기