[DirectX] 렌더링 파이프라인

라멘커비·2024년 3월 29일
0

DirectX 2D

목록 보기
7/24
post-thumbnail

렌더링 파이프라인

렌더링 파이프라인이란 어떤 렌더링 라이브러리가 그래픽카드를 어떻게 사용해서 화면에 무언가를 보이게 하느냐에 대한 과정을 말한다.
렌더링 파이프라인은 렌더링 라이브러리마다 다르다. 다르지 않은 점은 보통 레스터라이저라는 단계가 있고 가장 핵심단계이다.
모니터의 픽셀에 이미지 건져내(?)서 보여주는 거..

DirectX 렌더링 파이프라인

(가운데가 단계, 왼쪽은 리소스 표현, 오른쪽은 어떤 인터페이스를 통해서 사용할 수 있는지를 설명)

Input Assembler, Vertex Shader

모니터에서 어떤 픽셀을 선별하는 과정.

  • 아직 모니터에 뭔가 뜰 수 있는 도형이 아니다. 점을 준비한다. 우리도 버텍스버퍼 만들거임.

  • 점을 변형시킨다. 보통 행렬 사용. 버텍스 쉐이더가 다음의 역할을 한다. 버텍스 쉐이더에서 투영행렬까지 곱해짐.

  • 인덱스버퍼는 점을 연결하는 순서에 관여한다. 오른쪽에 PRIMITIVE_TOPOLOGY는 연결하는 방식에 관여.

  • 인덱스버퍼와 토폴로지라는 게 도형을 만들어 준다.

다수의 쉐이더 과정

Rasterizer 레스터라이저

  • 여기까지 해도 아직 도형이 뷰포트에 나오지도 않음. 레스터라이저 단계에서 뷰포트행렬 곱해줌.

  • 앞면 뒷면 제거, 깊이값 z에 의한 그릴지 안그릴지를 결정, 화면 밖으로 나간거 제외 기능

  • homogenous division

→ 이렇게해서 픽셀 건져냄

Pixel Shader

건져낸 픽셀에 무슨색을 칠할지, 아니면 이미지로 채울지 를 정함

Output Merger

어디에 이 색을 출력하는지, 아니면 어떤 이미지에 이 결과를 그리는지 등등 마지막 결정.
blending => 기존에 뭔가 그려져 있었으면 걔랑 어떻게 섞을지

우리 엔진

EngineBuffer

아래 버퍼들을 다 따로 쓰는 일은 없고 함께 쓴다. 그래서 엮어서 얘기하는 게 메쉬임. 근데 다이렉트에서는 메쉬라는 개념이나 이름도 없음. 우리가 따로 EngineMesh 만들어서 쓸거임.

부모 EngineBuffer

EngineVertex

3D로 그려지는 점은 위치만 가질 필요가 없다. 정확히는 위치빼고는 다 자유. 점 1개를 구성하는 요소(점이 갖고 있도록 넣어주고 싶은 정보)들을 마음껏 넣으면 됨.
점이 만들어짐 -> 저장장치 중에 그래픽카드 램에 들어가게 됨

EngineVertexBuffer

  • 버텍스 버퍼와 인덱스 버퍼 구분은 BindFlags로 한다.

EngineIndexBuffer

삼각형을 어떻게 그릴지에 대한 순서 넣어줌. 점 6개를 넣어주는 것보다 정수 6개를 넣어주는 게 더 합리적이라서 이런 방식으로 쓰게 됨.

EngineMesh

  • EngineDevice Initilize()될 때 > 그 안에서 UEngineGraphicDevice::EngineResourcesInit() 실행 > 그 안에서 VectexBuffer Create > IndexBuffer Create > Mesh Create
    • VertexBuffer, IndexBuffer, Mesh 모두 EngineResource로 Create되는 거임

profile
일단 시작해보자

0개의 댓글