2012-11-20 7 views
5

나는 하루 종일 여기에 있었고 그 일을 포기하기 시작했습니다. 계산 쉐이더에 대한 많은 정보를 찾을 수 없습니다. 최고의 소스는 "Direct3D 11의 실용적인 렌더링 및 계산"이었습니다. 불행히도 너무 많은 도움이되지 않았습니다. 그것은 내가 몇몇 이론을 이해하는 것을 도왔지만, 나는 여전히 어떤 것을 구현하는 방법을 모른다.쉐이더를 계산하면 파이프 라인에 어디에 적합합니까?

저는이 책에서 생성 된 입자 시스템과 비슷한 것을 연구 중입니다. 내 입자 시스템을 제외하고는 기본적으로 입자가 3D 그리드에 표시됩니다 (중력/힘/등은 없습니다). 이것은 교육적인 목적을위한 것입니다. 만약 내가이 일을하면 나는 나머지를 생각해 낼 수있을 것입니다.

필자가 이해할 수없는 것은 컴퓨팅 쉐이더가 파이프 라인에 끼워 넣는 방법입니다. 나는 내가해야 할 일을 이해하고 있다고 생각하지만, 나는 그것이 어떻게 작동하도록되어 있는지 알지 못한다.

필자는 어떻게 든 계산 쉐이더에 모든 입자 위치로 채워진 버퍼를 뿌려야합니다. (말, 1024x1024x1 버퍼). 그런 다음이 계산 쉐이더를 모든 버텍스 쉐이더의 정점으로 출력해야합니다. 나머지 파이프 라인은 표준입니다 (버텍스 쉐이더는 모든 변환을 수행하고, 기하학적 셰이더는 정점을 쿼드로 확장하고, 픽셀 셰이더가 렌더링합니다).

나는 이것이 옳은지조차 모르지만 그것은 올바르게 들린다. 그리고 그것이 사실이라 할지라도 나는 이것을 어떻게 할 것인지 전혀 모른다. 컴퓨팅 쉐이더의 출력을 버텍스 쉐이더에 어떻게 공급합니까? 처음에는 계산 쉐이더를 어떻게 시드할까요? 계산 쉐이더가 입자 버퍼를 버리지 않도록하려면 어떻게해야합니까? (그렇지 않으면, 매번 입자를 공급해야하는데, CPU의 모든 작업을 수행해야하므로 입자 시스템이 (최종적으로는 입자가 움직이는) 등의 목적을 이길 것입니다.

많은 미지의 것들이 있습니다. 그리고 나는이 모든 셰이더를 쓰기 시작하기 위해 그것을 모두 알고있을 것으로 예상됩니다. 나는 어떤 디딤돌도 발견 할 수 없다.

+0

다른 파이프 라인과 직접적으로 맞지는 않습니다. 독립적입니다. 인터페이스는 분명한 이유로 많은 것을 사용합니다. 결과와 입력은 파이프 라인과 동일한 종류의 그래픽 카드 객체이므로 pipleline과 함께 사용하면 매우 유용합니다. – jcoder

+0

저는 컴퓨터 쉐이더를 시작했는데 그래픽과 상관 없이 두 개의 버퍼에 숫자 배열을 채우고 계산 쉐이더로 합계를 포함하는 세 번째를 생성하고이를 인쇄하여 CPU로 다시 읽어 들이기 시작했습니다 ... 입자 하중의 위치를 ​​업데이트하기 위해 어떻게 확장 할 수 있는지를 알 수 있습니다. 그런 다음이 위치를 CPU로 다시 읽을 필요가 없으며 그래픽 pipleline 프로그램이 데이터를 입력으로 직접 사용할 수 있습니다. – jcoder

+0

필자가 필요로하는 바로 그 종류의 예제가 포함되어 있으므로이 책과 같은 것을 권장 할 것이다. http://www.amazon.co.uk/Introduction-Game-Programming-DirectX-ebook/dp/B0085CDJY4. (때때로 일부 단계를 생략하는 것처럼 보이지만 좋은 책이라는 것을 알게되었습니다) – jcoder

답변

3

컴퓨팅 쉐이더는 그래픽스 파이프 라인의 일부가 아닙니다. 쉬운 GPGPU를위한 도구이므로 입자 이동과 같은 렌더링 목적이 아닌 그래픽 장치의 연산 능력을보다 쉽게 ​​사용할 수 있습니다. 입자 시스템에 사용하려면 먼저 계산 쉐이더를 사용하여 입자 위치를 계산해야합니다. 그런 다음 정상 코드의 출력을 렌더링을 위해 정점 버퍼에 채 웁니다. AFAIK 출력을 렌더링 파이프 라인으로 파이프하는 직접적인 방법은 없지만 계산 쉐이더에 익숙하지 않습니다. 흥미로운 링크는 documentation이고 example 일 가능성이 큽니다. 그래픽 파이프 라인은 page에 표시됩니다.

관련 문제