[Graphics] Rendering Pipe Line
by 브이담곰Rendering Pipe Line
: 3차원 이미지를 2차원 레스터 이미지로 표현하기 위한 단계적인 방법.
레스터(raster) 화상 정보를 표현하기 위해 이미지를 2차원 형태의 픽셀로 구성하여 표현하는 것. 연속된 픽셀들의 집합.
랜더링 파이프 라인은 크게 3가지 단계로 나눌수 있다.
1. Application
CPU에서 처리되는 단계이다. ex) Collision detection, Speed up techniques, Animation
- Curling(컬링) : 뷰에 들어오더라도 실제로 사용하지 않는 객체는 제거하는 기법.
- Batching(배칭) : 비슷한 속성을 가진 오브젝트끼리 묶어 처리하는 것.
2. Geomery
Vertex Transform
Vertex와 Poygon을 처리한다.
Local Space - 원점을 기준으로 얼마나 떨어진 위치에 Vertex가 있는지 나타낸 좌표 시스템.
World Matrix- 로컬 스페이스 좌표를 가진 하나의 도형을 월드 좌표에 배치. 물체의 TRS( 이동, 회전, 변경 )의 연산을 적용한 것이 월드 좌표가 된다.
D3DXMatrixTranslation(&매트릭스, 좌표1, 좌표2, 좌표3);
pDevice -> SetTransform(D3DTS_WORLD, &매트릭스);
View Matrix- 카메라를 원점 기준으로 맞춰주면서 월드 좌표에 있는 사물을 그에 맞게 이동하는 작업이다.
world space에서 view space로의 좌표변환을 view transform이라 부르고, 해당 변환을 수행하는 행렬을 view matrix라고 한다.
Projection Matrix- 카메라 기준의 정점 위치를 화면에 보이기 위한 정점 위치로 변환한다.
D3DXMatrixLookAtLH(&매트릭스, &(월드상의)카메라위치, &(월드상의)카메라가 보는 지점, &(월드상의) 업 벡터 (보편적으로 y축이다.));
pDevice -> SetTransform(D3DTS_VIEW, &매트릭스);
Lighting
라이트를 계산하여 색을 결정한다.
Projection
3차원 기하구조를 2차원으로 투영하여, 2차원 위치로 매칭시킨다.( View Space -> Clip Space )
절두체(Frustum)이 정해지고, 절두체를 벗어나는 폴리곤은 모두 버려진다.(경계에 있는 폴리곤은 일단 유지)
직교 투영(Orthographic Projection) 또는 원근 투영(Perspective Projection)이 진행된다.
Vertex Shader의 최종 출력은 클립 공간(Clip Space) 의 정점 데이터이다.
직교투영(Orthographic Projection)
거리와 관계없이 크기가 같다.
원근 투영(Perspective Projection)
멀리 떨어진 물체는 가까운 물체에 비해 작게 나타남.
D3DXMatrixPerspectiveFovLH(&매트릭스, 시야각(라디안), 종횡비(너비/높이), 가까운평면까지 거리, 먼 평면까지 거리);
p_Device -> SetTransform(D3DTS_PROJECTION, &매트릭스);
Cliping
절두체 정의에 의해 경계에 걸쳐진 폴리곤들을 잘라내어, 절두체 외부 영역을 버리는 단계.
Geometry stage에서의 전체적인 흐름
3. Rasterizer
Mesh의 Polygon을 픽셀로 매칭시키는 과정.
Interpolation
vertex shader로부터 전달 받은 정점들의 색을 보간하여 픽셀을 채워줌.(Gouraud Shading)
Texturing
이미지를 오브젝트에 매핑함.
Z-buffering ( Depth buffering )
pixel shader에서 결정된 픽셀은 RGBA 이외에도 픽셀과 카메라 거리를 저장하는데, 이때 저장되는 버퍼를 depth buffer라고 한다.
depth buffer을 통해 depth test를 하게 되고 필요 없는 정보는 걸러낸다.
필요없는 정보 = 가려진 픽셀, 투명한 픽셀, 거리에 따른 제거, 렌더 타깃 제외 대상
Double Buffering (Swap Chain in D3D)
- 두 개의 버퍼를 이용한다. ( front , back )
- 백 버퍼가 렌더링 되고 있을 때, 프론트 버퍼가 화면에 보여진다.
- 새로운 이미지가 생성되면 백 버퍼와 스왑하여 화면의 깜빡임이 없도록 한다.
'Client > directX' 카테고리의 다른 글
[Graphics] Tesselation (1) | 2024.02.27 |
---|---|
[Graphics] Vertex Shader VS Pixel Shader (0) | 2024.02.27 |
[DirectX11] Vcpkg-Imgui 설치하기 (0) | 2022.09.17 |
[CGP(2)] DirectX11 기초 개념 복습(1) (1) | 2022.09.02 |
[DirectX11] Texture Normal(Bump) Mapping (0) | 2022.05.31 |
블로그의 정보
농담곰담곰이의곰담농
브이담곰