2011-02-11 3 views
1

일부 HLSL 쉐이더에서 SM2.0에서 작동하도록 노력하고 있습니다. 나는 거의 성공했지만 우리의 쉐이더 중 하나가 매개 변수를 허용합니다PS_2_0 쉐이더에서 VFACE 시맨틱을 에뮬레이트

float alignment : VFACE 

MSDN에서 내가 알기로는 이것이 내가해야 할 경우를 계산 자동 VAR이다, 그러나 SM2.0에서 지원되지 않는 ... 그래서 , 어떻게 이것을 재현 할 수 있을까요? 나는 셰이더 프로그래머가 아니므로 어떤 (의사) 코드라도 도움이 될 것입니다. VFACE 을 처리하지만, 픽셀 쉐이더 나 VS에서 어떻게 계산되는지는 알지 못합니다. 픽셀 당 사운드를 계산하는 것은 많은 비용이 들지만 어쩌면 누군가가 스켈레톤을 VS에서 계산하여 PS에서 사용할 수 있습니까?

답변

1

수 없습니다. VFACE은 삼각형 (뒤 또는 앞)의 방향을 의미하고 VS 또는 PS 스테이지는 전체 프리미티브 (SM4/5 GS 스테이지에서와 같이)에 액세스하지 못하기 때문입니다.

유일한 방법은 지오메트리를 두 번 패스 (후면 컬링으로 하나는 전면 컬링으로)하고, 셰이더에 상수 값을 VFACE 의미로 전달하는 것입니다.

+0

VS가 삼각형의면 법선을 갖지 않고 카메라 위치/벡터에 액세스 할 수 있습니까? 나는 어떻게 이것들에 접근 할 수 있는지, 심지어 VS가 _can_ 값을 PS에 전달했다 할지라도 어쨌든? –

+0

물론 VS는 얼굴에 정상적으로 주어지며 시력 벡터에도 접근 할 수 있습니다 (VS에 건네면). VS는 PS에 값을 전달할 수도 있습니다. 그러나 이것이 당신에게 VFACE를주는 것은 아닙니다. 트라이의 두 법선이 정면으로 향하고 마지막 정면이 정면으로 (또는 정면이 정면으로, 정면이 정면으로 2 개) 감지되는 경우가 있기 때문에 정확하게는 알 수 없습니다. 이 결과는 매우 불쾌한 유물이됩니다 (두 측면 조명 목적으로 VFACE를 사용하고있는 것 같습니다). 이는 래스터 라이저의 속성 보간 때문입니다. 올바르게 대답하는 유일한 방법은 내가 대답 한대로 2 개의 패스를 사용하는 것입니다. – Stringer

+0

_face_ 법선은 삼각형의 모든 정점에서 동일합니다. VS가 _vertex_ 법선 또는 _interpolated_ 법선을 액세스 할 수 있다고 말한 것 같습니까? 이것은 조명용이 아니지만 유물 포인트는 유효한 채로 남아 있습니다 ... 그러나 시도해 볼만한 가치가있을 것입니다. –

관련 문제