- 개요
렌더링은 그릴 물체의 정보를 그래픽카드 GPU에 넘겨 GPU에서 처리하도록 위임하는 것이 일반적이다
GPU에 그릴 물체의 정보를 전달하면 GPU는 하드웨어에 설정된 워크플로우를 통해 렌더링을 진행하고 출력한다
위와 같이 GPU에 설정된 워크플로우를 렌더링 파이프라인이라고 표현한다
- 프로젝트에서의 렌더링 파이프라인

프로젝트에서는 렌더링 작업을 GPU에 위임하여 처리하지 않고 위의 4가지 방식으로 구성하였다
- 1) 정점 변환 단계
- 게임 오브젝트에 연결된 메시가 갖고 있는 모든 정점의 정보를 변환하는 과정
- 정점의 최종 위치는 월드 공간을 중심으로 지정
- DrawMesh2D 함수를 호출하여 수행
- 2) 정점 처리 단계
- 화면에 그려질 정점의 최종 위치 값을 계산하는 과정
- 모델링 행렬에 로컬 공간의 좌표를 곱하여 계산
- VertexShader2D 함수를 호출하여 수행
- 3) 픽셀화 단계
- 메시를 구성하는 삼각형마다 픽셀화를 진행하는 과정
- 무게중심좌표를 활용하여 삼각형 영역에 속하는 픽셀을 추려내고 색상을 결정
- DrawTriangle2D 함수를 호출하여 수행
- 4) 픽셀 처리 단계
- 삼각형을 구성하는 각 픽셀의 최종 색상을 결정하는 과정
- 텍스처로부터 해당 픽셀의 UV에 대응하는 색상을 가져오고 추가적인 효과를 적용하여 색상을 설정
- FragmentShader2D 함수를 호출하여 수행
- 렌더링 파이프라인 (1) 정점 변환 단계

정점 변환을 수행하는 DrawMesh2D 함수의 로직은 위와 같다
해당 함수를 호출하여 게임 오브젝트를 렌더링하기 위해서는 메시 정보와 모델링 행렬이 필요하다
이때 원본 메시 정보에 모델링 행렬을 곱하게 되면 메시 정보를 공유하는 다른 게임 오브젝트에 영향을 준다
따라서 정점의 변환 과정에서 사용할 메시 데이터는 원본을 복제하여 사용한다
DrawMesh2D 함수처럼 렌더링 파이프라인을 시작하는 함수를 호출하는 것을 DrawCall이 발생한다고 표현한다
- 렌더링 파이프라인 (2) 정점 처리 단계

DrawMesh2D 함수에서 호출되어 정점 처리를 수행하는 VertexShader2D 함수를 살펴본다
해당 함수는 GPU의 렌더링 파이프라인을 모방하여 구성하였다
렌더링 파이프라인에서 몇몇 중요한 과정은 개발자들이 설계한 로직을 수행하도록 함수를 제공하는데,
이와 같은 함수를 셰이더라고 표현한다
셰이더중에서도 정점 처리 단계의 셰이더를 정점 셰이더라고 표현하는데,
VertexShader2D 함수는 정점 셰이더를 모방하여 구성하였다
- 렌더링 파이프라인 (3) 픽셀화 단계

픽셀화 단계를 수행하는 DrawTriangle2D 함수의 로직은 위와 같다
삼각형 영역을 그릴 때 와이어프레임으로 그리거나 텍스처를 입혀서 그리는 2가지 방식으로 렌더링할 수 있다
- 렌더링 파이프라인 (4) 픽셀 처리 단계

픽셀 처리 단계를 수행하는 FragmentShader2D 함수의 로직은 위와 같다
해당 함수 역시 GPU의 렌더링 파이프라인을 모방하여 구성하였다
GPU에서는 삼각형을 구성하는 픽셀을 Fragment라고 표현하며
Fragment에 대한 셰이더를 파편 셰이더 또는 픽셀 셰이더라고 표현한다
FragmentShader2D 함수는 파편 셰이더를 모방하여 구성하였다
- 최종 실행 결과


'수학 > 이득우의 게임 수학' 카테고리의 다른 글
| 3차원 공간의 설계 (0) | 2026.02.04 |
|---|---|
| 카메라 시스템 (0) | 2026.01.28 |
| 게임 엔진의 워크플로우 (0) | 2026.01.14 |
| 리소스 저장소 (0) | 2026.01.14 |
| Scene의 구조 (3) - 로컬 공간과 로컬 축 (0) | 2026.01.07 |