본문 바로가기
공부

DX 11 - 렌더링 파이프 라인

by MY블로그 2023. 1. 3.
● 렌더링 파이프 라인

*파이프 라인 => 전단계의 출력이 다음 단계의 입력인 구조를 갖는다.

전체적인 과정은 9개의 과정으로 이루어져있으며 3D 에서 9가지를 전부 사용하거나 일부만사용한다고함.

 

다이렉트11에서 그래픽 파이프라인을 정의하는 인터페이스는 ID3D11Device, ID3D11DeviceContext 이다.
ID3D11Device : GPU와 GPU의 자원의 virtual representation을 제공.

ID3D11DeviceContext : 파이프라인에 대한 그래픽처리를 나타낸다.


ID3D11Device 인스턴스로 장면에서의 그래픽을 처리하는 GPU 자원으로 구성하고 획득하며, 

ID3D11DeviceContext 로 그래픽 파이프라인에서의 적절한 쉐이더 단계에서 자원들을 처리한다. 

ID3D11Device 메소드는 씬을 setup하거나 device가 바뀔때 호출되지만 

ID3D11DeviceContext 는 매 프레임마다 호출한다.

지금 배우는 2D 수업에서는 필수는 5가지 를 사용한다.
DrawCall -> IA(정점생성) -> VS(정점의이동) -> RS(픽셸단위생성) -> PS(픽셸의색상정의) -> OM(출력)

 

1. Input Assembler (입력조립기) ( I A )

정점(Vertex)정보정점이 찍힐 순서(Index) 정보를 얻어와 그리고자 하는 도형을 조립해준다.

2. Vertex Shader (정점 셰이더) ( V S )

Input Assembler 단계를 거쳐 도형이 조립된 이후에 들어오는 단계이다.

정점 하나를 받아서 정점 하나를 출력한다고 생각 한다면 된다.

화면에 그려질 모든 정점 정보는 이 단계를 거쳐가며, 하드웨어(GPU)에서 진행(자동으로)이 된다고 한다.

구체적인 내용은 사용자의 정의로 구현하여 그래픽 장치에 넘겨주는 개념이다.

3. Hull Shader (덮개 셰이더) ( H S )

다음단계인 Tessellator 단계를 사용하기 위한 준비라고 볼 수 있다.

사용을 할꺼면 Hull Shader, Tessellator, Domain Shader 이 3가지를 전부 사용하거나

그렇지 않을꺼면 셋다 사용하지 않아야 한다.

4. Tessellator (분할기) ( T S )

한 Mesh의 삼각형들을 더 잘개 쪼개서 새로운 삼각형을 만드는 과정이다.

새로운 삼각형들을 새로운 위치로 이동함으로써 좀더 세밀한 메시를 표현 할 수 있다.

최적화단계에서 보자면

1) 카메라에 가까운 메시의 면들을 좀 더 세밀하게 표현하고,

카메라와 거리가 먼 면들은 테셀레이션을 적용하지 않는 방식의 세부수준 메커니즘을 구현 할 수 있다.

(쉽게말해 가까우면 정밀하게 그리고 멀면 대충그린다)

2) Low Poly 메시를 즉석에서 추가하여 메모리에 적용 할 수 있다.

3) 애니메이션, 물리 처리 같은 연산들을 단순한 저다각형 메시에 대해 수행하고, 테셀레이션된 고 다각형 메시는 랜더링에만 사용함으로써 연산량을 줄일 수 있다.

5. Domain Shader ( D S )

테셀레이션의 세번째 단계로, 출력패치에서 세분화된 점의 꼭지점 위치를 계산한다.

테셀레이션에서의 출력 UV 좌표, Hull Shder 출력 상수에 대한 읽기 전용 권한이 있다.

6. Geomatry Shader ( G S )

하나의 도형을 받아서 해당 도형의 모양을 주무를수 있다.

기하구조를 생성하거나 파괴할수 있다는 소리이다.

입력 기본 도형을 여러 기본 도형들로 확장할 수도 있고, 조건에 따라서 출력하지 않고 폐기 할 수도 있다.

 

+ Stream Output shader

기하 쉐이더단계(또는 정점쉐이더 단계)에서 메모리에 있는 하나 이상의 버퍼로 정점 데이터를 연속적으로 출력하는 단계. 메모리에 출력된 데이터들은 pipeline에서 다시 읽어들일 수 있다. 

7. Rasterize (래스터화) ( R S ) 

투영된 3차원 삼각형 으로부터 픽셀 생상들을 계산해내는 것이 레스터라이즈의 주 목적이다.

앞면을 출력하고 뒷면을 추려낸다.

8. Pixel Shader ( P S )

위의 작업을 거친 후 그래픽 장치에서 실행하는 단계이다.

보간된 정점 특성들을 입력받아 하나의 색상으로 출력을 해준다.

고정된 색상을 출력하는 심플한 과정부터 조명, 반사 그림자 등의 복잡한 과정까지 다양한 형태를 가지고 있다.

9. Output Merger(출력 병합 단계) ( O M )

출력을 위해 부가적인 요소 (스탠실, 깊이) 등을 병합해주는 단계이다.

출력 하기로 한 픽셀의 단편은 후면버퍼에 기록이 된다. 

(출력과 연관된 전반적인 단계)

 

참조 사이트

https://blog.nullbus.net/13

 

DirectX11 Tutorial 4 - 버퍼, 셰이더, HLSL

원문: http://www.rastertek.com/dx11tut04.html 이 튜토리얼은 DirectX 11의 정점(vertex)과 픽셀 셰이더에 대한 소개가 될 것입니다. 또한 DirectX 11에서의 이것들에 대한 사용법도 포함합니다. 이것들은 3D 그래

blog.nullbus.net

https://copynull.tistory.com/242

 

[DirectX11] Tutorial 4 - 버퍼, 쉐이더 및 HLSL

Tutorial 4 - 버퍼, 쉐이더 및 HLSL 원문 : http://www.rastertek.com/dx11s2tut04.html 이 튜토리얼은 DirectX 11에서 버텍스 및 픽셀 쉐이더를 작성하는 방법을 소개합니다. 또한 DirectX 11에서 버텍스 및 인덱스 버퍼

copynull.tistory.com

 

'공부' 카테고리의 다른 글

복습 - DX11 렌더링파이프라인  (0) 2023.01.08
[C++ / Dx11] 색상표 만들기  (0) 2023.01.05
C++ / Dx11 중력반사  (0) 2023.01.03
C++ / Dx11 반사 / 좌표 충돌  (0) 2023.01.02
C++ / Dx11 투사체 포물선 벡터와 마우스 좌표  (0) 2022.12.29

댓글