에디의 우당탕탕 코딩공장

[Graphics] Rendering Pipe Line

by 인턴 에디

Rendering Pipe Line

: 3차원 이미지를 2차원 레스터 이미지로 표현하기 위한 단계적인 방법.

레스터(raster) 화상 정보를 표현하기 위해 이미지를 2차원 형태의 픽셀로 구성하여 표현하는 것. 연속된 픽셀들의 집합.

 

 랜더링 파이프 라인은 크게 3가지 단계로 나눌수 있다.                                                                                                                                                                                 

1. Application

CPU에서 처리되는 단계이다. ex) Collision detection, Speed up techniques, Animation

- Curling(컬링) : 뷰에 들어오더라도 실제로 사용하지 않는 객체는 제거하는 기법.

Curling

- Batching(배칭) : 비슷한 속성을 가진 오브젝트끼리 묶어 처리하는 것.

 

드로우 콜과 텍스처 아틀라스와 배치와 인스턴싱

1. 드로우 콜draw call: CPU가 OpenGL이나 DirectX의 함수를 호출하여 GPU에게 그리기(draw call)을 요청하는 것. 그래픽 API의 모든 드로우콜은 CPU상의 상당한 퍼포먼스 오버헤드를 일으킨다. draw call을 줄이

strange-cpp.tistory.com

 

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- 카메라 기준의 정점 위치를 화면에 보이기 위한 정점 위치로 변환한다.

 

 

[DirectX 11] 3D Transformations

📑 전공과목 교수님의 개별적인 튜토리얼 스크립트를 바탕으로 작성되었습니다.😊 The Geometry Pipeline 3D->2D로 변환이 되는 과정에서는 수학적 절차가 존재한다. 1. World Transformation : 생성되는 모

odlram.tistory.com

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)

 

[DirectX11] Render States

📌 Geometry Shader 📌 Rasterizer Stage Geometry shader로 부터 출력된 primitive data는 rasterizer stage에 보내져, Rasterizer에 의해 렌더링 할 픽셀단위로 분해된다. 래스터라이저에서는 다음과 같은 처리를 수행

odlram.tistory.com

 

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

블로그의 정보

에디의 우당탕탕 코딩 공장

인턴 에디

활동하기