본문 바로가기

DirectX

[DirectX 12] 렌더링 파이프라인

컴퓨터가 오브젝트 즉 도형을 표현하기 위해 사용하는 기본 단위

1. 점

2. 선

3. 삼각형(면)

특히 모든 면은 삼각형으로 표현이 가능하기 때문에, 이 삼각형이 많아질수록 연산이 많아지지만, 세밀한 표현이 가능하다.

 

CPU와 GPU의 차이

CPU는 복잡한 연산을 잘하고 뛰어난 기억력을 가진 고급 인력(Control, ALU, Cache, DRAM), GPU는 ALU가 대부분을 차지하는 계산기가 단순히 병렬적으로 계산만을 위한 집단.

연결되는 연산, 연관성이 있는 연산은 CPU가 알맞다.(파이프라인), 그 외 단순히 연관성이 없는 단순 연산들은 GPU에 더 알맞다.

 

게임에서 오브젝트들은 독립적인 경우가 많기 때문에 병렬적인 특성을 가진 GPU가 연산을 하는 것이 좀 더 올바른 감이 있다. 

먼저 GPU는 Input - Assembler를 통해서 정점(점, 선, 삼각형의 꼭지점)의 연결에 대한 정보를 입력받는다. 다음으로 정점 셰이더를 통해 정점 변환에 대한 연산을 진행한다.

 

(ex. 정점의 좌표 변환 등등), 그 아래 있는 Hull 셰이더, 테셀레이터, 그리고 도메인 셰이더를 통틀어 테셀레이션 단계라고 한다. 여기서는 정점을 좀 더 추가하는 역할을 수행한다. (Ex. MMORPG같은 오픈 월드에서 저 멀리있는 삼각형 등등은 더 적게, 그리고 가까이 있는 물체들은 삼각형을 추가해서 더 면밀하게 보이게 한다.)

 

그 이후 기하 셰이더를 이용해서 좀 더 작은 단위의 삼각형을 상대로 다루는 작업을 진행한다. 

 

후에 정점에 대한 연산이 끝나면 세부적인 점들에 대한 즉 삼각형에 대한 보간을 실시하는 레스터라이저라는 단계를 진행한다. 안티 앨리어싱 등등과 같은 픽셀 단위의 연산을 진행하는 단계라 볼 수 있다.  

 

그 이후 색상에 대한 변경을 진행하는 픽셀 셰이더를 진행한 뒤 아웃풋-병합 단계를 이용해서 결과값을 반환을 진행한다.

 

그리고 이러한 GPU를 다루기 위해서 작업을 할 수 있게 OS 회사 등에서 제공을 하는 것이 바로 그래픽스 라이브러리이다.

'DirectX' 카테고리의 다른 글

[DirectX 12] Direct3D 초기화  (0) 2022.01.10
[DirectX 12] 명령 대기열  (0) 2022.01.06
[DirectX 12] DirectX 기초 지식  (0) 2022.01.04