밉맵 텍스쳐링
이 글은 원문(MipMap Textureing)을 정리한 내용입니다.
원문 읽는걸 강하게! 추천합니다.
밉맵이 없다면?
: 결점(아티펙트)가 보임/ 세밀한 부분에서 엘리어싱 발생
해결책은?
: 렌더링 하기 전에 디테일을 필터링 한다.
텍스쳐가 입혀진 오브젝트들은 뷰포트에서 다른 거리로 보여질 수 있다.
텍스쳐 이미지 에서 어느 디테일의 레벨을 사용해야 할까?
너무 높은 해상도를 사용하면 엘리어싱이 발생하고 너무 작은 해상도를 사용하면 디테일이 너무 떨어져 보인다.
그렇다면 오브젝트와 뷰포트와의 거리에 따라 디테일 정도를 다른 레벨로 사용하자!
1983년에 소개된 "Pyramidal Parametrics"라는 글에서 처음 "mipmap"이라는 단어를 사용.
mip = multum in parvo (작은 장소에 많은 것들)
LOD 문제는 텍스쳐의 피라미드를 만듦으로써 해결. (최고 해상도 텍스쳐는 피라미드 레벨0, 그 다음 레벨은 이전 레벨의 절반)
용량은 대략 1/3정도 더 필요하다.
어느밉을 쓸건지는 오브젝트가 화면에 투영된 크기를 기반으로 정한다.
밉맵 만드는 알고리즘.
1. Nearest Neighbour. (최근적 이웃 알고리즘)
그냥 가장 가까운걸로 택한다.
2. Box Filter.
네 텍셀의 평균값으로 픽셀값 결정
참고 : https://mgun.tistory.com/1975
3. Gaussian Filter
더 자연스럽고 부드럽게 필터링 하기 위해 가우스 함수 사용.
계산은 비싸니까 보통 필터 행렬을 만들어서 사용한다.
참고 : https://mgun.tistory.com/1982
Texture Lookup
텍스쳐에서 색상을 가져오려 할 때 문제점.
1. 텍스쳐가 폴리곤보다 작을 때. (픽셀맵이 하나의 텍셀보다 작다. 축소)
2. 텍스쳐가 폴리곤보다 클 때. (픽셀맵이 하나의 텍셀보다 크다. 확대)
Nearest Filtering : 텍스쳐의의 중간 텍셀로 색을 결정.
Bilinear Filtering : 중복된 픽셀에 가중치를 줘서 평균화 한다.
Bilinear은 참 좋은데 경계면(밉이 바뀌는)이 좀 구리다.
Trilinear Filtering : 구린 Bilinear을 개선하기 위한 Trilinear Filtering
예를들면 0번레벨 *30% + 1번레벨*70% 처럼 계산한다.
OpenGL에서 보면 필터링 옵션이 여러개 있다.
GL_NEAREST
GL_LINEAR
GL_NEAREST_MIPMAP_NEAREST
GL_NEAREST_MIPMAP_LINEAR
GL_LINEAR_MIPMAP_NEAREST
GL_LINEAR_MIPMAP_LINEAR (이게 Trinear)
위의 필터링 옵션에서 보면 녹색은 텍스쳐를 샘플링할 때 쓰이는 옵션이고 주황색은
밉맵을 조합할 때 쓰이는 옵션이다.
Anisotropic(이등방성) Filtering
Trinear(삼성형) 밉맵핑은 급격한 각도에서 흐리다.
Trinear과 Bilinear 필터링은 시야 관점을 고려하지 않는다.
Anisotropic 필터링은 텍스쳐에서 픽셀의 투영된 부분을 찾는다.
k anistropic 이란 텍스쳐의 k개의 샘플이 픽셀의 투영을 근사화하는데 사용됨을 의미한다.
Reference Link
- 밉맵 필터링
- 밉맵 텍스쳐링
'Study > Graphics ' 카테고리의 다른 글
Chromatic Aberration 2 (색수차) (0) | 2020.12.28 |
---|---|
Chromatic Aberration 1 (색수차) (0) | 2020.12.28 |
Specular Showdown in the Wild West (0) | 2019.08.16 |
Clipmaps (0) | 2019.06.15 |
early z (0) | 2018.08.29 |