그림자 개선중#2

어제 15시간동안 매달려서 멀티스레드 렌더링 코드 싹 들어내고 VSM을 이용해서 소프트쉐도우를 구현해봤다.

그럭저럭 괜찮은데 문제가 있다.

1. 라이트맵을 사용하기 때문에 움직이는 개체들의 그림자만 드리우려고 한다. 따라서 쉐도우맵에는 움직이는 개체들의 깊이값과 그 제곱만 기록한다. 즉 라이트맵을 사용하는 건물과 필드 오브젝트들은 쉐도우맵에 아무것도 기록하지 않는다.

기존 쉐도우맵 비교 방식이면 상관이 없는데 vsm의 경우는 체비셰프 부등식으로 그림자 색을 결정하다보니 아무것도 기록되지 않은 텍셀을 읽으면 엄청 웃기게 된다. 텍스쳐 clear할때 임의의 값을 지정하는 방법도 생각해봤는데 애초에 적당한 값이란게 존재하질 않는다.

2. 쉐도우맵의  블러링 되는 영역에서 빛샘 현상이 발생한다.

그래서 포기.

차선책으로 기존의 뎁스 비교방식에 간단한 PCF 4×4 필터링을 적용했다.

완전히 맘에 들진 않지만 내 엔진의 체계에선 이쪽이 그럭저럭 맞는듯.

Non Self Shadow + Tessellation

453c6ce2aa7ef2d523e2223610d98f4f
Self Shadow PCF 4×4 + Tessellation

9f00a0fac9b65fe44dcecb0bd86d8812
Self Shadow PCF 4×4

09118ee5045092fcae065739ab5835da

대충 쓸만한듯.

소프트쉐도우는 일단 이쯤 해두고 cascade shadow map으로 넘어가야겠다.


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중