그래픽스 파이프라인이란?
3D 그래픽스를 생성해 2D 화면에 렌더링하기 위한 일련의 과정
1. 응용 프로그램 단계 (Application Stage)
게임 로직, 사용자 입력 처리, GPU에 전달할 데이터 준비 (CPU에서 수행)
2. 지오메트리 단계 (Geometry Stage)
3D 객체의 정점 데이터 변환, 불필요한 데이터 제거 (GPU에서 수행)
- 오브젝트의 버텍스와 폴리곤을 처리하는 단계입니다.
- 메시를 구성하고, 버텍스 트랜스폼 및 버텍스 쉐이더를 거쳐 지오메트리를 생성합니다.
버텍스 트랜스폼: GPU 메모리에 저장된 버텍스 데이터를 가져와 적절한 위치로 변환
- 월드 트렌스폼: 원점 기준의 메시 모델에 대한 위치데이터만 가지고 있는 로컬 스페이스를 3D 공간상의 특정 위치인 월드 스페이스로 변환
- 뷰 트렌스폼: 오브젝트를 카메라에 상대적인 위치로 변환하기 위해 월드 스페이스를 카메라(뷰) 스페이스로 변환
- 프로젝션 트렌스폼: 3D 공간을 2D 상의 위치로 매칭하는 과정 (Projection-투영)
버텍스 쉐이더: 버텍스별로 값을 설정하는 과정
- 월드-뷰-프로젝션 트랜스폼 변환: 메시의 버텍스를 적절한 위치에 있도록 버텍스에 행렬을 곱해줌으로써 수행
- 왜곡: 특수한 효과를 위해 버텍스의 노멀 방향으로의 확장 등
- 노멀 및 컬러 결정: 라이팅이 픽셀별이 아닌 버텍스별로 처리된다면 버텍스 쉐이더에서 라이팅 처리가 되고, 버텍스의 컬러에 라이팅 결과 반영
3. 래스터화 단계 (Rasterization Stage)
정점 데이터를 픽셀 단위로 변환하여 화면에 그릴 준비 (GPU에서 수행)
- 오브젝트를 화면에 그리는 과정입니다.
- Depth Buffer(Z Buffer)를 사용하여 픽셀의 깊이를 결정하고, 프래그먼트/픽셀 쉐이더, 알파 블렌딩를 통해 최종 색상을 계산합니다.
4. 출력 병합 단계 (Output Merger Stage)
렌더링된 모든 프래그먼트를 결합하여 최종 이미지 생성 및 화면 출력 (GPU에서 수행)
더블 버퍼링: 두 개의 버퍼를 번갈아가면서 렌더링한 후 화면에 보여주는 것으로 화면에 렌더링 되는 순차적인 과정이 보이지 않고 한번에 갱신 되는 것처럼 보임.
- 프론트 버퍼: 화면에 보이는 버퍼
- 백 버퍼: 렌더링 되는 버퍼
유니티의 그래픽스 파이프라인 종류
- 내장 렌더링 파이프라인 (Built-in Render Pipeline): 유니티의 기본 렌더링 파이프라인으로, 많은 프로젝트에서 기본적으로 사용됩니다.
- 스크립터블 렌더 파이프라인 (Scriptable Render Pipeline, SRP): 사용자 정의 가능 렌더링 파이프라인으로, 두 가지 주요 파이프라인을 포함합니다:
- 유니버설 렌더 파이프라인 (Universal Render Pipeline, URP): 광범위한 플랫폼 지원 및 성능 최적화
- 고해상도 렌더 파이프라인 (High Definition Render Pipeline, HDRP): 고품질 그래픽 및 고사양 하드웨어 지원