프로그래밍 2016. 1. 14. 20:01
728x90
vsm 지형 그림자

 

 

vsm 을 적용했음에도 불구하고,

그림자의 퀄리티가 낮게 출력되던 이유를 발견했다.

 

vsm 구현후, 수많은 테스트를 진행했었는데,

외곽이 생각보다 스무드하게 출력되지 않아서,

관련 셋팅값, 라이트 거리 등을

조절하면서 출력결과를 비교해 보고는 했다.

 

 

 

 

지형에 그려진 그림자의 외곽이 스무드하지 않다.

위 샷은 라이트 거리를 멀게 두고 테스트하긴 했지만,

라이트의 거리가 조금 더 가까워져도 만족할만한 부드러운 에지가 출력되지는 않았었다.

 

밑의 샷 두개로 비교를 해보자

렌더타겟의 크기는 1024 x 1024

라이트뷰를 만들때의 라이트 위치는 꽤 멀리 떨어져 있다.

 

 

 

A. 그림자의 외곽부분에 반투명값이 출력되고는 있지만,

퀄리티가 좋지 못하다.

게다가, 바이어스값을 올려주면,

그림자의 밑부분이 투명화되는 현상도 있다.

 

 

 

 

B. 위 스샷이 정상적으로 적용된 vsm 그림자이다.

그림자의 엣지가 많이 부드러워지고,

그림자의 밑부분의 투명화 현상도 없다.

 

 

A, B 의 스샷의 라이트 거리, 바이어스 등의 설정값들은 동일하다.

하나의 차이점은,

B 가 렌더링 될때는, 그림자 렌더타겟에 지형이 그려졌다는 것이다. 

 

허억...

 

이것이었다. 생각해보면 너무도 당연한 것이지만,

지형의 뎁스값이 제대로 기록되지 않으면, 뎁스 비교가 렌더타겟의 클리어값과 비교되어,

vsm 효과가 제대로 보여지지 않았던 것이다.

그도그럴것이 체비쇼프 방정식에 사용되는 moment.x, moment.y 값이 동일했고,

값의 수치도 매우 큰값이었을 테니...

 

지형을 렌더링하는 것도 어느정도의 비용이 있으니,

굳이 포함시키지 않고 있었는데, 실수였었다.

어쨋든 그림자가 출력은 되었으니, 생각이 거기까지 미치지를 못했었다.

 

 

자, 마지막 스샷을 보자

 

 

 

C. 그림자 디테일은 감소되었지만,

매우 스무드한 그림자 외곽이 표현되었다.

 

C 는 B 와 동일한 수치값들을 가지고 있다.

단, 하나의 필터링 작업이 추가되었는데,

그것은

 

그림자 뎁스 버퍼를 필터처리한 것이다.

그림자 뎁스 버퍼를 4x4 블러처리를 해준것.

 

체비쇼프 부등식을 이용하여, 뎁스값을 비교할때,

주변 픽셀의 값을 샘플링하여, 최종 그림자 값을 구하는 방법도 있지만,

위 샷의 방식은 이것이 아니라,

뎁스가 기록된 렌더타겟 텍스쳐를

미리 준비해둔 블러용 텍스쳐에 옮기면서, 블러처리를 해준것이다.

bloom 처리에 사용되는 샘플링 방식과 동일하다고 보면 되겠다.

 

이 부분은 따로 설명을 올리겠다.

 

 

 

728x90

'프로그래밍' 카테고리의 다른 글

vsm with cascade shadow map 2  (0) 2016.01.26
vsm with cascade shadow map 1  (0) 2016.01.25
vsm 그림자  (1) 2015.10.13
dof 구현 1  (3) 2015.10.05
SSAO 구현 2  (0) 2015.10.05
posted by BK dddDang
: