본문 바로가기

D3D10 pipeline

D3D10 Pipeline : Output-Merger Stage 아웃풋 머저(OM, output-merger) 스테이지는 파이프라인 상태, 픽셀 쉐이더에 의해 생성된 픽셀 데이터, 렌더 타겟의 요소, 그리고 깊이 / 스텐실 버퍼의 조합을 사용해서 최종적으로 렌더링될 픽셀의 컬러값을 생성한다. (OpenGL의 프래그먼트 연산 과정과 비슷하다) OM 스테이지는 어느 픽셀이 보여져야 할지 결정하고, 최종적인 픽셀 색상을 섞는(blending) 마지막 단계이다. 여기서, D3D9와 D3D10의 차이점은 다음과 같다 : D3D9는 어느 픽셀이 렌더 타겟에 출력되어야 할지 결정하기 위해 알파 테스트를 구현했지만, D3D10은 알파 테스트 구현을 제공하지 않는다. 이것은 픽셀 쉐이더나, 깊이 / 스텐실 테스트 함수를 사용하여 같은 효과를 낼 수 있기 때문이다. 깊이 / 스텐실 테.. 더보기
D3D10 Pipeline : Pixel Shader Stage 픽셀 쉐이더 스테이지는 개별 픽셀 조명, 포스트 프로세싱(post-processing)과 같은 풍부한 쉐이딩 기법을 가능하게 해준다. 픽셀 쉐이더는 상수 변수, 텍스처 데이터, 보정된 버텍스 값, 그리고 픽셀 당 생성되는 다른 데이터들을 조합하는 프로그램이다. 래스터라이저는 프리미티브에 의해 덮여지는 각 픽셀에 대해 픽셀 쉐이더를 호출하지만, 픽셀 쉐이더가 수행되지 않도록 널로 설정할 수도 있다. 텍스처를 멀티샘플링할 때, 각각의 텍스처에 대해 깊이 / 스텐실 테스트를 하는 것에 비해 픽셀 쉐이더는 픽셀에 대해 한번만 호출된다. 깊이 / 스텐실 테스트를 거친 샘플들은 픽셀 쉐이더 출력 컬러값으로 갱신된다. Inputs 파이프라인이 지오메트리 쉐이더(geometry shader)와 무관하도록 설정되었다면,.. 더보기
D3D10 Pipeline : Rasterization Stage 래스터라이저(rasterizer) 스테이지는 형상이나 프리미티브를 구성하는 벡터 정보를 픽셀로 구성되는 래스터 이미지로 변환한다. 래스터라이즈화가 이루어지는 동안, 각각의 프리미티브들은, 각 프리미티브들에 걸쳐 있는 버텍스 별 데이터를 보정하고 픽셀로 변환된다. 래스터라이즈화는 뷰 절두체에 맞게 버텍스를 클리핑하거나, 원근 처리를 위해 z로 나눠주거나, 프리미티브들을 2D 뷰포트에 매핑할지, 픽셀 쉐이더를 어떻게 호출할지 따위를 모두 포함한다. 픽셀 쉐이더를 사용하는 것이 선택 사항인 반면, 래스터라이저 스테이지는 언제나 클리핑, 원근 처리, 점들을 동차 좌표계로의 변환, 버텍스의 뷰포트 매핑을 수행한다. 파이프라인에게 픽셀 쉐이더가 없다고 알려줘서 래스터라이즈화를 하지 않을 수도 있고, D3D10_DE.. 더보기
D3D10 Pipeline : Stream-Output Stage 스트림 아웃풋(SO, stream-output) 스테이지의 목적은 지오메트리 쉐이더(geometry shader) 스테이지로부터의 버텍스 데이터를 메모리 상의 하나, 또는 이 이상의 버퍼에 연속적으로 출력하기 위한 것이다. SO 스테이지는 파이프라인에서 지오메트리 쉐이더 스테이지 후, 그리고 래스터라이저 스테이지 바로 전에 위치한다. 메모리로 스트림 출력되는 데이터는 연속적인 렌더링 패스에서 파이프라인으로 다시 읽혀지거나 스테이지 자원으로 복사될 수도 있다. 스트림 출력되는 데이터는 총량은 다양하다. ID3D10Device::DrawAuto()와 같은 API는 쓰여진 데이터의 총량에 대해 질의를 하지않고도 이 데이터를 다룰 수 있도록 디자인되었다. 삼각형이나 선 스트립이 IA 스테이지에 바인딩될 때, 각.. 더보기
D3D10 Pipeline : Geometry Shader Stage 지오메트리 쉐이더(geometry shader) 스테이지는 버텍스를 입력으로 받고, 출력으로 버텍스를 생성할 수 있는, 프로그램이 정의한 쉐이더 코드를 실행한다. 하나의 버텍스에 대해서만 동작하는 버텍스 쉐이더와 달리, 지오메트리 쉐이더는 하나의 완전한 프리미티브를 구성하는 모든 버텍스를 입력으로 받는다. 또, 지오메트리 쉐이더는 인접한 프리미티브들의 버텍스들도 입력으로 가져올 수 있다. 지오메트리 쉐이더는 IA 스테이지에서 생성된 값(시멘틱) SV_PrimitiveID를 사용한다. 이것은, 각 프리미티브 데이터가 그냥 보내질 것인지, 아니면 계산될 것인지 결정할 수 있다. 지오메트리 쉐이더는, 선택된 단일한 위상을 형성하는 여러 개의 버텍스을 출력하는 능력을 가진다. 지오메트리 쉐이더의 호출(invoc.. 더보기
D3D10 Pipeline : Vertex Shader Stage D3D10은 3개의 프로그래밍 가능한 쉐이더 스테이지를 가진다. 버텍스 쉐이더(vertex shader) 스테이지, 지오메트리 쉐이더(geometry shader) 스테이지, 픽셀 쉐이더(pixel shader) 스테이지가 그것이다. 각각의 쉐이더 스테이지는 고유한 기능을 수행하며, 쉐이더 모델 4.0을 기반으로 한다. 버텍스 쉐이더 스테이지는 IA(Input-Assembler)로부터 넘어온 버텍스를 처리한다. 즉, 각 버텍스에 대해서 변환, 스키닝(skinning), 모핑(morphing), 조명(lighting)과 같은 연산을 수행한다. 버텍스 쉐이더는 언제나 하나의 버텍스에 대해 연산을 하며, 하나의 버텍스를 출력값으로 가진다. 버텍스 쉐이더는 반드시 파이프라인이 실행되기 위해 활성화되어 있어야 하.. 더보기