2014-01-21 1 views
2

이것은 어리석은 질문이지만, 쉐이더 프로그래밍에 익숙하지 않으므로 나와 양육하십시오.
각 기술은 여러 패스를 가질 수 있으며 각 패스는 특정 장치 상태와 해당 정점 및 픽셀 셰이더 기능을 연관 시킨다는 점을 이해합니다 (xna 프로젝트의 .fx에서 적어도 hlsl 사용). 이제 내 질문은 : 기술의 패스가 하나씩 차례대로 실행되면 각 패스가 렌더링 파이프 라인을 완전히 통과한다는 의미인가? 두 가지 패스를 사용하는 기술이있는 경우 첫 번째 패스는 응용 프로그램 (VertexBuffer)에 대한 데이터를 가져와 파이프 라인을 통과합니다. 두 번째 패스는 첫 번째 패스가 스패트 한 것과 파이프 라인을 통해 또 한 번갑니다.HLSL Multi-pass

답변

1

일반적으로 패스는 서로 독립적입니다. 모든 패스는 동일한 입력 지오메트리 (일반적으로 정점 버퍼에 의해 정의 됨)를 사용합니다. 이 기하학으로 수행하는 작업은 다를 수 있습니다.

예. 당신은 두 가지 패스를 가진 기술을 가질 수 있습니다. 첫 번째 패스는 일반적인 방식으로 객체를 그립니다. 두 번째 패스는 객체를 그리지 않지만 법선은 작은 선으로 그립니다. 결과는 법선이 선으로 표시되는 객체입니다.

마찬가지로 여러 패스가 모피, 광선, 후광과 같은 다양한 효과에 사용될 수 있습니다 ... 파이프 라인의 결과는 대개 색상입니다. 이 결과를 다른 셰이더의 입력으로 사용하려면 파이프 라인을 다시 연결해야합니다 (즉, 새 입력 개체, 셰이더 ... 설정).

+1

명확한 답변을 주셔서 감사합니다.하지만 이제는 의심 스럽습니다. 두 개의 쉐이더로 하나의 쉐이더를 만드는 대신 쉐이더를 만드는 것의 차이점은 무엇입니까? 그것은 단지 물건을 깔끔하게 유지하고 효과에 대한 연결성을주는 것입니까? – Geoffrey91

+0

예, 기본적으로 요점입니다. 객체 렌더링을위한 대부분의 코드는'기술 적용 (패스 적용, 객체 렌더링) '에서 각 패스에 대한 것과 같은 것을 포함합니다. 매번 다른 쉐이더를 적용하는 대신 이렇게하는 것이 더 읽기 쉽습니다. 또한이 기능은 메소드에 캡슐화 될 수 있습니다. –