2011-05-09 5 views
0

pcf 섀도우 맵핑에 대해 약간 설명하는이 링크를 발견했습니다. 제공된 코드 샘플을 살펴본 결과 오프셋 배열이 무엇인지 알 수 없습니다. 나는 그것이 float2의 배열이라고 가정하고 있는데, 그것은 인접한 것들을 줄 픽셀을 상쇄 할 것이라는 것을 안다. 오프셋을 설정해야하는 이유를 파악할 수 없습니다.그림자 맵에 pcf를 추가하는 방법

는 링크 : 여기 http://www.gamerendering.com/2008/11/15/percentage-closer-filtering-for-shadow-mapping/

코드

float result; 
result = shadow2DProj(shadowMap,texCoord+offset[0]); 
result += shadow2DProj(shadowMap,texCoord+offset[1]); 
result += shadow2DProj(shadowMap,texCoord+offset[2]); 
result += shadow2DProj(shadowMap,texCoord+offset[3]); 
result /= 4.0; // now result will hold the average shading 

난 그냥

어떤 도움에 감사드립니다

, 당신을 감사

마크

간단하게 뭔가를 누락 될 수 있어야합니다
+0

오프셋 값을 제거하면 어떻게됩니까? – Jay

+0

그림자 맵의 텍스처 비교 모드를'GL_COMPARE_REF_TO_TEXTURE'로 설정해야합니다. 그러면 하드웨어 PCF가 생깁니다. 이것은 실제로 당신이 링크 된 문서에 설명되어 있습니다 ... – Tara

답변

1

나는 GLSL 함수이며 HLSL/CGSL의 해당 함수가 tex2Dproj라는 것을 알고 있기 때문에 shadow2DProj를 사용하고 있음을 알았습니다. 빈 화면이 나타나면 오프셋 값을 일시적으로 제거 할 수 있어야하므로 더 가까이 다가 갈 수 있습니다.

행운을 빌어 요 저는 너무 익숙합니다. :

+0

내가 게시 한 코드는 내가 찾은 샘플 코드입니다. 나는 그것이 1/텍스처의 너비가되어야 오프셋을 운동 관리. 이제 pcf가 어떻게 작동하는지 이해합니다. 본질적으로 당신이하는 일은 운동입니다. 픽셀 쉐이더에있는 현재 픽셀 주변의 그림자에 얼마나 많은 픽셀이 있는지 연습합니다. 그런 다음 해당 숫자를 테스트 한 픽셀 수로 나누고 그림자 감쇠를 해당 값으로 설정합니다. 나는 또한 HLSL을 사용하고있다. – MulletDevil

+0

다행이 당신을 위해 일하는 친구 :) – Jay

관련 문제