본문 바로가기
IT 기술/Direct3D

Direct3D 렌더링 파이프라인(RS 단계) part4_23일차

by 썬's 2023. 1. 31.

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

저번 시간에는 잠시 쉬어가는 느낌으로 테셀레이션 단계를 알아봤습니다.

테셀레이션 단계는 렌더링 파이프라인의 필수 단계는 아니라 굳이 사용하실 필요 없는 단계입니다.

이번 시간에는 렌더링 파이프라인의 3단계인 레지스터화(RS) 단계를 설명하겠습니다.

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

※본 내용에 들어가기 앞서 용어정의부터 하겠습니다※


용어정의

  • 기하구조 : 도형의 형태라고 보시면 됩니다.
  • 하드웨어 : 눈에 보이고 만질 수 있는 기계 장치로 사람으로 따지면 신체를 말한다.
  • 소프트웨어 : 하드웨어를 움직이게 할 수 있는 프로그램으로, 사람으로 따지면 신체기관을 말한다.
  • 브라우저 : 인터에서 서비스와 자료를 지원하는 프로그램 ex) 인터넷 익스플로러, 크롬 등

1. RS 단계 들어가기 전(정규좌표)

Direct3D에서 RS 단계에 들어가기 전에 21일 차에 배운 절두체를 잠시만 보고 넘어가겠습니다.

절두체를 다시 간단히 설명하면, 사각뿔로 이루어진 내부 공간인 시야 공간을 말합니다.

이 공간 안에 기하구조를 표현합니다.

절두체
절두체

이 절두체 내 시야 공간의 기준을 벗어난 기하구조는 폐기해야 합니다.

이러한 폐기는 렌더링 파이프라인의 VS 단계 마지막에서 수행합니다.

즉, 절두체의 경계면과 교차하는 기하 구조는 내부에 것만 살리고 바깥에 걸친 부분은 잘라내야 합니다.

이를 절단(clipping) 연산이라고 부릅니다.

 

하단 이미지를 보시면 사각 뿔의 하단 꼭짓점이 카메라이고 이 카메라가 비추는 부분이 시야 공간, 그리고 시야 공간을 이루는 사각뿔이 절두체입니다. 시야 공간 내 기하구조를 그린다고 했을 때, 만약 가까운 평면과 먼 평면 사이의 이미지가 나오는 구간을 벗어난 부분을 잘려 오른쪽 그림처럼 기하구조가 나타나게 됩니다.

 

여기서 중요한 게 시야 절두체는 가까운 평면과 먼 평면 사이의 경계를 말합니다.

절단(clipping)
절단(clipping)

자 VS 단계 마지막에서 절단 연산을 수행하셨다면,

이를 이제 정규좌표(NDC)로 변환해야 합니다. NDC 좌표계란 간단히 말하면, 해상도 상의 좌표를 말합니다.

NDC는 2차원 좌표로 1을 기준으로 합니다. 화면 정중앙은 좌표계의 원점입니다.

 

즉 NDC는 화면 해상도가 바뀔 때마다 그에 맞게 좌표를 설정할 수 있는 도구라고 생각하시면 됩니다.

NDC 좌표계
NDC 좌표계


2. RS 단계

Direct3D에서 레스터화(RS) 단계의 주요 기능은 절두체에 투영된 3차원 삼각형의 픽셀 색상을 계산합니다.

VS 단계 마지막에서 절두체 내 절단을 마치고 이를 NDC 좌표로 변환한 후, 정점들이 NDC 공간으로 들어왔다면 2차원 이미지를 형성할 2차원 x, y 좌표성분을 후면 버퍼의 한 직사각형 영역으로 변환하셔야 합니다.

 

이 직사각형 영역을 뷰포트(view port)라 합니다.

뷰포트란 현재 보고있는 컴퓨터 화면 영역을 말합니다. 보통 모니터 상의 브라우저 창 부분을 말합니다.

 

하단 이미지를 보시면 컴퓨터 화면 모니터가 있으면, 그 안에 브라우저를 실행시키고 브라우저 창 부분을 뷰포트라고 합니다. 이 뷰포트는 반드시 화면 해상도에 맞출 필요는 없습니다.

컴퓨터 외에도 노트북이나 태블릿 또는 더 작은 스마트폰에도 브라우저를 실행시킬 수 있기 때문에, 이에 맞춰 뷰포트를 설정해야 합니다.

뷰포트
뷰포트

이 뷰포트 변환을 마치고 나면 x, y 성분은 픽셀 단위의 값이 됩니다.  뷰포트는 후면 버퍼의 일부 영역인 직사각형 영역이라 z축은 다루지 않습니다.

 


2.1.1 후면 삼각형 선별

Direct3D에서 모든 객체의 메시는 폴리곤, 즉 삼각형으로 이루어져 있다고 했습니다. 다시 간단히 짚고 넘어가자면,

이 삼각형이 그려지는 방향이 있습니다. 삼각형은 정점 세 개로 이루어져 있고 이 정점으로 삼각형을 그릴 때, 항상 시계방향으로 삼각형을 그립니다.

 

하지만 만약 반대쪽 면인 관찰자(카메라)가 뒤쪽 면을 보고 있는 삼각형은 반시계방향으로 그려야 합니다.

관찰자를 기준으로 시계방향 순서의 삼각형을 전면 삼각형이라 하고 반시계방향 순서의 삼각형을 후면 삼각형이라 합니다.

이러한 삼각형을 그리는 방향이 다른 이유는 3차원 장면의 대부분의 물체가 닫힌 고형체를 띄기 때문입니다.

자 이번에는 큐브로 예를 들어보겠습니다.

 

하단에 왼쪽 큐브를 보시면 큐브 안이 보이도록 제가 반투명하게 그린겁니다.

하지만 실제로 큐브를 화면상에 출력할 때는 오른쪽 큐브처럼 안쪽 선이 보이지 않게 그려집니다.

이런 식으로 고형의 3차원 물체의 안쪽 면이 보이지 않는 것을 닫힌 고형체라고 합니다.

 

Direct3D 상에 모든 3차원 물체는 삼각형으로 이루어져 있습니다.

큐브 역시 마찬가지로 삼각형으로 이루어져 있습니다. 다시 하단의 두 번째 그림으로 보시면,

좌측 큐브의 안쪽 빨간색 동그라미가 쳐져 있는 사각형은 모두 후면 삼각형으로 이루어져 있기 때문에 반시계방향으로 그립니다.

우측 큐브의 바깥쪽 파란색 동그라미가 쳐져 있는 사각형은 모두 전면 삼각형으로 이루어져 있어 시계방향으로 그립니다.

즉 전면 삼각형과 후면 삼각형을 정의하면 다음과 같습니다.

  • 전면 삼각형 : Direct3D 상에 실제로 출력되고 보이는 삼각형으로 이루어진 메시로 시계방향을 따름
  • 후면 삼각형: Direct3D 상에 실제로 출력하면 관찰자가 볼 수 없는 삼각형으로 이루어진 메시로 반시계방향을 따름

오늘은 Direct3D의 렌더링 파이프라인의 RS 단계를 알아봤습니다.

RS단계는 이전 단계인 VS 단계에서 받은 3차원 상의 삼각형을 뷰토프로 변환하고 이를 픽셀 색상을 입히기 위해 준비하는 과정입니다.

그럼 다음 시간에는 PS 단계를 알아보겠습니다.

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

댓글