그래픽스 렌더링 파이프라인
= 3D혹은 2D 모델을 화면에 투영하는 렌더링 과정의 프로세스
① InputAssembler
=렌더링 수행할 도형의 정점 정보를 버퍼에 담아 GPU로 운반.
데이터를 기본 형식으로 조립
② Vertex Shader
=정점 데이터를 입력받아 공간 좌표계 변환
Local Space → World Space → View Space →Clip Space
1) Local Space=아직 변환되지 않은 폴리곤 메쉬들의 공간. 메쉬가 각자 개별적으로 존재하는 공간
2) World Space=여러 메쉬들이 하나의 공간, 하나의 좌표계에 모이는 곳
3) View Space=카메라 공간. 카메라가 보는 시점에서의 상대적 좌표
4) Clip Space=카메라 시야에 보이는 메쉬들만 위치한 공간
- World Transform
=확대 축소, 회전, 이동으로 정점 변환
행렬을 통해 계산되어 최종적으로 월드 공간 정보로 변환
View Transform = 카메라 위치를 원점, 바라보는 방향을 +z축으로 변환. 정점에 카메라의 역행렬 곱한다.
Projection Transform = 화면에 보여야 할 물체들만 존재하는 클립 공간으로 변환. 카메라 기준의 정점위치를 화면에 보이는 정점 위치로 변환.
- View transform(Camera transform)
월드 공간으로 변환된 정점들을 특정 시점에서 보기 위해 -카메라 공간으로 이동시키는 것. 카메라 공간은 EYE(카메라 위치), UP(카메라의 위 방향), AT(카메라가 바라보는 방향) 정보를 토대로 카메라 공간으로 변환 한다.
- Projection Transform
최종적으로 화면에 보여야할 물체만 존재하는 클립 공간으로 변환하는 작업
뷰 볼륨(카메라가 볼 수 있는 시야)은 절두체(view frustum)영역으로 정의된다.
1) Culling=렌더링 할 필요 없는 시야 밖( 절두체 영역 밖 )의 메쉬 자체를 제외시키는 것
카메라에서 보이는 면인지 기준으로 판단. 보이지 않는 면이나 물체를 렌더링에서 제거.
정적인 오브젝트에 사용
-back-face culling=카메라 시야 기준 뒷면 제거. 법선 벡터와 시선 벡터의 내적 결과로 면이 카메라를 향하는지 확인
2) Clipping=화면에 맞게 자르는 것. 절두체 영역에 의해 메쉬가 잘리는 것.
동적인 오브젝트에 사용
③ Tessellation
- Hull Shader
Tessellation준비 단계. 모델의 표면을 여러개 삼각형으로 분할하고
각 입력 패치에 해당하는 도형 패치를 생성하고 계산한다.
- Tessellation
주어진 모델을 더 잘게 쪼개서 디테일한 표현 하는 것. (새로운 삼각형 추가)
카메라에 가까운 삼각형은 세부도 높이고, 먼것은 놔두는 방식으로 메모리 계산량을 줄일 수 있다
+) Adaptive Tessellation
물체의 위치와 카메라 거리에 따라 tessellation세분화 수준을 동적으로 조정.
- Domain Shader
(테셀레이션의 세번째 단계) 세분화된 꼭지점 위치를 계산
③ Geometry Shader
정점 데이터를 추가하거나 삭제하여
기본 도형을 다른 도형들로 확장하거나 출력하지 않을 수 있다 .
ex) 하나의 점이나 선분을 하나의 사각형으로 확장하는 것
④ Rasterization
3차원의 삼각형으로 픽셀의 색상 계산
- Perspective Division
투영 변환을 통해 원근법 적용된 3차원 물체들을 2차원 공간으로 변환.
Z좌표로 모든 성분을 나누어 버린다. 이 좌표 공간을 NDC공간이라 부른다.
- View-port Transform
NDC공간의 물체들을 스크린 공간으로 이전시키는 변환
- Scan Transform
삼각형 하나가 내부에 차지하는 프래그먼트를 생성하는 과정
⑤ Pixel Shader
각 픽셀별 데이터 생성, 조명 계산 혹은 텍스쳐 입히는 단계
- Pong Shading
= 픽셀 단위에서 빛과 물체 간의 상호작용을 계산하여 사실적인 조명 효과 구현
⑥ Output Merger
최종단계. 픽셀 색 생성해 렌더 타겟에 출력
후면 버퍼에 기록
+) z-buffer - 각 픽셀의 z값을 기준으로 보이는 픽셀만 렌더링.
'개발' 카테고리의 다른 글
[Vue] 개발자 도구(F12)에서 Vue탭이 안뜰 때 (0) | 2025.03.05 |
---|---|
Docker (0) | 2024.12.16 |
[Javascript] 기초1 (2) | 2024.12.09 |
[HTML, CSS] HTML CSS 기타 (1) | 2024.12.09 |
항해 99 클럽 후기 (1) | 2024.12.01 |