D3D

내 멋대로 3D 정리하기

햄시나 2024. 10. 7. 17:24

그래픽스 관점으로 볼때, 3차원의 게임은 

모델링 -> 리깅 -> 애니메이션 -> 렌더링 -> 후처리

의 파이프라인 과정을 거친다.

 

각 단계의 결과값은 다음 단계의 입력값으로 사용된다.

 

1. 모델링의 단계에서는 게임 환경을 구성하는 지형이라던가, 나무 등을 만든다.

게임같이 실시간으로 처리되는 물체들은 폴리곤 모델링 기법을 사용한다.

폴리곤들로 구성된 하나의 객체를 폴리곤메쉬라고 한다.

 

폴리곤메쉬 표면에 그림을 입히는데, 그 그림을 텍스쳐라고 한다. 텍스쳐가 입혀지는 과정은 런타임에서 발생한다.

 

 2. 리깅

움직이는 폴리곤메쉬 안에다가는 골격을 삽입한다.

골격과 함께 폴리곤이 따라 움직이도록 하는 작업을 리깅이라고 한다.

 

3. 애니메이션

리깅의 작업을 거친 폴리곤메쉬의 움직임이 연속적으로 그려진 것을 애니메이션이라고 한다.

움직임의 딱 한 부분을 프레임이라고 한다.

 

4. 렌더링

생성된 각각의 애니메이션이 최종 화면상에 그려지기까지의 모든 처리를 거치고 2D화면에 나타내는 것을 렌더링이라고 한다. 런타임 애니메이션과 렌더링은 게임 프로그램에 의해 실행된다.

 

그리고 게임 프로그램은 주로 그래픽 라이브러리를 통해 구현된다.(  DirectX의 Direct3D OpenGL 등)

그래픽 라이브러리에 존재하는 함수들은 GPU를 우리가 간접적으로 제어할 수 있도록 한다.

 

이제 폴리곤메쉬에 대해 더 본격적으로 알아보자.

(폴리곤의 정확한뜻은 다각형이지만, 그래픽스 적으로 삼각형 단위로 폴리곤메쉬가 이뤄져있기에 삼각형이라고 생각하면 된다.)

폴리곤메쉬를 컴퓨터 프로그램에선 정점의 집합으로 표현한다.

폴리곤이 한 개 있다면 꼭지점이 총 3개이므로 3개의 정점을 저장함으로 폴리곤을 표현한다.

 

그렇다면 사각형을 그릴 땐 점이 몇개 필요할까?

단순히 생각한다면 정점은 4개지만, 최소단위인 삼각형으로 사각형을 표현해내야 하기에 삼각형 두개가 필요하고, 그럼 총 6개의 정점이 정점버퍼에 저장되어야한다.

 

이게 딱봐도 저장공간이 낭비되는 느낌이 든다.

그래서 2가지의 버퍼를 같이 사용하는 방법이 있다.

1) 정점 버퍼와 인덱스 버퍼를 같이 이용하여 정점 버퍼 내에서 중복되는 정점의 저장을 줄이는 방법이다.

계속해서 사각형으로 예를 들자면, 사각형의 유일한 정점 4개를 버텍스 버퍼에 저장하고, 인덱스 버퍼가 중복되는 정점을 사용하여 각 정점의 인덱스만을 저장하는것이다.

 

2) 또다른 방법으로는 삼각형 스트립이란게 있다.

정점 버퍼에다가 삼각형이 그려지는 정점처리 순서를 이용해서 중복없이 정점을 저장하는거다.

근데 까다로워서 비추인데 꼭 써야할때가 있는ㄴ데;,..,예를 들자면 속이 투명하게 보이는 무언가를 그릴때 유용하다고 한다. 아몰랑...

 

하여간 이런식으로 저장된 폴리곤 메쉬를 구성하는 정점들을 GPU에 의해 화면에 렌더링된다.