Shader) UnityRenderPipeLine
오늘부터 Unity Shader에 관련해 공부하며, 습득한 것들을 다시 뒤돌아 볼 수 있도록, 조금씩 정리, 작성 해 보려한다.
Render Pipeline
현재 Unity 버전에서는 세 가지 종류의 Render Pipeline이 있다.
-
Built-in RP(기본 렌더 파이프라인)
-
Universal RP(이전 버전에서는 Lightweight RP로 불림)
-
High-Definition RP(HD RP)
파이프 라인이란?
- 일련의 단계를 거쳐 더 큰 작업을 수행하는 과정을 의미한다.
- 즉, 여러 개의 단계가 순차적으로 실행되면서 전체적인 작업을 처리하는 방식이다.
Render Pipeline이란?
- 3D 객체(폴리곤 오브젝트)가 화면에 렌더링되기까지 거치는 전체 과정을 의미한다.
- 각 Render Pipeline마다 고유한 특징이 있으며, 사용 중인 파이프라인의 종류에 따라 화면상의 오브젝트의 외형 및 최적화 방식이 달라진다.
예를 들어, 다음 요소들이 영향을 받는다.
- 재질(Material) 속성
- 광원(Light Source)
- 텍스처(Texture) 처리 방식
- 셰이더 내부의 연산 방식
Render Pipeline의 기본 아키텍처
Unity는 Render Pipeline의 아키텍처를 4가지 단계로 나눈다.
- Application Stage(애플리케이션 단계)
- Geometry Processing Phase(지오메트리 처리 단계)
- Rasterization Stage(래스터라이제이션 단계)
- Pixel Processing Stage(픽셀 처리 단계)
이 모델은 실시간 렌더링 엔진에서 사용되는 기본적인 Render Pipeline 모델이다.
애플리케이션 단계 (Application Stage)
애플리케이션 단계는 CPU에서 시작되며, 씬(Scene) 내에서 발생하는 여러 작업을 처리하는 역할을 한다. 예를 들어, 다음과 같은 작업이 이 단계에서 수행된다.
-
충돌 감지 (Collision Detection)
-
텍스처 애니메이션 (Texture Animation)
-
키보드 입력 (Keyboard Input)
-
마우스 입력 (Mouse Input)
기능
- 저장된 메모리 데이터를 읽어 기하학적 기본 요소(Primitives)를 생성한다.
- 예: 삼각형, 선, 정점(Vertex) 등
- 애플리케이션 단계가 끝나면, 이 정보가 지오메트리 처리 단계(Geometry Processing Phase)로 전달된다.
- 이후 행렬 곱셈(Matrix Multiplication)을 이용한 정점 변환(Vertex Transformation)이 진행된다.
지오메트리 처리 단계 (Geometry Processing Phase)
우리가 컴퓨터 화면에서 보는 이미지는 CPU가 요청한 뒤 GPU에서 처리된다.
이 과정은 두 가지 주요 단계를 거친다.
- 렌더 상태(Render State) 구성
- Geo 처리 단계부터 픽셀 처리 단계까지 포함하는 일련의 과정을 설정하는 단계
- 객체(Object) 그리기
- 설정된 상태를 기반으로 화면에 객체를 렌더링
GPU에서 진행되며, 정점(Vertex) 처리 작업을 수행하는 단계이다.
이 단계는 4개의 하위 프로세스로 나뉜다.
- Vertex Shading(정점 셰이딩)
- Projection(투영)
- Clipping(클리핑)
- Screen Mapping(스크린 맵핑)
Vertex Shader Stage(정점 셰이더 단계)의 역할
- 객체의 정점(Vertex) 위치를 계산한다.
- 계산된 정점 위치를 다양한 좌표 공간(Space Coordinates)으로 변환하여 화면에 투영(Projection)할 수 있도록 한다.
이 과정에서 정규 벡터(Normals), 탄젠트(Tangents), UV 좌표(UV Coordinates) 등의 속성을 다음 단계로 전달할 수 있다.
Projection(투영)과 Clipping(클리핑)
-
투영 방식은 카메라(Camera) 설정에 따라 달라진다.
- Perspective
- Orthographic, 평행 투영
-
렌더링 프로세스는 카메라 절두체(Camera Frustum), 뷰 공간(View-Space)
내에 있는 요소만을 처리한다.
-
예를 들어, 씬에 있는 구의 절반이 카메라 프러스텀 밖에 있다면
-
절두체 안에 있는 부분만 화면에 투영
-
절두체 밖의 영역은 렌더링에서 제외(Clipping)
-
-
Screen Mapping(스크린 맵핑)
- 클리핑된 오브젝트는 메모리에 저장된 후 2D 화면 좌표(Screen Coordinates)로 변환된다.
- 이를 스크린 좌표(Screen Coordinates) 또는 윈도우 좌표(Window Coordinates)라고 한다.
래스터라이제이션 단계 (Rasterization Stage)
이제 객체는 2D 화면 좌표를 가지며, 픽셀(Pixel)로 변환되는 과정을 거친다.
이러한 화면 픽셀을 찾아내는 과정을 래스터라이제이션(Rasterization)이라고 한다.
- 씬(Scene) 내의 객체와 화면의 픽셀을 동기화(Synchronization)하는 과정
- 두 가지 주요 프로세스로 구성됨
Triangle Setup(삼각형 설정)
- 객체의 경계선을 정의하는 수학적 방정식을 생성
- 이 데이터는 다음 과정으로 전달됨
Triangle Traversal(삼각형 탐색)
- 삼각형 내에 포함되는 모든 픽셀을 나열(Listing)
- 이때 생성된 픽셀 그룹을 프래그먼트(Fragments)라고 한다.
픽셀 처리 단계 (Pixel Processing Stage)
이 단계에서는 이전 과정에서 생성된 픽셀 데이터를 기반으로 최종 Color를 계산한다.
이 과정이 끝나면 픽셀들이 화면에 렌더링된다.
Pixel Shader Stage(픽셀 셰이더 단계)의 역할
- 각 픽셀의 가시성(Visibility)을 결정
- 픽셀의 최종 색상을 계산하여 컬러 버퍼(Color Buffer)에 저장
- 이후, 완성된 이미지가 화면에 출력.
댓글남기기