# Part 03 | 셰이더를 익히기 위한 기반 지식들

## 01 렌더링 파이프라인 (렌더링의 순서)

**1단계: 오브젝트 데이터 받아오기**

그래픽 카드는 Vertex(정점)으로 이루어진 물체의 데이터 값을 받아온다. vertex에는 index number, position, normal, color, UV, tangent 등의 정보가 있다.

**2단계: Vertex(정점) 셰이더**

vertex shader에서 vertex의 데이터들로 셰이딩 작업한다.

로컬 좌표계 → 월드 좌표계 → 카메라 좌표계 → 프로젝션 좌표게

* **로컬 좌표계**: 버텍스의 위치 값은 초기엔 로컬 좌표계 상태이다. 모든 오브젝트는 자기 위치가 원점이라고 생각함.
* **월드 좌표계**: 여기에 '월드 변환행렬(월드 좌표계)'를 곱해서 로컬 좌표계를 월드 좌표계로 변환.
* **카메라 좌표계**: 월드 좌표계 버텍스들은 '카메라 행렬'에 곱해지고, 월드 좌표계 버텍스들이 카메라의 중심점으로부터의 상대적 거리로 다시 연산됨. 카메라의 중심점이 0,0,0이고, 다른 물체들이 여기서 상대적으로 얼마나 떨어져 있는지로 표현됨. 아직 원근감은 표현 안됨. 카메라 행렬은 View 또는 Orthgraphic Projection이라 부름.
* **프로젝션 좌표계**: 카메라 행렬로 정렬된 버텍스들은 다시 한 번 'Projection 행렬'로 곱해짐. 카메라에서 먼 곳은 좁혀진 것처럼 버텍스 위치를 조정. 원근감 부여됨.

여기까지의 결과물을 그대로 모니터에 출력하면 텍스쳐도 음영도 없는 폴리곤 덩어리 나옴. Light 연산하면 'Vertex Light'라고 하는 매우 가볍고 부정확한 라이트를 연산할 수 있긴 함. 예시로는 고라우드 셰이딩(Gouraud Shading)이라는게 있음.

**3단계: 레스터라이져 (Rasterizer)**

오브젝트의 메쉬가 모니터에서 표현될 때 어느 픽셀로 표현될지 나타내는 레스터라이즈를 거쳐야 함. 모니터에 보이기 위해 2D 이미지로 만든다는 뜻. 이를 '레스터화'라고 한다.

**4단계: Pixel Shader, Fragment Shader**

화면에 픽셀은 찍혔지만 아직 텍스쳐도 없고 라이팅도 없는 상태. 이제 픽셀 셰이더가 가동되어 조명과 텍스쳐, 그림자와 각종 특수효과 등을 연산한다. (프레그먼트(조각) 셰이더는 픽셀보다 상위 개념이지만, 일단은 거의 동일하다고 생각하고 넘어가도 됨)

**요약**

점 찍은거 데이터 받아와서 좌표 어딨는지 계산한 다음 카메라랑 화면에 맞게 조정해주고 색칠해준다

## 02 모니터에 표현되는 색과 빛의 기본원리 (모니터의 색은 어떻게 표현되는가?)

가산 혼합 : 모니터 색 표현 방법. 더하면 밝아지고 다 더하면 흰색. 모니터는 RGB 3개를 가진 서브픽셀들로 이루어져 있다. RGB 중 R만 켜면 빨간색으로 보이긴 하는데 흰색보다 1/3쯤 어두워짐. RGB(100%, 100%, 100%) → Float3(1.0, 1.0, 1.0) 1(흰색)보다 밝은 빛이 존재는 하지만 현재의 모니터로 출력하는 건 불가능. 1에서 어떤 색을 빼면 그 색이 반전된다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lazyartisan.gitbook.io/note/main-page/books/urp/part-03-or.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
