본문 바로가기
Shader

근거리 SSAO 제거 기능 추가

by 대마왕J 2012. 3. 15.

발단

동탁의 수염이 이렇게 보였습니다.
이것은 뭐... 설명하려면 복잡하지만 쉐이더 처리할때 DOF에 캐릭터가 묻히지 않게 하기 위해서 처리해 둔 게 있습니다.
나름 꼼수인데, 그게 문제가 생긴거죠.

그래서 쉐이더 수정으로 이렇게 바꿨습니다. 원래대로 돌아온거죠.



이게 정석이긴 하지만, 우리 게임에서는 이렇게 쓰면 문제가 생깁니다. 역시 생기네요.
이게 우리가 잘못했다고 하기도 좀 그렇고 하여간 좀 그렇네요.
바로 캐릭터 위로 뒤에 있는 SSAO 가 뚫려 보이는 느낌이 납니다.
허벅지를 보면, 길 SSAO가 보입니다.

사실 이 문제때문에 쉐이더를 강제로 수정했던건데, 덕분에 동탁의 수염문제가 나타난 거였습니다.




하여간 이렇게 하면, 캐릭터만 Z 버퍼에 못그리는 사태가 벌어집니다. 그것도 렌덤임!!!!!!

 


그래서 SSAO가 캐릭터를 인식 못하고 그려버려서 그러는 것입니다.

어쨌건 이대로 두면 곤란함.

결국




이 방식으로 다시 돌아왔습니다.
아래 부분에 SSAO가 문제가 생기던 버전으로 다시 빽.






SSAO만 보면 이렇습니다. DOF 문제는 안생기지만, SSAO문제가 생깁니다.
근본적인 해결은 제 선에서는 곤란...



 그래서 새 아이디어는, '근접하면 SSAO가 안나오게 하자' 라는 것이었습니다.
지금 화면은 깊이 버퍼인데, 여기서 까맣게 나오는 부분만 SSAO가 나오는 것입니다.



그래서 수치를 조절해서, 화면에서 아주 가까이 있는 곳에는  SSAO가 나오지 않도록 만들었습니다.



그럼 SSAO가 이렇게 나오면서,


 

수염 아래의 문제가 사라집니다.

 


그치만 좀 떨어지면 다시 수염에 문제가 생기는 것을 발견했습니다. 너무 근접한거죠.





이것은 좀 거리가 떨어지면 다시 SSAO가 먹기 때문이니까. ..



이것을 고치기 위해서, 가까이 있는 영역을 조금 더 강하게 하고 넓혔습니다.
검은색 부분이 SSAO가 나오는 곳입니다.
이제 캐릭터가 화면에 꽉차게 보일 정도라면, SSAO가 보이지 않습니다.



물론 멀리 빼면 아무 상관없이 SSAO가 이전처럼 적용됩니다. 수염에 문제 생기지만 작으니 상관없슈.




 


그 결과, 이정도 떨어지면 수염 아래에 그 증상이 보입니다.  하지만 이정도면 잘 안보는 거지요.. 꼼수입니다.  
더 안보이게 하고 싶으면 수염의 알파를 최소한으로 줄이는 것을 추천합니다.


물론 이정도만 근접해도 안보입니다.

단, 이 방법을 사용하려면 해당하는 맵을 다시 번들로 넘겨야 하는 번거로움이 있습니다.
프로그램팀에서 조정해 보려고 했었는데, 렌더러를 잘못 건드리게 되어서 패스.

그러므로 이 문제가 발생하는 맵에서는 번들을 다시 넘겨 주시길 바라겠습니다.

이상입니다.

반응형

댓글