yuchi's Development Home
글 수 201
어제 15시간동안 매달려서 멀티스레드 렌더링 코드 싹 들어내고 VSM을 이용해서 소프트쉐도우를 구현해봤다.
그럭저럭 괜찮은데 문제가 있다.
1. 라이트맵을 사용하기 때문에 움직이는 개체들의 그림자만 드리우려고 한다. 따라서 쉐도우맵에는 움직이는 개체들의 깊이값과 그 제곱만 기록한다. 즉 라이트맵을 사용하는 건물과 필드 오브젝트들은 쉐도우맵에 아무것도 기록하지 않는다.
기존 쉐도우맵 비교 방식이면 상관이 없는데 vsm의 경우는 체비셰프 부등식으로 그림자 색을 결정하다보니 아무것도 기록되지 않은 텍셀을 읽으면 엄청 웃기게 된다. 텍스쳐 clear할때 임의의 값을 지정하는 방법도 생각해봤는데 애초에 적당한 값이란게 존재하질 않는다.
2. 쉐도우맵의 블러링 되는 영역에서 빛샘 현상이 발생한다.
그래서 포기.
차선책으로 기존의 뎁스 비교방식에 간단한 PCF 4x4 필터링을 적용했다.
완전히 맘에 들진 않지만 내 엔진의 체계에선 이쪽이 그럭저럭 맞는듯.
Non Self Shadow + Tessellation
Self Shadow PCF 4x4 + Tessellation
Self Shadow PCF 4x4
대충 쓸만한듯.
소프트쉐도우는 일단 이쯤 해두고 cascade shadow map으로 넘어가야겠다.
그럭저럭 괜찮은데 문제가 있다.
1. 라이트맵을 사용하기 때문에 움직이는 개체들의 그림자만 드리우려고 한다. 따라서 쉐도우맵에는 움직이는 개체들의 깊이값과 그 제곱만 기록한다. 즉 라이트맵을 사용하는 건물과 필드 오브젝트들은 쉐도우맵에 아무것도 기록하지 않는다.
기존 쉐도우맵 비교 방식이면 상관이 없는데 vsm의 경우는 체비셰프 부등식으로 그림자 색을 결정하다보니 아무것도 기록되지 않은 텍셀을 읽으면 엄청 웃기게 된다. 텍스쳐 clear할때 임의의 값을 지정하는 방법도 생각해봤는데 애초에 적당한 값이란게 존재하질 않는다.
2. 쉐도우맵의 블러링 되는 영역에서 빛샘 현상이 발생한다.
그래서 포기.
차선책으로 기존의 뎁스 비교방식에 간단한 PCF 4x4 필터링을 적용했다.
완전히 맘에 들진 않지만 내 엔진의 체계에선 이쪽이 그럭저럭 맞는듯.
Non Self Shadow + Tessellation
Self Shadow PCF 4x4 + Tessellation
Self Shadow PCF 4x4
대충 쓸만한듯.
소프트쉐도우는 일단 이쯤 해두고 cascade shadow map으로 넘어가야겠다.