멀티 패스 효과의 좋은 예?


9

XNA (및 일반적인 AFAIK의 Direct3D)에서는 개별 정점 및 프래그먼트 셰이더를 만드는 대신 잠재적으로 많은 관련 셰이더를 '효과'에 묶습니다. 효과를 사용할 때 '기술'을 선택하거나 모든 기술을 반복 한 다음 각 '기술'에는 다수의 '통과'가 있습니다. 각 패스를 반복하여 관련 버텍스 및 프래그먼트 셰이더를 선택하고 지오메트리를 그립니다.

그래도 궁금한 점은 여러 번 필요한 패스가 무엇입니까? 3d 초기에는 텍스처 단위가 하나 뿐이고 2가 있었으며 환경 매핑을 원한다면 여전히 충분하지 않은 것으로 알고 있습니다. 그러나 최신 장치, 심지어 모바일 클래스에서도 8 개 이상의 텍스처를 샘플링하고 단일 쉐이더에서 원하는만큼의 조명 계산을 수행 할 수 있습니다.

여기서 더 경험이 많은 사람들이 멀티 패스 렌더링이 여전히 필요한 실제적인 예를 제공 할 수 있습니까, 아니면 XNA / Direct3d의 일부에 대한 과잉 엔지니어링입니까?

답변:


5

캡처 된 버퍼 세트에서 후 처리 효과를 수행 할 때마다 툰 아웃 라인, 모션 블러, SSAO, 블룸과 같은 다중 패스 효과를 사용하는 것이 합리적입니다. 첫 번째 패스는 모든 것을 적절한 버퍼로 렌더링하는 곳이며, 이후의 각 패스는 각 포스트 프로세스 효과를 처리합니다.

Ranieri가 XNACC 예제에 대해 언급 한 것처럼, 다수의 패스를 사용하여 수많은 조명을 렌더링합니다. 이 예에서는 각 조명에 대해 한 번만 동일한 패스를 실행하고 있습니다.

셰이더 모델 2와 그 이전 버전은 각 셰이더에서 셰이더 모델 3 또는 4만큼 많은 명령을 갖는 것을 처리 할 수 ​​없다는 점을 기억하십시오.


EffectPasses를 반복하는 XNA Effect 객체가 다른 효과를 사용하는 것과 달리 여러 패스를 갖는 경우와 그 이유를 예를들 수 있습니까?
Jason Goemaat

4

다른 답장에서 지적했듯이 다른 답장에서 제안한 것처럼 멀티 패스 렌더링 (다른 쉐이더 / 매개 변수로 단일 메쉬를 여러 번 그리기)은 주로 조명 및 특수 효과에 여전히 사용됩니다

이런 종류의 D3DX Effect 패스를 사용할 수 있습니다. 그러나 둘 이상의 셰이더 / 효과로 구현할 수도 있습니다.

패스의 원래 의도는 패스 당 텍스처 스테이지 수와 쉐이더 명령 수에 대한 제한이 상당히 제한적인 저급 (셰이더 -2.0 이전) 하드웨어에서 복잡한 쉐이더를 구현하는 데 도움이되는 것이 었습니다.

다중 패스 조명의 예에서 전환 효과 대신 패스를 사용하면 성능이 크게 향상됩니까?


3

모든 사람들이 언급 한 조명 외에도이 주요 용도는 blur 입니다. 수평 및 수직은 별도의 패스로 수행되므로 9x9 블러를 얻으려면 81이 아닌 각 출력 픽셀에 대해 18 픽셀 만 샘플링하면됩니다. 블룸 / HDR, 피사계 심도, 글로우 등에 사용됩니다.


아마도 블러 구현은 수평 및 수직 패스에 동일한 쉐이더를 사용하고 샘플링 오프셋 (셰이더 상수 또는 버텍스 당 데이터)을 전달한다고 생각합니까?
bluescrn

1
@bluescrn-Bloom은 일반적으로 밝은 영역을 추출하고 축소하거나, 가로를 흐리게, 세로를 흐리게, 흐리게 이미지를 원본과 결합 / 업 스케일링하는 4 가지 패스 효과로 간주됩니다. 쉐이더 매개 변수는 다음을 제어 할 수 있지만, 모두를 차별화하는 데 필요한 것 분기가 있지만 두 흐림 통과
로버트 프레이저


1

Ranieri가 말했듯이 여러 조명에 대해 여러 패스를 사용할 수 있습니다. 예를 들어 단일 재료로 '앰비언트'패스, 포인트 라이트 당 추가 패스, 스포트라이트 당 다른 추가 패스 및 확산에 곱하기위한 데칼 패스 텍스쳐

또한 대부분의 모피 셰이더는 여러 패스를 사용한다고 생각합니다.


0

멀티 패스를 사용하여 그림자를 만들기위한 그림자 맵을 수행 할 수 있습니다. 참고로, 비디오 카드가 패스 수와 동일한 수의 텍스처 단위를 지원하는 경우 한 번의 패스로 일부 멀티 패스 효과를 수행 할 수 있습니다. 따라서 텍스처 단위가 충분하지 않으면 여러 패스를 사용해야합니다. 하나의 고정 하드웨어 플랫폼 (게임 콘솔과 같은)에서는 텍스처 단위의 수를 알고 있기 때문에 다중 텍스처링을 사용하여 코딩 할 수 있습니다. 그러나 PC의 경우 무한한 수의 하드웨어 구성이 있습니다. 소비자에게 가장 광범위하게 접근하려면 더 복잡한 효과를 여러 단계로 나누어서 저급 하드웨어 사용자 (GPU에 텍스처 단위가 많지 않은 사용자)가 여전히 효과를 참조하십시오. 간단히, 그림자 맵은 한 번에 빛의 관점에서 장면의 그림자 맵을 먼저 만들어서 만듭니다. 그런 다음 그림자 맵 텍스처가 장면의 다른 텍스처와 함께 장면에 혼합됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.