2012-05-21 5 views
1

새로운 3D API (D3D11과 같은)에서 고정 기능 혼합 모드를 사용하는 이유를 이해하려고 노력 중입니다. D3D10 고정 함수 Alpha Clipping은 셰이더 사용을 위해 제거되었습니다. 그 이유는 거의 모든 상황에 대한 훨씬 더 강력한 접근 방식 때문입니다.D3D11에서 고정 함수 혼합 연산을 사용하는 이유는 무엇입니까?

그럼 왜 우리는 블렌드 연산 (현재 렌더링중인 RenderTarget의 텍스처 샘플)을 계산하거나 소유 할 수 없습니까? 비디오 카드 파이프 라인에 하드웨어 디자인 문제가 있습니까?

굴절 개체 셰이더를 굴절 개체 겹치기의 두 렌더링 대상간에 앞뒤로 바꿀 필요가 없기 때문에 굴절 셰이더를 빠르게 실행하는 등의 작업을 수행 할 수 있기 때문에 유용합니다. OS 나 게임 UI를위한 굴절 윈도우 시스템과 같은.

내가 D3D12에서 이것을보고 싶어하는 토론 포럼이 아니기 때문에 어디에서 이런 생각을 제안 할 수 있을까요? 아니면 D3D11에서 이미 가능합니까?

+0

"이 같은 아이디어를 제안하는 가장 좋은 곳은 어디일까요?"* 모든 사람이 이것을 원합니다. 누구나 물건을 많이 원합니다. 하드웨어 제조사에게 이러한 종류의 것을 제안 할 필요는 없습니다. 그들은 사람들이 그들을 원한다는 것을 안다. 원하는 것은 그들이 일어날 것을 의미하지는 않습니다. 그것들을 얻는 것이 더 빠르다는 것을 의미하지도 않습니다. –

+0

"사람들은 사람들이 그들을 원한다는 것을 안다. 또한 그들을 제안하는 것이 더 빠르다는 것을 의미하지는 않는다."- 그리고 그것은 어때? 임의로 지원되지 않는 추측 때문에? 아니면 나 같은 ppl (심지어이 문제에 관해서 속도를내어주지 않는다고해도)이 묻고 말하면서 실제로 다른 사람들이 비슷한 생각이나 필요로 왔음을 '다른 사람들에게'알려줍니다. 죄송합니다. 당신의 커다란 자아에서 신경을 썼습니다. 그러나 의사 소통은 유효한 아이디어를 실현하는 첫 단계입니다. – zezba9000

+0

하드웨어 제조업체는 "포럼에있는 사람들"의 말을 듣지 않습니다. 존 카락 (John Carmack)의 말을 듣는다. 그들은 Tim Sweeney의 말을 듣습니다. 그들은 블리자드, EA, Activision 등에서 사람들의 이야기를 듣습니다. 그들은 파란 옷에서 임의의 목소리를 듣지 않습니다. 왜? 실제로이 물건을 전문적으로하는 사람들은 이미 유효한 제안을하고 있기 때문입니다. 그리고 그 증거를 원한다면 이미지에 대한 "임의적 인"읽기/쓰기 액세스에서 이미 *이 기능을 (* 중요하지는 않지만) * 보유하고 있다는 사실이 있습니다. 하드웨어 제조업체들은이 기능을 추가했습니다. 왜냐하면 큰 사람들은 포럼에있는 사람들 때문이 아니기 때문입니다. –

답변

3

왜 우리가 계산하거나 소유 할 수없는 혼합 작업

누가 당신이 수 없다고? shader_image_load_store (및 D3D11 상당)를 사용하면 이미지로 원하는 모든 것을 할 수 있습니다. 규칙을 지키면 제공됩니다. 마지막 부분은 일반적으로 사람을 위로 이동시키는 것입니다. 가장 최근의 fragment shader 호출이 잘못된 값을 읽지 않도록 shader에서 전체 읽기/수정/쓰기를 수행하는 것이 가장 일반적인 경우에 거의 불가능합니다. 렌더링 된 각 객체가 자신과 겹치지 않도록하고 렌더링 된 객체 사이에 메모리 장벽을 삽입해야합니다 (다른 렌더링 된 객체와 겹칠 수 있음). 또는 연결된 목록 방식을 사용합니다.

요점은 다음과 같습니다. 이러한 메커니즘을 사용하면 사람들이 쉐이더에서 블렌딩을 구현할뿐만 아니라 링크 된 목록을 통해 순서와 무관 한 투명성을 구현했습니다. 당신이 지금 원하는 것을하는 것을 멈추게하는 것은 아무것도 없습니다.

글쎄, 물론 성능을 제외한 아무것도. 고정 함수 블렌더는 조각 쉐이더 연산을 사용하여 병렬에서 실행할 수 있기 때문에 항상 더 빠릅니다. 블렌딩 유닛은 프래그먼트 쉐이더와는 별도의 하드웨어이므로 블렌드 작업을 수행하면서 동시에 프래그먼트 쉐이더 작업을 수행 할 수 있습니다.

블렌드 하드웨어의 읽기/수정/쓰기 메커니즘은 블렌딩을 위해 특별히 설계된 반면 image_load_store는보다 일반적인 메커니즘입니다. 또한 일반 및 장기간의 하드웨어 진화에서 특정 사항을 능가 할 수 있지만, 즉각적이고 가까운 장래에 고정 기능 블렌딩이 매번 성능상으로 image_load_store 블렌딩을 능가 할 것으로 기대할 수 있습니다.

일 때만 사용해야합니다. 그리고 심지어, 결정한다면 당신은 정말로, 정말 필요합니다.

+0

팁 "shader_image_load_store"에 대한 Tnx입니다. 기억해야 할 것이 있습니다. – zezba9000

1

비디오 카드 파이프 라인에 하드웨어 디자인 문제가 있습니까?

예, 실제로 적용됩니다. 프래그먼트 쉐이더에서 블렌딩을 할 수 있다면 피드백 루프가 생길 수 있습니다. 이는 실제로 상황을 복잡하게 만듭니다. 혼합은 성능 및 병렬화의 이유로 개별 배선 단계에서 수행됩니다.

+0

예 글쓰기를 마친 후에 굴절을 할 수 없다는 것을 알았습니다. 예를 들어 마지막 프레임을 샘플링 할 버퍼링을해야했습니다. – zezba9000