본문 바로가기
IT 기술/Direct3D

Direct3D 렌더링 파이프라(VS 단계 2부) part2_21일차

by 썬's 2023. 1. 30.

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

저번 시간에는 렌더링 파이프라인 중 VS 단계의 세계 공간과 국소 공간을 배워봤는데요

이번 시간에는 VS 단계의 추가적인 설명을 이어 나가겠습니다.

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


용어정의

  • 소실점 : 선과 선이 만나는 지점
  • 국소 좌표계 : 객체 자신이 가지고 있는 고유의 좌표계

1.2 시야 공간(view space)

Direct3D에서 화면상에 무언가를 출력할 이미지가 있으면, 이 이미지는 모두 2차원 이미지입니다.

만약 여러분이 3차원 물체인 큐브를 생성하신다고 하시면, 이 큐브도 결국에는 2차원 이미지를 그려 조합해 만든 결과인

3차원처럼 보이게 만든 겁니다.

 

예를 들어 하단에 큐브를 만들려면 정사각형이 6개 필요합니다. 이 2d이미지인 정사각형 6개를 잘 조합해 3차원 이미지인 큐브를 만들 수 있습니다.

즉, 최종적으로 화면에 표시되는 장면은 2차원 이미지입니다. 그리고 이 이미지를 만들기 위해서는 장면에 가상의 카메라를 배치해야 합니다.

이미지 출력
이미지 출력

자 가상의 카메라 공간이란 모니터 상에 세계가 있습니다. 이 세계를 바라보는 관찰자의 시점, 

즉 세계에서 2차원 이미지를 생성해야 하는 영역입니다.

여러분들이 지금 책상에 앉아 rpg게임을 한다고 했을 때, 모니터를 바라보시면 캐릭터와 가상의 세계가 있습니다. 

이를 쳐다보는 게 관찰자인 저희, 즉 게임을 하는 주체고 모니터 상에 세계가 2차원 이미지로 이루어진 게임 속 세상입니다.

 

아무튼 이러한 가상의 카메라 공간에는 국소 좌표계(20일 차 참조)를 부여한다고 해보겠습니다.

이 좌표계를 바로 시야 공간(view space)라고 합니다. 또는 시점 공간, 카메라 공간이라 하는 데 편의상 뷰 공간이라 하겠습니다. 

 

카메라는 뷰 공간의 원점(0, 0, 0)을 기준에 놓입니다. 그리고 각 축마다 바라보는 방향이 있습니다.

  • x축 : 카메라의 오른쪽 방향
  • y축 : 카메라의 위쪽 방향
  • z축 : 카메라의 안 쪽 방향

이러한 카메라를 잘 조정해 뷰 공간에 있는 객체들을 위치에 맞춰 관찰자는 세계 공간에 있는 다양한 객체들을 다양한 관점에서 볼 수 있습니다.

 

예로 쉬운 예를 들면, TV 예능 프로그램을 보시면 출연진들이 있고 그 뒤에는 카메라로 찍고 있는 사람들이 많습니다. 한 사람이 카메라 하나로 돌아다니면 다양한 관점에서 찍는 다고 했을 때, 이 관점에 맞춰 출연진들의 모습이 달라집니다.

시야 공간
시야 공간

즉, 정리하면 Direct3D에서 시야 공간에 대한 내용은 다음과 같습니다.

  1. 가상의 카메라(view system)는 관찰자의 시점입니다.
  2. 가상의 카메라는 원점(0, 0, 0)에 두고 x축은 오른쪽, y축은 위쪽, z축은 앞쪽을 보여줍니다.
  3. 가상의 카메라로 비친 세계 공간 안에 국소 좌표계를 부여한 것을 시야 공간(view space)라고 합니다.

렌더링 파이프라인의 후반부 단계에서는 장면의 점정을 세계 공간이 아닌 시야 공간을 기준으로 카메라를 배치하는 것이 편할 때가 있습니다. 이는 향후 후반부 단계에서 설명하겠습니다.

 

여기서 간단히 짚고 넘어가면, 세계 공간의 좌표를 시야 공간의 좌표로 변경하는 것을 시야 변환(view transform)이라고 하고 해당 변환 행렬을 시야 행렬(view matrix)라고 합니다.

 

이는 나중에 배울 주제이기 때문에, 일단은 이해만 하시고 넘어가시면 됩니다.


1.2.1 절두체

Direct3D 렌더링 파이프라인의 VS 단계의 중요한 개념인 시야 공간을 알아봤습니다.

그리고 여기서 추가적으로 카메라를 서술하는 요소인 카메라가 바라보는 공간 영역이 있습니다.

이 영역은 모두 하나의 절두체로 정의합니다. 절두체란 끝이 잘린 사각뿔 형태를 띱니다.

 

이 카메라가 바라보는 시점인 절두체 안에 3차원 이미지를 생성한다고 했을 때, 이를 2차원 투영 창으로 투영해야 합니다.

3차원 이미지를 만들기 위해서는 이 투영(projection)이 반드시 평행선의 하나의 소실점으로 수렴하는 방식으로 이루어져야 합니다. 그래야 3차원 깊이가 증가해서 그 투영된 결과가 줄어드는 현상이 나타납니다.

절두체 형상
절두체 형상

자 말이 좀 어렵죠?? ㅎㅎ 이를 다시 쉽게 풀어 설명하겠습니다.

하단의 왼쪽 이미지를 보시면 투영 윈도우라는 게 있습니다. 이 투영 윈도우가 바로 여러분들이 보시는 모니터 화면입니다. 3d 이미지를 생성한다고 했을 때, 이 이미지는 가까운 평면부터 시작해서 먼 평면까지 거리에 따라 특정 위치에 놓이게 되고 이 놓인 위치에서 모니터로 투영됩니다. 그리고 거리가 가까울수록 3d 이미지는 모니터 상에서 점점 커집니다.

 

다시 오른쪽 사진으로 예를 들면, 눈 모양이 모니터를 바라보는 시점이고 눈 모양과 h 사이에 모니터가 있다고 하면, h에 3d 나무는 모니터 상에 크게 보이고 h보다 거리가 조금 먼 2h의 3d 나무는 모니터 상에서 h 나무보다 작게 표시됩니다.

 

즉 정리하면 투영거리가 가까울수록 모니터 상에 이미지가 크게 보이고 멀수록 이미지가 작게 보입니다.

이러한 절두체 공간 내 투영도를 잘 조절해 이미지 크기를 조절하시면 됩니다.

절투제
절두체


오늘은 Direct3D의 VS 단계의 중요 개념인 시야 공간과 절두체를 알아봤습니다.

이상으로 VS 단계는 마치겠습니다.

VS 단계에 IA 단계에서 조립한 도형을 받아 이러한 도형들을 이루는 정점들을 하나하나 출력하는 함수를 만든다고 보시면 됩니다. VS 단계의 중요 개념인 세계 공간과 국소 공간, 시야 공간, 절두체는 꼭 알아두셔야 합니다!!

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

댓글