본문 바로가기

Library/Computer Graphics

Direct3D 9.0 Rendering Pipeline

Direct3D 9.0의 렌더링 파이프라인은 다음과 같다. 이 내용은 http://msdn.microsoft.com/en-us/library/ee417844(VS.85).aspx을 참조한 것이다. 매 업데이트마다 혁명적으로 바뀌는 Direct3D이고, Direct3D 10 이후의 파이프라인은 이와 또 다르지만, Direct3D 9.0은 고전적인 Direct3D로서 가치가 있다. Direct3D 9.0 이전의 렌더링 파이프라인은 제한적으로 쉐이더를 사용할 수 있는, 고정 기능 파이프라인(fixed rendering pipeline)이었고, 하드웨어 T&L(Transform & Lighting)과 같은 하드웨어가 처리해 줄 수 있는 기능이 중요했다. 하지만 Direc3D 9.0의 파이프라인은 'All or Nothing'으로 표현되는데, 이는 고정 기능 파이프라인이긴 하지만, 과거의 중요한 기능들이 전부 쉐이더를 통해 동작하기 때문이다.




Vertex Data : 버텍스 메모리 버퍼에 있는, 아직 변환이 이루어지지 않은 모델 좌표계의 버텍스 정보.
Primitive Data : 인덱스 버퍼, 버텍스 정보 내에서 참조되는 점, 선, 삼각형, 다각형을 포함하는 기하 프리미티브들.

Tessellatioin : 테셀레이터 유닛은 오름차순 프리미티브, 디스플레이스먼트 맵(displacement maps), 메시를 변환하고 버텍스 위치 정보를 패치하며, 이 정보를 버텍스 버퍼에 저장한다.

Vertex Processing : 버텍스 버퍼 내에 저장된 버텍스들에 대해 Direct3D 변환이 적용된다.
Geometry Processing : 변환된 버텍스들에 대해 클리핑(clipping), 은면 제거(backface culling), 속성 평가(attribute evaluation), 래스터화가 적용된다.

Textured Surface : Direct3D 표면을 위한 텍스처 좌표계가 IDirect3DTexture9 인터페이스를 통해 Direct3D에 적용된다.

Texture Sampler : 입력되는 텍스처 값에 대해 텍스처의 디테일 필터링이 적용된다.
Pixel Processing : 픽셀 쉐이더 연산은 입력되는 출력되는 픽셀 색상 값을 결정하기 위해 버텍스와 텍스처 데이터를 수정하기 위해 기하 정보를 사용한다. (normal vector 따위를 사용할 수 있다)

Pixel Rendering : 렌더링 과정의 마지막 단계는 투명(alpha), 깊이, 또는 스텐실 테스트와 관련된 픽셀의 색상 값을 수정하거나, 알파 블렌딩, 안개와 같은 것을 적용한다. 결과적으로, 모든 픽셀 값은 디스플레이에 출력된다.