프로그래밍 2015. 5. 8. 20:47
728x90

 

그림자 vsm 구현 - 깊이 버퍼 그림자 vsm

 

 

깊이버퍼 그림자 기법의 내값보다 멀리있느냐, 가까이 있느냐의 2진 비교만으로는

도트처럼 픽셀화된 외곽선을 피할수 없습니다.

그림자가 드리워 지는가? 아닌가? 에 대한 결과만을 얻을수 있기 때문에,

그림자의 컬러는 단일화된 색상으로 채울수 밖에 없습니다.

 

PS()

{

 .......

 .......

 

 if( fMyDist2Light > moments.x )
{

      return OrigColor * 0.5;

 }      

 

return OrigColor;

}

 

대략 위 코드형식으로 구현됩니다.

 

 

좀 헷갈렸던 것이

텍스쳐 필터링처럼, 하드웨어 보간이 되어 출력되는 것과

혼용하여 생각을 했던 부분입니다.

 

이렇게 생각하면,

"그림자 텍스쳐와, 그림자가 올라갈 텍스쳐가 필터링 처리가 된다면,

최종 렌더 결과물도 보간되어 출력될 것이다. 그러면 자동으로 경계 부근이 흐릿하게 되겠지"

라는 것입니다만,

 

우리가 픽셀쉐이더를 통해서 할수 있는 일은,

필터링된 텍스쳐를 얻어오는 것이고,

최종적으로 PS() 함수에서 코딩된대로, 우리가 뿌려주는 데로 출력이 되는 것이기 때문에,

위와 같은 생각은 말이 안되는 것입니다.

 

추후, 렌더타겟의 값을 자동 보간시켜주는 하드웨어 장치나 기법이 개발된다면,

pcf 나 vsm 같은 외곽선을 다듬는 기법은 필요가 없어지겠지요.

 

하드웨어 지원이 된다면 참 좋겠습니다.

 

vsm 은 정말 악마같은 놈이었습니다!

 

 

[only depth]

 

어쨋든

깊이 버퍼 그림자는 위와 같은 외곽선을 가집니다.

 

눈뜨고 그냥은 게임에 사용할 수가 없습니다.

 

 

어쨋든 외곽선을 부드럽게 만들어야 합니다.

 

 

[어쨋든 외곽선 부드럽게]

 

 

 

 

우리가 원하는 결과는 이런 것이 아니겠습니까?

 

더욱 멋진 것들도 있습니다.

 

 

 

 

 

 

 

 

오우 좋아

깔끔해!

 

 

위 스샷들은 제가 테스트하면서 찍은 것들입니다만,

 

사실,

 

vsm 으로 구현한 것이 아닙니다.

 

only depth - 기본적인 깊이 버퍼 그림자로

만든 것들입니다.

 

 

 

 

728x90
posted by BK dddDang
: