경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다.
게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다.
이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다.
프로그래머블 파이프 라인은 아래 그림과 같은 구조를 가진다.

예전에는 vertext shader, fragment shader 단계에서 모두 shader 개념이 없는 vertex processing, fragment processing 으로 fixed VLSI 칩으로 구현되었다. 이러한 fixed pipeline은 이후 수정이 불가하다는 단점을 가진다.
이후 VLSI 를 shader로 대체해 위와 같은 과정으로 진행된다.
요즘은 모든 단계에서 병렬 처리로 진행된다.
shader는 GPU에서 병렬 처리로 돌아가는 small-size 프로그램이다.
Vertex Shader 단계

사용자의 vertex data가 input으로 주어지면 컴퓨터 스크린에 나오기 적합하도록 다른 좌표계로 변환한다.
즉, 주어진 3D 좌표가 우리가 보는 화면인 2D인 컴퓨터 스크린 화면 중 어느 픽셀에 나올 지 계산한다.
Primitive assembly 단계

vertex processing이 끝난 vertex 정보를 결합해 primitive(점, 선분, 삼각형)으로 만든다.
back face culling(뒷면 축출)을 enable하면 이 단계에서 진행된다.
Rasterization 단계

primitive에 포함되는 pixel만 선정한다.
frame buffer에서 실제로 표현할 수 있는 픽셀들의 집합을 만든다.
이 과정에서 bi-linear interpolation(이중 선형 보간)을 한다.
출력해야하는 모든 fragment마다 계산한다.

edge color값들을 각 vertex color 값의 비례식 계산한다.
각 edge를 다 구하면
다음은 위 그림 기준 왼쪽에서 오른쪽, 수평으로 다시 비례식 계산해 모든 값을 계산한다.
Fragment shader 단계

앞선 단계에서 나온 모든 fragment(pixel + associated data)를 처리한다.
Blend 단계

fragment 단위 처리로 추가로 다양한 효과를 준다.
post-processing(후처리) 단계이다. (ex. 안개 효과)
'컴터 > OpenGL' 카테고리의 다른 글
| [OpenGL] Look-At, Orthographic Projection (2) | 2023.06.10 |
|---|---|
| [OpenGL] VBO(Vertex Buffer Objects) (2) | 2023.06.10 |
| [OpenGL] Back face Culling (0) | 2023.06.10 |
| [OpenGL] Z-buffer method (0) | 2023.06.10 |
| [OpenGL] Double Buffering (0) | 2023.06.10 |



