렌더링 파이프라인은 3D 데이터를 받아 GPU에서 처리한 뒤 2D 화면에 최종 이미지를 출력하는 일련의 단계를 말한다
하나의 공정이라고 생각하자. 입력 => 처리 => 출력의 흐름인 것이다
입력: Mesh 데이터
렌더링 파이프라인의 입력 데이터는 Mesh이다
Mesh는 기본적으로 삼각형(Triangle) 단위로 구성되며, 다음과 같은 정보가 포함되어 있다
- Vertices: 정점들의 3D 좌표
- Vertex Normals: 정점의 법선 벡터 (조명 계산에 필요)
- Faces: 삼각형, 사각형 등 메쉬를 이루는 면 단위이며 정점 인덱스 3개로 표현된다
이러한 정보는 GPU에서 다음 두 버퍼에 저장된다
- Vertex Buffer (정점 버퍼): 위치, 노멀, 컬러, UV 등 정점 데이터
- Index Buffer (인덱스 버퍼): 삼각형을 구성하는 정점 인덱스. 중복된 정점 데이터를 재사용할 수 있어 메모리 효율이 좋다
정점 버퍼와 인덱스 버퍼 이해하기

정점 버퍼와 인덱스 버퍼의 정의
- 정점 버퍼(Vertex Buffer; VB)
- 3D 객체를 구성하는 기준
- 정점의 위치(position), 법선(normal), 색상(color), 텍스처 좌표(UV) 등을 포함한다
- 인덱스 버퍼(Index Buffer; IB)
- 정점 버퍼의 정보를 참조하여 3D 객체를 구성하는 정점들이 어떤 순서로 연결되는지를 나타내는지 인덱스를 저장하는 공간
인덱스 버퍼가 필요한 이유
인덱스 버퍼를 사용하지 않는다면, 각 정점과 이들이 연결되는 방법을 모두 표현해야 한다
버퍼를 사용할 경우 중복을 방지하고, 메모리와 연산을 효율적으로 활용할 수 있다
메모리 상에서의 데이터 위치
정점 버퍼와 인덱스 버퍼에 저장된 데이터는 기본적으로 메모리에 위치해있다
렌더링 과정에서는 이 데이터가 GPU의 V-RAM으로 전송되어 렌더링 파이프라인을 통해 연산이 이루어지는데 각 버퍼는 렌더링 과정을 최적화하는 중요한 도구이다
렌더링 파이프라인 처리 과정

1. Input Assembly
GPU가 메모리에서 VB와 IB에서 정점 데이터를 불러오고 삼각형을 구성한다
2. Vertex Shading
정점 단위 연산을 수행하는 단계이다
월드 좌표계에서 뷰 좌표계로 변환되며, 이를 카메라 기준에서 위치값으로 재계산한다
3. Rasterization
변환된 정점들로 삼각형들을 조립한 후, 각 삼각형 내부를 차지하는 Fragment를 생성한다. 삼각형 내부를 채워넣는 프래그먼트를 생성하는 과정이며, 아직 픽셀에 채워 넣은 상태가 아니다
Fragment는 컬러 버퍼의 한 픽셀을 갱신하는데 필요한 데이터를 담고 있다
정점들에 저장된 노멀, UV 등은 보간을 거쳐 각 프래그먼트에 할당된다
4. Fragment (Pixel) Shading
픽셀의 최종 컬러값이 결정된다
머티리얼의 속성, 텍스처, 라이팅 등의 다양한 파라미터들이 결합된다. 가장 많은 연산이 이뤄지는 단계이다
5. Output Merging
프래그먼트와 현재 컬러 버퍼에 저장된 픽셀 중 하나를 선택하거나, 이들의 색을 결합하여 컬러 버퍼를 갱신한다
Depth Test, Alpha Test, Stencil Test 등이 수행된다
- Depth : z-buffering 과정을 통해 물체가 앞에 혹은 뒤에 그려질지 결정한다
- Alpha : 반투명하거나 투명한 물체는 뒤에 오브젝트가 그려져야 하는데 이를 체크하기 위한 과정
- Stencil : 특정 조건에 따라 효과를 적용하거나 적용하지 않을 지 결정한다
출력: 병합 단계
렌더링된 픽셀(Fragment)은 최종적으로 GPU의 컬러 버퍼(FrameBuffer)에 기록된다
이때 단순히 값만 덮어쓰는 것이 아니라, 다양한 테스트를 통과한 뒤 최종 픽셀이 기록된다
- Depth Test (Z-Buffer): 가까운 픽셀만 렌더링
- Alpha Test: 투명도 기반 렌더링 판단
- Stencil Test: 조건 기반 마스킹 처리
이 과정을 출력 병합(Output Merging) 또는 프래그먼트 처리의 최종 단계라고 하며, 이후 GPU는 컬러 버퍼에 기록된 값을 바탕으로 실제 화면을 구성한다
Reference
게임 아티스트를 위한 CG 최적화이론 - Youtube
Vertex and index buffers - MSDN
Setting up the Rendering Pipeline and Lighting in Unity - Unity Doc
'프로그래밍 > Unity' 카테고리의 다른 글
| 스크립팅 백엔드(Scripting Backend)란? (0) | 2025.03.24 |
|---|---|
| Unity의 Scripting Backend, Mono와 IL2CPP 빌드 차이 (0) | 2025.03.24 |
| Unity Draw Call 최적화 (0) | 2025.03.22 |
| UniRx에 대해 (0) | 2025.03.20 |
| 유니티 가비지 컬렉터와 .NET 가비지 컬렉터의 차이 (0) | 2025.03.20 |