☁️ Rendering Piepline

☁️ Rasterizer Stage
Rasterizer Stage에 도달하면 verticies는 hard-wired vertex post-processing step을 거친다.
- Primitive Clipping
- Perspective Division
- Viewport Transform
Rasterization : pixel fragmentation = primitive를 2차원 이미지 요소(pixels)로 분할한다.
- pixel 마다 필요한 data들을 넣어준다.
- pixel shader는 연산이 많기 때문에 이전에 불필요한 것들을 제거해줘야 한다.

☁️ Primitive Clipping
= 안보이는(= clipping volume 밖) primitive 자르기


- Point : clipping volume 밖에 있으면 버린다. 크기가 1 pixel보다 클 경우에 중점을 체크해서 버릴지 결정.
- Line : 일부만 벗어난 경우 새로운 vertex 생성 후 자르기.
- Triangle : boundary of the clipping volume에 있는 vertices 생성 & 자르기
☁️ Perspective Division
- Camera space의 (x,y,z,1)에 Mproj 적용

- homogeneous(clip) space를 Cartesian space로 바꾸기 위해 w값으로 나눠준다



- viewport : 2차원의 직사각형 모양 공간이다. 3D Scene이 투영된다.
- DirectX = 2×2×1
- OpenGL = 2×2×2

- DirectX

☁️ Face Culling
🔎 Projection line


- 수정본

- 이상한본

- negative = CW and front-face
- positive = CCW and back-face
- 0 = edge on face
- 그치만 back face를 다 날려버리면 반투명같은 물체에서는 문제가 생길 수 있음.
☁️ Rasterization
= convert vector information into a raster image
- window coordinate의 integer grid에서 어떤 square들이primitive에 의해 포함되어있는지 결정.
- square마다 color와 depth value를 할당한다.
- pixel shader가 나중에 최종 색 렌더링을 한다.ㄷ

☁️ Edge Equation
= 픽셀이 삼각형 안에 포함되는지를 판단할 때 사용
- point가 left side에 있는 경우 : negative number
- point가 right side에 있는 경우 : positive number
- point is on the line : zero number

- point가 triangle 내부에 있다면 point는 모든 edge들의 right side에 위치한 것.
- 세개의 edge모두 edge function이 양수를 return

🔎 Edge equation (E)
- A = v1 - v0, B = p - v0
- E = A와 B의 외적 = A x B



- 0 < θ < 180 : positive value
- 180 < θ < 360 : negative value
☁️ Attribute Interpolation
= Fragment에 속성(색상, 텍스처 등)을 보간해서 부여하는 과정
- C0, C1, C2 = 꼭짓점 색상
- p = 내부 픽셀
- 𝜆0, 𝜆1, 𝜆2 = 픽셀 p가 삼각형 내에서 얼마나 각 꼭짓점에 가까운지를 나타내는 가중치

🔎 Barycentric coordinate (중심 좌표계)
= 픽셀 p에 대한 𝜆0, 𝜆1, 𝜆2를 구하는 수학적인 방법 (Edge Equation 활용)
- T0 can be computed by 0.5 ∗ E(p, v1, v2)
- T1 can be computed by 0.5 ∗ E(p, v2, v0)
- T2 can be computed by 0.5 ∗ E(p, v0, v1)


☁️ Rasterization Rule (Top-left Rule)
= 겹치는 픽셀이 있을 때 한쪽만 포함 시키자~
- 삼각형의 edge가 겹칠 때, 겹치는 픽셀을 처리해주지 않으면 두번 계산되기 때문에 이에 대한 처리를 해주는 것
- left edge와 top edge로 선택
