본문 바로가기

도서관

3D 그래픽 출력 과정

최근 게임 중 3D 그래픽을 이용하지 않는 게임은 거의 없습니다. 모바일 장치들에서 구동되는 게임 조차도 제법 높은 사양의 그래픽을 보여 줍니다.

자, 이런 3D 그래픽은 어떻게 처리되고, 얼마나 많은 연산을 필요로 하기에 별도의 연산장치인 GPU를 필요로 하는 것일까요?
복잡한 3D 그래픽 처리 과정을 간단하게 나마 알아보도록 하겠습니다.


3D 그래픽 처리는 대략 아래 그림과 같은 처리과정을 거치게 됩니다.


        [ 그림 1 ] 3D 그래픽 처리 과정

컴퓨터의 제일 중요한 부품은 CPU이며, 많은 처리를 CPU를 거치게 되어 있습니다. 이는 GPU를 사용하는 3D 그래픽도 예외일 수는 없어서,
CPU에서 초기 과정에 관여합니다.

1. 3D 모델 구축
  - HDD 등에 기록되어 있는 정보를 읽어오고, 계산을 통해서 3D 모델을 구성하는 과정입니다.
    이 과정에서 개략적인 모델의 모습이 결정됩니다.

2. 가상공간에 배치
   - 구축된 모델을 가상공간의 특정 좌표에 위치시키는 작업입니다.

CPU는 여기까지 작업을 담당하며, 이제 GPU로 작업을 넘겨줍니다.

버텍스 파이프라인은 정점과 관련된 작업들을 진행합니다. 정점은 각 꼭지점을 의미합니다.

3. 버텍스 쉐이더 - 정점단위 음영처리
    - 각 정점을 기준으로 음영을 계산하고 처리해 줍니다. 앞에서 개략적으로 구축된 모델에 음영을 계산합니다.

4.지오메트리 쉐이더 - 정점의 추가/제거
    - 모델의 모습을 바꾸기 위해서 정점을 늘리고 줄이는 작업을 합니다.
       이 작업을 통해서 적은 모델로도 다양한 모델을 생성할 수 있습니다.
    - 정점이 변경된 경우에는 다시 3단계로 돌아가 음영을 다시 계산합니다.

5. 카메라뷰로 전개
    - 실제 보여질 공간에 생성된 오브젝트들을 배치합니다.

6. 클리핑과 암부처리
    - 현재 카메라에서 보이지 않는 부분, 어두운 부분에 대해서 연산에서 제외하거나 디테일을 낮추는 작업을 진행합니다.
      이 작업으로, GPU의 연산 효율을 증가시킬 수 있습니다.

7. 폴리곤 셋업과 레스터라이즈 처리
    - 모델을 실제 화면에 표시하기 위해서, 각각의 폴리곤을 계산하고,
       다시 이 삼각형들을 화면의 각 픽셀과 대응시키기 위한 연산을 진행합니다.


이제 각 픽셀 단위로 작업을 진행하게 되며, 이 부분은 픽셀 파이프 라인에서 처리합니다.

8. 픽셀쉐이더 - 픽셀단위 음영처리
    - 각 픽셀을 기준으로 앞에서 모델에 적용했던 음영을 계산해 줍니다.

9. 픽셀쉐이터 - 텍스쳐 적용
    - 모델에 적용할 텍스쳐를 표면에 맞춰서 적용해 줍니다.
       이때 픽셀 음영을 다시 계산해야할 경우 8단계로 돌아가 다시 계산합니다.

10. 후처리, 렌더링
    - 투명도, 알파, 포그 등의 추가적인 효과를 적용하고, 화면에 보낼 픽셀들로 구성된 이미지를 생성합니다.

여기까지가 GPU 내부에서 연산으로 처리되는 부분입니다.

11. 출력
    - 생성된 이미지를 화면으로 보냅니다.



진행과정을 보다보면 픽셀쉐이더와 버텍스쉐이더가 나옵니다. 이 두가지는 그래픽 카드의 스팩 표기에 중요한 부분으로
웬만한 H/W정보에는 아래와 같이 각각의 갯수와 버전을 표시합니다. 현재(2011/10)는 DX11 기반으로 PS 5.0, VS 5.0을 지원하는
하드웨어까지 출시되고 있습니다.

        [ 그림 2 ] 그래픽 카드 H/W정보