5.5.5-[3, 4] 밉맵(Mipmap), 밉맵 필터링
- 렌더링 성능과 퀄리티를 높이는 텍스쳐 기법
- 기존 밉맵을 사용하지 않을 때의 문제점
- 반짝거림 현상
- 렌더링 크기가 텍스쳐 크기보다 작은 경우.
- 성능
- 밉맵이란?
- 여러 크기의 밉맵 텍스쳐를 준비하고, 현재에 가장 적합한 텍스쳐를 선택하는 기법
- 초기 설정
- glTexSubImage2D
void glTexSubImage2D( | GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLenum type, |
| const GLvoid * data) ; |
- level
- 0, 1, 2 ~ 순
- 밉맵을 사용하지 않을 경우 0으로 설정
- 밉맵 기본 레벨 및 최대 레벨 지정
- glTexParameteri
void glTexParameteri( | GLenum target, |
| GLenum pname, |
| GLint param) ; |
- 예제
- // 기본 레벨을 0으로
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
- // 최대 레벨을 4로
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4);
- 밉맵 필터링
- 텍스쳐 필터링의 종류
-
GL_NEAREST
- Returns the value of the texture element that is nearest (in Manhattan distance) to the center of the pixel being textured.
GL_LINEAR
- Returns the weighted average of the four texture elements that are closest to the center of the pixel being textured.
GL_NEAREST_MIPMAP_NEAREST
- Chooses the mipmap that most closely matches the size of the pixel being textured and uses the
GL_NEAREST
criterion (the texture element nearest to the center of the pixel) to produce a texture value.
GL_LINEAR_MIPMAP_NEAREST
- Chooses the mipmap that most closely matches the size of the pixel being textured and uses the
GL_LINEAR
criterion (a weighted average of the four texture elements that are closest to the center of the pixel) to produce a texture value.
GL_NEAREST_MIPMAP_LINEAR
- Chooses the two mipmaps that most closely match the size of the pixel being textured and uses the
GL_NEAREST
criterion (the texture element nearest to the center of the pixel) to produce a texture value from each mipmap. The final texture value is a weighted average of those two values.
GL_LINEAR_MIPMAP_LINEAR
- Chooses the two mipmaps that most closely match the size of the pixel being textured and uses the
GL_LINEAR
criterion (a weighted average of the four texture elements that are closest to the center of the pixel) to produce a texture value from each mipmap. The final texture value is a weighted average of those two values.
- https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glTexParameter.xml
- GL_LINEAR나 GL_NEAREST로 설정하는 경우 밉맵을 사용하지 않는다.
- GL_NEAREST_MIPMAP_NEAREST는 성능이 좋고 Aliasing이 적다.
- GL_LINEAR_MIPMAP_NEAREST가 일반적으로 게임에서 많이 사용되는데,
더 좋은 필터링 결과와 다른 크기의 맵 레발 간에 밉맵선택이 빠르기 때문.
- 위의 GL_*_MIPMAP_* GL_TEXTURE_MIN_FILTER에만 적용이 가능하다.
GL_TEXTURE_MAG_FILTER는 GL_LINEAR 또는 GL_NEAREST여야 한다.
- Nearest 방식은 밉 레벨이 바뀌는 부분에 일그러진 구간이 보일 수 있으며, 이는 GL_LINEAR_MIPMAP_LINEAR 또는 GL_NEAREST_MIPMAP_LINEAR로 해결할 수 있으나, 추가 연산으로 오버헤드가 발생한다.
- GL_LINEAR_MIPMAP_LINEAR는 삼중선형 밉맵이라고도 하며 좋은 결과를 나타낸다.
댓글 없음:
댓글 쓰기