벌써 5년넘게 써오고 있는 방법인데 생각보다 모르시는 분들이 많은 것 같아 이방법을 공유합니다.
밉맵?
일단 밉맵이 뭔지는 다 아시리라 생각하고 굳이 밉맵에 대해서는 설명하지 않겠습니다. 모르시는 분들은 여길 참고하세요.
문제점 및 일반적인 해결책
밉맵을 사용하다보면 정말 카메라를 가까이 들이밀지 않는한 텍스처의 디테일이 흐릿해 보이는 경우가 흔히 발생합니다. 보통 다음과 같은 방법들로 해결합니다.
흔히 쓰는 해결법 1 - 텍스처 크기 늘리기
밉레벨이 낮아질수록 텍스처 크기가 절반씩 줄어드는 거니 젤 높은 디테일의 밉멥 텍스처크기를 크게 키워주면 그만큼 흐려지는 현상이 덜합니다. 하지만 메모리를 많이 잡아먹는다는 단점이 있어서 정 필요한 때만 제한적으로 사용하곤 합니다. (왜 흔히 라고 한거지 그럼 -_-)
흔히 쓰는 해결법 2 - 밉맵 바이어스 쓰기
이걸 고치기 위해 흔히 쓰는 해결법은 밉맵 bias를 조절하는 방법입니다. 샘플러스테이트에서 정해주는 방법도 있고 셰이더에서 해주는 법도 있습니다. 뭐든 나쁜 방법은 아니고 가장 널리 쓰는 방법인데 여러가지 단점이 있습니다
고디테일의 텍스처(크기가 큼)를 더 많이 쓰도록 bias를 주므로 텍스처 캐쉬의 성능저하 (그만큼 넣어야할 데이터가 많으니)
밉맵이 원래 해결하려고 하는 거리에 따른 애일리어싱 문제가 쉽게 더 생긴다.
모든 경우에 적당히 잘 동작하는 bias 값을 찾기가 쉽지 않다.
흔히 쓰는 해결법 3 - 밉맵 생성시 사용하는 필터 다르게 사용하기
보통 bilinear 필터를 사용해서 밉맵을 만드는게 일반적입니다. 그럼 그냥 주변에 있는 이웃 픽셀들 2x2개 모아다가 균등하게 혼합하는게 전부입니다. 이 외에 kaiser 필터 등을 사용하면 좀더 낫다고 해서 그렇게 하는 사람들을 봤지만... 개인적으로는 별 효과가 없다고 생각합니다.
제 해결법 - sharpening filter
생각보다 매우 간단합니다. 그냥 밉맵 텍스처에 sharpening 필터 한번 더 먹여주면 됩니다. -_- 사실 밉맵들이 흐릿해 보이는 이유가 bilinear 필터링만 쓰면 그냥 경계를 뭉게버린다는건데 여기다 sharpening 필터 한번 먹여주면 경계부분은 다시 적당히 또렷하게 살아나거든요...
오프라인 프로세스라 게임성능에 지장도 없고... 흔히 쓰는 해결법 2에서 말씀드렸던 단점들도 없습니다.. 그냥 밉맵만드실때 이런순서로 만들어 주시면 됩니다.
밉맵 0으로부터 밉맵 1 생성 (bilinear filter)
밉맵 1에 sharpening filter 적용
2번 결과물로부터 밉맵 2 생성(bilinear filter)
밉맵 2에 sharpening filter 적용
밉맵 끝까지 만들때까지 반복...
이 방법을 대충 포토샵으로 흉내낸걸 보여드리면 대충 이렇습니다. 오른쪽이 제 방법입니다.
꽃미남 포프였습니다.
'프로그래밍' 카테고리의 다른 글
다시 한번 C++에서도 coroutine (4) | 2013.07.16 |
---|---|
맵 파일을 이용한 충돌 위치 찾기 ( Finding crash point using the MAP file ) (6) | 2013.07.12 |
맘에 안드는 PIMPL 패턴 (C++) (5) | 2013.06.03 |
도플광어의 html5 게임엔진 만들기 1편. 웹은 게임기이다. (9) | 2013.05.05 |
비쥬얼 스튜디오 디버깅 팁 ( Visual Studio Debugging Tips ) (31) | 2013.04.10 |