| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 주식
- 네트워크
- 운영체제
- 스레드
- SQL
- unity
- 자료구조
- SRP
- SQL시험
- TCP
- 멀티스레드
- c#
- 픽셀 쉐이더
- HDRP
- URP
- 통신
- vertex shader
- 디자인패턴
- 코스피
- 정렬
- 쉐이더
- 버텍스 쉐이더
- Heap
- 유니티 최적화
- 렌더링파이프라인
- SQLD
- 코스닥
- 프로세스
- 유니티
- 배칭
- Today
- Total
Let's Girin!
[그래픽스] | 렌더링 파이프라인 본문
1. 렌더링 파이프라인
렌더링 파이프라인(Rendering Pipeline)은 3D 그래픽스를 화면(2D)에 렌더링하는 과정이다.
ex) 게임에서 씬의 콘텐츠를 가져와서 화면에 표시하는 일련의 작업을 수행한다.
1.1 응용 프로그램 단계 (Application Stage)
응용 프로그램 단계는 주로 CPU에서 수행되며 GPU에서 수행되지 않기 때문에 렌더링 파이프라인의 일부는 아니지만, 렌더링 파이프라인에 영향을 미치는 중요한 단계이다. 이 단계는 렌더링 파이프라인의 시작점이며 GPU에 렌더링에 필요한 데이터를 제공하므로 전체 프로세스에 중요한 영향을 미친다.
1.1.1 데이터 로딩
데이터 파일(모델의 정점 데이터, 텍스처 등..)을 로드하고 메모리에 적재한다.
1.1.2 카메라 및 뷰 설정
카메라의 위치, 방향, 뷰 파라미터를 설정한다.
1.1.3 조명 및 재질 설정
광원의 위치와 색상, 재질의 속성을 설정한다.
1.1.4 유저 인터랙션 처리
사용자 입력을 감지하고 처리하여 상호작용을 구현한다.
1.1.5 렌더링 명령 생성
그래픽 API(OpenGL, DirectX)를 사용하여 렌더링 명령(드로우콜)을 생성하여 GPU에게 전달한다.
*드로우콜(Drqw Call)
CPU에서 GPU로 명령이 전달되어 특정 그래픽 객체를 화면에 그리기 위해 사용된다.
드로우콜은 성능에 영향을 미치며, 많은 드로우콜은 CPU와 GPU 간의 통신을 증가시켜 오버헤드가 발생할 수 있다.
성능을 최적화하기 위한 방법으로 몇 가지(배칭, 인스턴싱..)가 있다.
* 배칭(Batching)
여러 개의 그래픽 객체를 하나의 단일 그래픽 명령(하나의 드로우콜)으로 결합하여 처리하는 기술이다.
여러 객체를 하나의 배치로 묶어 GPU에 전송하면 렌더링 성능이 향상된다.
동일한 머테리얼을 공유하면 머테리얼을 사용하는 객체들을 하나의 배치로 그룹화하여 한번에 그릴 수 있다. 예를 들어 100개의 객체 중 50개가 동일한 머테리얼을 공유한다면, 50개의 객체를 하나의 배치로 그룹화할 수 있어 나머지 50개의 배치 + 그룹화 배치 1로 51개의 드로우콜수로 줄일 수 있다.
*인스턴싱(Instancing)
하나의 그래픽 객체(하나의 메쉬와 머테리얼)를 여러 번 복제하여 여러 개의 동일한 객체를 그리는 기술이다.
각 객체들은 동일한 메쉬와 머테리얼을 공유하지만 서로 다른 위치, 크기, 회전 등의 속성을 가질 수 있다.
인스턴싱은 동일한 객체를 한 번 그리고 이를 여러 번 복제하여 다양한 속성을 가진 객체를 렌더링 할 수 있어 대규모 객체를 효율적으로 처리하고 렌더링할 수 있다.
1.2 지오메트리 단계 (Geometry Stage)
주로 GPU에서 수행되며, 다음과 같은 작업이 이루어진다.
- 정점 처리(Vertex Processing): 각 정점의 위치를 월드 좌표계에서 카메라 좌표계로, 그리고 클립 좌표계로 변환합니다. 이 과정에서 조명 계산과 스키닝(skinning)도 수행될 수 있습니다.
- 테셀레이션(Tessellation): 정점을 더 세밀하게 분할하여 더 많은 폴리곤을 생성합니다. 이는 높은 디테일을 필요로 하는 표면에 사용됩니다.
- 뷰 변환 및 클리핑(View Transformation and Clipping): 변환된 정점을 화면 공간으로 매핑하고, 화면에 보이지 않는 부분을 제거합니다.
- 프리미티브 어셈블리(Primitive Assembly): 정점을 삼각형 등의 기본 그래픽 프리미티브로 결합합니다.
1.3 래스터화 단계 (Rasterization Stage)
주로 GPU에서 수행되며, 다음과 같은 작업이 이루어진다.
- 래스터화(Rasterization): 프리미티브를 픽셀로 변환합니다. 이 과정에서 화면 공간의 각 삼각형이 픽셀 단위로 분할됩니다.
- 프래그먼트 셰이딩(Fragment Shading): 각 픽셀의 색상을 계산합니다. 텍스처 매핑, 조명, 그림자 등의 효과를 적용하여 최종 픽셀 색상을 결정합니다.
- 뎁스 및 스텐실 테스트(Depth and Stencil Testing): 픽셀이 화면에 실제로 그려질지 여부를 결정합니다. 뎁스 테스트를 통해 뒤에 있는 물체가 앞의 물체에 가려지는 것을 처리합니다.
- 블렌딩(Blending): 여러 반투명 물체를 렌더링할 때, 픽셀 색상을 혼합하여 최종 색상을 계산합니다.
2. 요약
렌더링 파이프라인은 3D 모델을 화면에 그리는 일련의 단계를 포함한다. 이 과정은 크게 응용 프로그램 단계, 지오메트리 단계, 그리고 래스터화 단계로 나뉘며, 각 단계에서 다양한 그래픽 처리 작업이 이루어진다.
1. 응용 프로그램 단계: CPU에서 실행되며, 게임 로직 처리, 장면 관리, 드로우 콜 생성.
2. 지오메트리 처리 단계: GPU에서 실행되며, 정점 변환, 조명 계산, 클리핑, 프리미티브 조립.
3. 래스터화 단계: GPU에서 실행되며, 프리미티브를 픽셀로 변환하고, 각 픽셀의 색상을 계산하여 최종 이미지를 생성.
'Graphics' 카테고리의 다른 글
| [그래픽스] 렌더링 파이프라인(3) / Rasterization/Pixel Shader/Output Merge (0) | 2024.05.27 |
|---|---|
| [그래픽스] 렌더링 파이프라인(2) / Vertex Shader (0) | 2024.05.27 |
| [그래픽스] 렌더링 파이프라인(1) / Input Assembly (1) | 2024.05.25 |