티스토리 뷰
[CG] Progammable Graphics Pipeline
Daniel803 2023. 9. 30. 05:12우선 Graphics Pipeline의 정의에 대해 살펴보면, 전달된 그래픽 데이터를 3D 표현에서 스크린 위에 2D 픽셀로 변형하는 연속된 단계를 말하고, 요즘엔 기존 Fixed-function pipelines가 아닌 Programmable Graphics Pipeline이 사용된다. 한 교수는 Programmable Graphics Pipeline을 vertex/line/triangle의 3D 데이터에서 2D 스크린으로의 여정으로 표현한다.
Programmable Graphics Pipeline은 이전에 사용된 Fixed-function pipelines와 비교해 그래픽 하드웨어가 데이터를 처리하는 방식에 변화를 가져왔다. Fixed-function pipelines 시대에는 개발자가 그래픽 하드웨어가 그래픽을 처리하고 rendering하는 방식을 제한적으로만 제어할 수 있었으며, 대부분의 작업이 미리 정의되어 있었다. Programmable Graphics Pipeline이 등장하면서 개발자는 shader라는 작은 프로그램을 사용해 rendering 프로세스의 상당 부분을 직접 만질 수 있게 됐다.
아래는 OpenGL 공식 홈페이지의 Rendering Piepeline 그림이다.
각 단계에 대해 간단히 살펴보자.
- Vertex Specification
: 가공되지 않은 vertex 데이터를 제공하는 단계로, vertex buffers에 주로 저장된다. 여기에는 positions, normals, texture coordinates, colors 등의 정보가 포함돼 있다. - Vertex Shader
: Pipeline의 첫 번째 programmable (프로그래밍 가능) 단계로, 각 vertex를 처리하고 일반적으로 object space (model space)에서 clip space로 변환을 담당한다. - Tessellation (Optional)
: shader의 하나로 3단계로 나눌 수 있는데, 간단하게 역할에 대해 정의하자면 3D 모델에 더 많은 디테일이나 부드러움을 제공하기 위해 표면을 작은 모양 (주로 삼각형)으로 세분화한다. - Geometry Shader (Optional)
: 또 다른 programmable (프로그래밍 가능) 단계로, input으로 받은 primitives (like triangles or lines, 삼각형이나 선 같은) 를 수정, 복제, 버리기 등의 처리를 한다. 요즘 그래픽 프로그래밍에서 성능 측면을 고려했을 때 자주 사용되지는 않지만, 특정 효과나 연산을 위해서 사용되기도 한다. - Vertex Post-processing
: 기본적으로 "clip space"에서 "NDC (nomalized device coordinates, 정규화된 장치의 좌표)"로 변환하고 clipping (자르는) 작업을 수행한다. - Primitive Assemlby
: vertex를 그룹화 하는 단계로, 3개의 vertex를 하나로 묶어 삼각형으로 만드는 것과 같은 처리를 한다. - Rasterization
: non-programmable (프로그래밍 불가) 단계로, 가공된 vertex를 fragment로 변환해, 어떤 fragment가 화면에 표시될지 결정한다. - Fragment Shader (Pixel Shader)
: 또 다른 Programmable (프로그래밍 가능한) 단계로, 각 fragment의 색과 깊이를 결정하고, texture sampling, 조명 계산, 다른 시각 효과 등에 관여한다. - Per-Sampling Operations
: 깊이 및 stencil* 테스트, blending (블렌딩, 새 fragment와 기존 pixel의 색을 결합하는 작업), 그리고 마지막으로 framebuffer에 색상 값 write가 포함된다.
* stencil
: 별도의 "stencil buffer"를 기반으로 이미지 또는 장면의 어느 부분을 그리거나 수정할지 제어할 수 있는 도구
참고
- https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview
- https://en.wikipedia.org/wiki/Graphics_pipeline
- https://math.hws.edu/graphicsbook/c6/s1.html
- https://www.youtube.com/watch?v=kCDBzuMWTYA&list=PLvv0ScY6vfd9zlZkIIqGDeG5TUWswkMox&index=8
'기술(Tech, IT) > 컴퓨터 그래픽스 (Computer Graphics)' 카테고리의 다른 글
[CG] glm::normalize (OpenGL) (0) | 2023.10.08 |
---|---|
[CG] glm::cross (OpenGL) (0) | 2023.10.07 |
[CG] UV Mapping (유브이 매핑) (0) | 2023.09.29 |
[CG] Vertex Shader (버텍스 쉐이더) - 2 (0) | 2023.09.28 |
[CG] Vertex Shader (버텍스 쉐이더) - 1 (0) | 2023.09.27 |
- Total
- Today
- Yesterday
- defaultdict
- ml
- java
- The Economist
- socket programming
- leetcode
- Computer Graphics
- 리트코드
- 오블완
- Python
- C++
- 이코노미스트 에스프레소
- 머신 러닝
- 안드로이드
- join
- machine learning
- 파이썬
- min heap
- 딕셔너리
- Hash Map
- DICTIONARY
- tf-idf
- I2C
- The Economist Espresso
- vertex shader
- Android
- 이코노미스트
- 소켓 프로그래밍
- 티스토리챌린지
- 투 포인터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |