2017-10-02 21 views
0

저는 DirectX 11을 배웠으며, 제가 읽은 책에서 Rasterizer가 Fragments를 출력한다고합니다. 이 Fragments는 Rasterizer (기하학적 기본 요소를 입력)의 출력물이며 사실 2D 위치 (2D 렌더링 대상 뷰)입니다.DirectX 11 조각이란 무엇입니까?

여기가 올바른 것으로 생각됩니다. 나를.

래스터 라이저는 기하학적 원형 (구체, 큐브 또는 상자, 도형 실린더, 피라미드, 삼각형 메쉬 또는 다각형 메쉬) (https://en.wikipedia.org/wiki/Geometric_primitive)을 사용합니다. 그런 다음이 프리미티브를 Render Target View (즉, 2D)에 매핑 된 픽셀 (또는 점)로 변환합니다. 이것이 바로 조각입니다. 각 Fragment에 대해 Pixel Shader를 실행하여 색상을 결정합니다.

그러나 나는 (내가 찾을 수있는) 단순한 설명이 없기 때문에 가정합니다.

그래서 내 질문은 ...

1 : 래스터 라이저는 무엇입니까? 입력은 무엇이며 출력은 무엇입니까?

2 : 래스터 라이저 출력과 관련하여 프래그먼트 란 무엇입니까?

3 조각이 float 4 값 (SV_Position) 인 이유는 무엇입니까? Render Target View를 2D 화면 공간이라면?

4 : Render Target Output (2D Screen Texture)과 어떤 관련이 있습니까?

5 : Razterizer와 Pixel Shader가 Render Target View의 모든 X, Y 위치에서 실행되지 않기 때문에 Render Target View를 지우는 이유는 무엇입니까?

감사합니다.

+0

3D 컴퓨터 그래픽에 대한 고전 텍스트 북을 살펴 보는 것이 좋습니다. 모든 * 3D 파이프 라인이 어떻게 작동하는지에 대한 기본적인 이해를 놓치고 있습니다. 그런 배경 지식이 있으면 Direct3D API가 고전 3D 파이프 라인에 정확히 어떻게 맵핑되는지를 배울 수 있으며 하드웨어 가속 방법을 훨씬 더 강력하게 이해할 수 있습니다. 필자는 소프트웨어 질감 삼각형 스캔 루틴을 더 이상 쓰지 않으며 결코 그다지 잘하지 못합니다. 그러나 심지어 진절머리 나는 소프트웨어 구현은 여기에서 일어나고있는 일들을 많이 가르쳐 줄 것입니다. –

+1

고전 교과서는 [폴리와 댐 댐] (https://www.amazon.com/Computer-Graphics-Principles-Practice-2nd/dp/0201848406)입니다. [Hearn and Baker] (https://www.amazon.com/Computer-Graphics-C-Version-2nd/dp/0135309247)와 마찬가지로 [와트] (https://www.amazon.com)도 좋습니다./Computer-Graphics-3rd-Alan-Watt/dp/0201398559). –

+0

@ChuckWalbourn 감사합니다! 이 오래된 시간 서적을 권하거나 업그레이드 된 버전을 얻고 싶습니까? 나는 generic directx 책에없는 답변을 찾고있다. 불행히도, 나는 "AHA"라는 순간이 있기 전에 무언가가 작동하는 이유를 알아야합니다. – Mike5050

답변

1

나는 대신 다이렉트 XI하지만 OpenGL을 사용하지 않지만 용어가 같지 않더라도 비슷해야합니다.

(scene geometry)  -> [Vertex shader]    -> (per vertex data) 
(per vertex data) -> [Geometry&Teseletaion shader] -> (per primitive data) 
(per primitive data) -> [rasterizer]     -> (per fragment data) 
(per fragment data) -> [Fragment shader]    -> (fragment) 
(fragment)   -> [depth/stencil/alpha/blend...]-> (pixels) 

그래서 버텍스 쉐이더 당신이 시스템 등 필요한 매개 변수 기하학과 당신이 계산할 수 teselation에서

의 사전 계산을 좌표로 변환 좋아 정점 작업 당을 수행 할 수 있습니다 : 나의 이해는 이것이다 기하학의 법선, 프리미티브의 방출/변환 등등.

래스터 라이저 그러면 기하학 (원시)을 조각으로 변환합니다. 이것은 보간에 의해 수행됩니다. 기본적으로 보이는 프리미티브의 부분을 조각으로 나눕니다. convex polygon rasterizer을 참조하십시오.

조각들은 픽셀도 아니고 수퍼 픽셀도 아니지만 픽셀에 가깝습니다. 차이점은 상황 및 파이프 라인 구성 (픽셀은 가시적 출력 임)에 따라 출력 될 수도 있고 출력되지 않을 수도 있다는 것입니다. 가능한 수퍼 픽셀로 생각할 수 있습니다.

조각 쉐이더 조각마다 데이터를 최종 조각으로 변환합니다. 여기서 조각/픽셀 라이팅, 음영, 모든 텍스처 작업, 색상 계산 등을 계산합니다.출력은 기본적으로 픽셀 + 일부 추가 정보 인 조각이기도하므로 위치와 색상은 없지만 다른 속성 (예 : 더 많은 색상, 깊이, 알파, 스텐실 등)을 가질 수 있습니다.

이것은 깊이 테스트와 블렌딩과 같은 다른 가능한 테스트 또는 기능을 제공하는 최종 결합기로 이동합니다. 그리고 출력은 프레임 버퍼 픽셀로 들어갑니다.

대답 # 1, # 2, # 4라고 생각합니다.

이제 # 3 자주 적절한 조명을위한 조각 또는 무엇 적 계산의 3D 위치를 필요로 조각 데이터 당과 homogenuous coordinates로 (I 인해 지식의 나의 부족에 대한 다이렉트 여기에 잘못 될 수 있음)입니다 우리는 4D (x, y, z, w) 벡터가 필요합니다. 조각 자체는 2D 좌표이지만 3D 위치는 꼭지점 셰이더에서 전달 된 지오메트리의 보간 값입니다. 따라서 화면 위치는 포함 할 수 없지만 세계 좌표는 대신 (또는 다른 좌표)를 포함 할 수 있습니다.

# 5 예 장면이 화면 전체를 커버하지 않을 수 있으며 또는 깊이 같은 버퍼를 미리 설정해야합니다, 스텐실, 렌더링이 정상적으로 작동과 이전 프레임의 결과에 의해 무효화되지 알파 있도록. 따라서 프레임 시작시 보통 프레임 버퍼를 지워야합니다. 일부 기술은 프레임 당 여러 개의 클리어링을 필요로합니다 (글로 효과와 같은) 다른 프레임마다 한 번 클리어합니다 ...

+0

Thank you! 그것은 내 끝에서 많이 지워진다. – Mike5050