파이프라인?

주된 기능은 가상카메라, 3차원 오브젝트, 광원 등을 생성하거나 렌더링 하는 것. 렌더링의 기본 도구이다. 렌더링 되는 오브젝트는 머티리얼, 광원, 텍스처, 음영 방정식에 영향을 받는다.

아키텍처

파이프라인의 구조. 파이프라인의 각 단계는 병렬로 구성되며, 이전 단계 결과에 영향을 받는다. 병렬이라서 이상적으로는 n개 구획의 파이프라인이 1개보다 n배 빠르다(파이프라인 사용 이유)

물론 실제로는 가장 느린 단계가 작업을 끝낼 때 까지 멈추는데, 이 곳을 병목이라고 한다. 그리고 기다리는 현상을 굶주림(Starving)이라고 함.

기본 단계들

  • 응용 단계
    • 어플리케이션. CPU에서 실행되는 소프트웨어.
    • 충돌 검출, 가속 알고리즘, 애니메이션, 물리 시뮬레이션
  • 기하처리 단계
    • 변환, 투영, 지오메트리 구조 처리.
    • 무엇을, 어디에, 어떻게 그릴 것인가?
    • 주로 GPU에서 처리.
  • 래스터화 단계
    • 3개의 정점으로 삼각형을 그리고, 그 내부의 모든 픽셀들을 픽셀 처리 단계로 넘긴다.
    • GPU 처리
  • 픽셀 처리 단계
    • 픽셀당 컬러 및 깊이 측정을 통한 가시성 판단.
    • GPU 처리

하나의 단계는 그 자체가 파이프라인이라 또 세부적으로 나눌 수 있다.

1. 응용 단계

다른 단계들과는 달리 일반적으로 CPU에서 소프트웨어로 실행된다. 개발자가 완전히 통제할수 있는 영역이라는 의미. 여러 프로세스를 병렬로 실행하여 성능을 향상시킬수 있다. 다음 단계로는 렌더링할 기하 모델을(렌더링 기본체) 전달한다.

다른 업무들

  • 충돌 검출
  • 입력 처리
  • 컬링

2. 기하 처리 단계

삼각형이나 정점 단위로 수행되는 연산 담당. 아래 연산 과정을 순서대로 진행한다.

1) 버텍스 셰이딩

버텍스 셰이더는 프로그래밍 가능한 정점 처리 장치를 의미한다. 전통적으로 정점과 법선 벡터에 빛을 적용하여 색을 계산하고 이를 삼각형에서 보간하여 사용하는데, 이러한 과정을 버텍스 셰이딩이라고 한다. 기술이 발달하여 각 정점과 관련된 데이터 설정 및 평가까지 담당 영역이 확장되었다.

좌표계 변환도 해당 단계에서 담당한다.

  • 모델 좌표계 변환
  • 전역 좌표계 변환
  • 뷰 변환

음영 처리도 일부는 기하처리 단계에서, 일부는 픽셀당 처리 단계에서 수행한다.

테셀레이션, 지오메트리 셰이딩, 스트림 출력과 같은 GPU 처리 단계도 하려면 할 수 있다. 이들 설명은 다음에 알아보자.

2) 투영

겹쳐있는 오브젝트들을 평면에 투영하기 위하여 단위 정육면체인 뷰 볼륨(canonical view volum)으로 자르는 과정이다. 보통 두 가지 방법을 사용한다. 다른 투영들도 있는데 그리 자주 쓰지는 않는다.

  • 직교 투영(Orthographic)
  • 원근 투영(Perspective)

3) 클리핑

뷰 볼륨 영역은 두 가지 방법으로 설정할 수 있다. 이 안에 들어가있는 요소만이 래스터화 단계로 전달된다.

  • (-1,-1,-1)~(1,1,1) 영역으로 볼륨 설정.
  • 0≤z≤1 영역으로 볼륨 설정.

뷰 볼륨에 걸쳐진 오브젝트는 뷰 볼륨과의 교차점에 새로운 정점을 생성하고 바깥 요소를 제거한다. 앞서 투영 변환을 수행했기에 단위 정육면체를 기준으로만 클리핑하면 된다.

4) 화면 매핑

사실 이전까지도 좌표는 3차원이다. 이를 화면에 맞게 좌표 지정하는 단계.

  • 윈도우 좌표 - 화면 좌표와 z 좌표. 래스터화 단계에 전달되는 좌표이다.
  • 화면 좌표 - 모서리 최대 최소값을 기준으로 이동되고 크기조절이 진행된 이후의 좌표.

픽셀을 지정할 때 위치값은 모든 API가 왼쪽에서 오른쪽으로 지정한다. 그러나 OpenGL이 데카르트 시스템을 따르기에 좌하단이 원점인것과 반대로 DX는 좌상단이 원점이다.

3. 래스터화 단계

렌더링 되는 기본체 안에 있는 모든 픽셀을 찾는 과정이며 스캔 변환이라고도 한다. 크게 삼각형 준비와 삼각형 순회의 두 단계로 나눌수 있다. 참고로 전용 하드웨어를 사용하여 연산한다!

1) 삼각형 준비

삼각형에 대한 미분, 에지 방정식, 기타 데이터를 계산한다.

2) 삼각형 순회

각 픽셀의 중점 또는 샘플(여러 방식이 있다)이 삼각형에 포함되는지 검사한다. 삼각형 내부의 속성 값은 3개 점을 보간된 데이터를 사용한다.

4. 픽셀 처리 단계

1) 픽셀 음영

보간된 음영 데이터를 입력으로 픽셀당 음영을 계산한다. 프로그래밍 가능한 GPU 코어에 의해 실행되므로 텍스쳐링이나 셰이더를 사용할 수 있다.

2) 병합

각 픽셀에 대한 정보가 컬러 버퍼에 저장되어있는데, 이를 픽셀 음영에서 구한 커럴와 병합하는 것이다. ROP(Raster Operations Pipeline)이라고도 불린다.

가시성 결정도 한다. z버퍼 알고리즘을 사용하는데, 반투명 오브젝트에 관한 문제가 있다.

다른 채널과 버퍼들도 본 과정에서 사용할 수 있다.

  • 알파 채널
  • 스텐실 버퍼
  • 오프스크린버퍼
  • 프레임 버퍼

출처

  • 리얼-타임 렌더링 4/e(에이콘출판사)