본문 바로가기
IT 기술/Direct3D

Direct3D 렌더링 파이프라인 총 정리_26일차

by 썬's 2023. 2. 1.

안녕하세요 보글리아입니다.

저번 시간부로 렌더링 파이프라인을 모두 마쳤습니다!!

모두 따라오시느라 고생 많으셨습니다 ㅎㅎ

제가 설명하느라 놓친 부분도 분명히 있을 거고 설명이 부족한 부분이 있을 거라 생각 듭니다..

그래도 제 선에서 최대한 쉽게 설명드리기 위해 노력을 많이 했으니 이번 시간에는 렌더링 파이프라인을 총 정리해 보는 시간을 가져 보겠습니다 ㅎㅎ

※제 수업은 이전주차에서 배운 개념을 재차 설명하지 않습니다※

※본 수업에 들어가기 전 용어정의부터 하겠습니다※

 


용어정의

  • 객체(오브젝트) : 3차원 고형의 물체로 큐브나 돌고래 등을 말한다.
  • 메시(mesh) : 객체를 이루고 있는 삼각형들의 조합을 말한다.
  • 폴리곤(polygon) : 삼각형으로 이 삼각형들이 모여 객체를 생성
  • 정점(vertex) : 하나의 점으로 이 점의 개수에 따라 도형을 만들 수 있음

렌더링 파이프라인의 객체 구조

Direct3D의 렌더링 파이프라인이란 가상의 세계인 화면 속의 3차원 이미지를 생성하기 위해 이 세계를 바라보는 가상의 카메라를 설치하고 이를 이용해 2d 이미지를 만들어내는 과정이라고 생각하시면 됩니다.

즉 쉽게 말해 2d 이미지를 그려 이를 3차원 이미지처럼 보이게 만드는 겁니다.

 

렌더링 파이프라인의 들어가기 앞서 객체의 구조를 먼저 아셔야 합니다.

객체의 메시는 모두 3차원 폴리곤(삼각형)으로 구성되어 있습니다. 여러분들이 출력할 3차원 형상은 모두 삼각형의 조합으로 나타내야 합니다.

메시(mesh)
메시(mesh)

이러한 객체를 삼각형의 조합으로 생성하셨다면, 이제 색상을 입히셔야 합니다.

객체의 색상은 RGBA의 조합으로 생성합니다. RGB는 각각 적색, 녹색, 청색으로 이 색상을 조합해 객체에 색상을 입힙니다. 뒤에 A는 알파로 객체의 투명도를 조절할 수 있습니다.

 

즉 렌더링 파이프라인에서 객체를 정의하면

  • 객체의 메시는 모두 삼각형들로 이루어짐
  • 객체의 색상과 불투명도는 RGBA를 사용해 표현

IA 단계

Direct3D의 렌더링 파이프라인 중 입력 조립기(IA) 단계는 정점과 색인을 읽어 이 읽은 것을 토대로 선분이나 삼각형 등의 도형을 조립하는 단계입니다.

 

이러한 정점들은 개수에 따라 도형을 생성할 수 있습니다. 그리고 정점들은 모두 정점 버퍼라는 곳에 담겨 렌더링 파이프라인에 묶입니다. 정점 버퍼는 정점들을 모아둔 곳이라 이 버퍼만으로는 도형을 만들 수 없습니다.

이 버퍼 안에 정점들을 사용하려면, Direct3D에서 제공하는 기본도형 위상구조 D3D11_PRMITIVE_TOPOLOGY를 사용해 정점을 가지고 기하구조를 표현하실 수 있습니다.

기본도형 위상구조
기본도형 위상구조

 

자 이번에는 색인을 알아보겠습니다. 색인이란 삼각형 목록에서 중복되는 정점을 제거하는 방법을 말합니다.

이 말은 삼각형 하나만 출력하게 되면 정점 세 개를 한 번만 사용해 그릴 수 있습니다.

그렇지만 삼각형이 최소 두 개 혹은 나중 되면 100개 이상도 될 텐데 그러면 삼각형들마다 중복되는 정점이 생깁니다.

이러한 중복되는 정점을 여러 번 건드려 그리게 된다면 연산양도 커지고 메모리도 많이 차지합니다.

 

이를 해결하기 위한 게 색인입니다. 색인은 정점들이 중복되지 않은 고유의 정점들로 취급하기 위한 목록을 만들고 어떤 순서로 삼각형의 정점을 그릴지 나열한 형식입니다.

 

즉 정리하면 IA 단계는 다음과 같은 역할을 합니다.

  • 정점을 그려 이를 이용해 기본도형을 만든다.
  • 기본도형을 만들 때는 기본도형 위상구조를 사용한다.
  • 기본도형의 메시 내 삼각형의 수가 많다면 색인을 사용한다.

VS 단계

Direct3D의 렌더링 파이프라인 중 정점 셰이더(VS) 단계 IA 단계에서 만든 기본도형을 이루고 있는 정점들을 받아 이를 하나하나 출력하는 함수를 만드는 단계입니다. 이 정점들은 모두 화면상에 출력해야 합니다. VS 단계에서 정점들을 화면상에 출력하기 위해 세계 공간과 국소 공간을 아셔야 합니다.

 

세계 공간은 월드 좌표계를 사용하고 국소 공간은 지역 좌표계를 사용합니다.

월드 좌표계란 3차원 화면상의 전역 좌표계입니다. 그리고 지역 좌표계는 객체 자신이 가지고 있는 고유의 좌표계입니다.

즉, 정리하면 객체를 나타낼 때는 월드 좌표계가 아닌 객체 자신의 지역 좌표계를 사용해 화면상에 출력합니다.

 

예를 들어 게임을 만든다고 했을 때, 게임 속의 3차원 세계는 월드 좌표계를 기준으로 만들고 게임 속의 캐릭터나 지형지물은 그 객체마다의 고유한 지역 좌표계를 사용해 월드 상에 배치합니다.

이러한 세계 공간 좌표를 설정하시고 이 안에 객체를 국소 공간 좌표계를 사용해 배치를 다 하셨다면,

이제 이를 바라보는 시점인 시야 공간(view space) 좌표계를 설정하셔야 합니다. 즉 시야 공간이란 관찰자(카메라)인 저희가 화면을 바라보는 시점?이라고 생각하시면 됩니다.

이 시야 공간을 적절히 배치해 객체를 바라보는 시점을 바꿀 수 있습니다.

 

자 이제 시야 공간까지 설정하셨다면, 마지막으로 할 것은 절두체 경계 밖에 있는 도형 부분은 잘라서 폐기하셔야 합니다.

이는 바깥 부분은 화면상에 출력되지 않아 보이지 않는 부분이기 때문입니다.

시야 공간(view space)
시야 공간(view space)

 

여기서 가까운 평면이 모니터인 저희가 바라보는 화면입니다.

그리고 가까운 평면부터 시작해 먼 평면 사이가 객체가 투영되는 곳으로 투영된 거리에 따라 모니터 상에 객체의 크기가 달라지게 됩니다. 이를 그림으로 보면 하단과 같습니다.

절두체
절두체

즉 정리하면 VS 단계는 다음과 같은 역할을 합니다.

  • IA 단계에서 받은 기본 도형을 화면상에 그리기 위해 정점들을 출력하는 함수 생성
  • 이러한 정점들은 화면상에 월드 좌표계와 지역 좌표계를 적절히 보고 배치
  • 배치한 정점들을 가지고 도형을 그렸다면, 이 도형을 바라보는 시야 공간 생성
  • 시야 공간 내 절두체의 경계선 바깥에 있는 부분은 절단(VS 단계 마지막에서 수행)

RS 단계

Direct3D의 렌더링 파이프라인 중 레스터화(RS) 단계는 VS 단계에서 절두체 내 투영된 객체가 있을 때, 이 객체를 이루고 있는 삼각형의 픽셀 색상을 계산합니다. 이 단계에서 여러분들이 아셔야 할 개념은 뷰포트(view port) 공간입니다. 

 

뷰포트란 직사각형 형태로 컴퓨터 화면 일부분의 영역으로 보통 브라우저 창 부분을 말합니다.

하단 그림을 보시면 컴퓨터 화면 모니터가 있고 그 모니터 안에 브라우저 즉, 인터넷 익스플로러나 크롬과 같은 브라우저가 있으면 이 브라우저 창을 실행시키면 나오는 부분이 뷰포트 공간입니다.

 

예를 들어 여러분들이 게임을 만든다 하실 때, 컴퓨터, 노트북, 스마트폰 등의 다양한 화면 해상도에 맞춰 

뷰포트를 설정하셔야 합니다. 뷰포트는 x, y 축으로 이루어진 공간이라 깊이 값을 다루는 z축은 포함하지 않습니다.

즉 정리하면 RS 단계는 다음과 같은 역할을 합니다.

  • VS 단계에서 받은 삼각형 뷰포트로 변환해 이를 픽셀 색상을 입히기 위해 준비하는 단계

PS 단계

Direct3D의 렌더링 파이프라인 중 픽셀 셰이더(PS) 단계는 RS 단계에서 뷰포트로 변환한 삼각형의 픽셀에 색상을 입히는 단계입니다. PS 단계는 삼각형의 모든 픽셀이 아닌 각각의 픽셀마다 색상을 입힙니다.

그리고 각각의 픽셀에 색상을 입힌 최종적인 색상을 픽셀 단편이라 합니다.


OM 단계

Direct3D의 마지막 출력 병합기(OM) 단계는 PS 단계에서 각각의 픽셀에 색상을 입혔다면, 이제 이 픽셀 단편들을 후면 버퍼에 기록합니다.

후면 버퍼는 다음 프레엠에 전면 버퍼로서 나타날 버퍼이기 때문에, 이 OM 단계에서 최종적인 픽셀의 색상을 결정합니다.


렌더링 파이프라인 정리

  1. IA : 정점과 색인을 읽어 이를 토대로 선분이나 삼각형 등의 기본도형 생성
  2. VS : IA 단계에서 받은 기본도형의 정점을 좌표계 상에 특정 위치에 설정 및 이를 바라보는 시야 공간도 설정, 그다음 절두체 테두리 밖에 있는 부분은 절단
  3. RS : VS 단계에서 최종적으로 도형을 그렸다면, 이 도형을 뷰포트 공간으로 변환해 담아 픽셀에 색상을 입힐 준비를 함
  4. PS : RS 단계에서 뷰포트 공간 내 도형이 있다면, 이 도형의 각각의 픽셀에 색상을 입힘
  5. OM : PS 단계에서 도형의 픽셀에 색상을 입혔다면, 이를 후면 버퍼에 기록

 


오늘은 지금까지 배운 Direct3D의 렌더링 파이프라인을 총 정리해 보는 시간을 가졌습니다.

지금까지 정말 모두 고생 많으셨습니다 ㅎㅎ

그럼 렌더링 파이프라인은 여기서 마치고 향후 렌더링 파이프라인의 추가적인 설명이 필요하다 하면 추가로 하고 

다음 시간에는 또 새로운 개념으로 찾아뵙겠습니다~~

긴 글 읽으시느라 고생 너무너무 많으셨습니다

댓글