-
Unity] Rendering Pipeline : 렌더링 순서Unity 2024. 12. 6. 07:39
1. 오브젝트 데이터 받아오기
- 그래픽 카드는 버텍스(Vertex, 쉽게 말해서 점)으로만 이루어진 물체의 데이터 값을 받아온다.
- 아직 화면에는 아무것도 존재하지 않고, 값으로만 존재한다.
- Vertex가 가지고 있는 정보
- Index number
- Position : 위치
- Normal : 면에서 수직인 단위 벡터
- Color
- UV(Texcoord) : 텍스처 좌표를 정의하는 2D 좌표
- 접선 (Tangent) 등
→ Vertex 들을 이어 붙여 삼각형을 생성하여 면을 만듬.
2. 정점(Vertex) 셰이더
- 로컬(Local) 좌표계
- 물체가 가지고 있는 자기 중심적인 위치값
- 오브젝트 별로 자신의 pivot 값이 0,0,0 인 상태 (중심값)
- 유니티에서는 로컬 좌표계를 오브젝트(Object) 좌표계라고도 부른다.
- 월드(모델) 좌표계
- 월드 좌표계 : 절대 좌표인 월드 좌표의 중심점으로부터 각 버텍스의 상대적 위치값. 0,0,0이 중심점
- Vertex(로컬 좌표계) * 월드 변환행렬(월드 좌표계) = 절대적인 월드 값으로 나타냄
- 유니티에서는 월드 좌표계를 모델이라고 부른다.
- 카메라 (뷰/ 시선) 좌표계
- 이전까지 오브젝트는 존재했지만, 카메라가 없기 때문에 보이지 않았다.
- Vertex(로컬 * 월드) * 카메라 행렬 = 카메라의 중심점으로부터 상대적 거리
- 물체들은 화면에 보일 수 있게 되지만, 원근감은 고려되지 않음
- 카메라 행렬은 뷰(View)라고보도 부르며, 오토그래픽 프로젝션(Orthographic Projection)으로 부르기도 함
- 프로젝션(Projection) 좌표계
- Vertex(로컬 * 월드 * 카메라) * 프로젝션 행렬 = 카메라에서 부터 느껴지는 원근감
- 먼 곳은 좁혀진 것처럼 버텍스 위치를 조정
- 카메라가 Perspective Projection 일 경우에만 일어나는 순서. Orthographic Projection일 경우엔 생략.
💡 3D 오브젝트가 생성 됐지만, 픽셀 셰이더를 거치지 않아서 화면에 출력되지는 않음
3. 레스터라이져(Rasterizer)
- 3D 오브젝트가 화면에 보이는 부분만 픽셀로 찍어 보여주는 것을 레스터화(Raster化) 라고 한다.
- 이제 모니터에 출력 됨. 매 프레임마다 이 작업이 이루어지며, 픽셀 셰이더가 버텍스 셰이더보다 무겁다.
- 최근 Direct X 에서는 여기에 여러가지 셰이더가 추가로 들어간다. Hull Sahder, Tessellator, Domain Shader, Geometry Shader, Compute Shader …
4. 픽셀 셰이더(Pixel Shader)/ 프레그먼트 셰이더(Fragment Shader)
- 조명과 텍스쳐, 그림자와 각종 특수효과 등 연산
- 연산 과정 : 정점 데이터 → GPU [ 버텍스 셰이더 (정점 좌표변환) -정점위치→ 레스터라이저 -픽셀위치→ 픽셀셰이더(픽셀 색상 결정) ] → 픽셀 색상
- 유니티 셰이더 그래프의 마스터 스택(Master Stack) 도 이 파이프라인 개념 순서대로 만들어져 있음.
반응형'Unity' 카테고리의 다른 글
Unity] Unity Shader Graph 사용해보기 (0) 2024.12.16 Unity] 색을 숫자로 표현하기, 빛의 삼원색 (1) 2024.12.13 Unity] 모바일광고 넣기 - 1: Google AD 사용하기 (2) 2024.12.12 Unity] 셰이더 그래프(Shader Graph) (0) 2024.12.04 Unity] Shader 와 URP (1) 2024.12.03