2018년 7월 31일 화요일

5.5.5-[3, 4] 밉맵(Mipmap), 밉맵 필터링


  1. 렌더링 성능과 퀄리티를 높이는 텍스쳐 기법
  2. 기존 밉맵을 사용하지 않을 때의 문제점
    1. 반짝거림 현상
      1. 렌더링 크기가 텍스쳐 크기보다 작은 경우. 
      2. 성능
  3. 밉맵이란?
    1. 여러 크기의 밉맵 텍스쳐를 준비하고, 현재에 가장 적합한 텍스쳐를 선택하는 기법
  4. 초기 설정
    1. glTexSubImage2D
      1. void glTexSubImage2D(GLenum target,
        GLint level,
        GLint xoffset,
        GLint yoffset,
        GLsizei width,
        GLsizei height,
        GLenum format,
        GLenum type,
        const GLvoid * data);
        1. level
          1. 0, 1, 2 ~ 순
          2. 밉맵을 사용하지 않을 경우 0으로 설정
  5. 밉맵 기본 레벨 및 최대 레벨 지정
    1. glTexParameteri
      1. void glTexParameteri(GLenum target,
        GLenum pname,
        GLint param);
    2. 예제
      1. // 기본 레벨을 0으로
      2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);

      3. // 최대 레벨을 4로
      4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4);
  6. 밉맵 필터링
    1. 텍스쳐 필터링의 종류
      1. 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.
      2. https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glTexParameter.xml
    2. GL_LINEAR나 GL_NEAREST로 설정하는 경우 밉맵을 사용하지 않는다.
    3. GL_NEAREST_MIPMAP_NEAREST는 성능이 좋고 Aliasing이 적다.
    4. GL_LINEAR_MIPMAP_NEAREST가 일반적으로 게임에서 많이 사용되는데,
      더 좋은 필터링 결과와 다른 크기의 맵 레발 간에 밉맵선택이 빠르기 때문.
    5. 위의 GL_*_MIPMAP_* GL_TEXTURE_MIN_FILTER에만 적용이 가능하다.
      GL_TEXTURE_MAG_FILTER는 GL_LINEAR 또는 GL_NEAREST여야 한다.
    6. Nearest 방식은 밉 레벨이 바뀌는 부분에 일그러진 구간이 보일 수 있으며, 이는 GL_LINEAR_MIPMAP_LINEAR 또는 GL_NEAREST_MIPMAP_LINEAR로 해결할 수 있으나, 추가 연산으로 오버헤드가 발생한다.
    7. GL_LINEAR_MIPMAP_LINEAR는 삼중선형 밉맵이라고도 하며 좋은 결과를 나타낸다.

댓글 없음:

댓글 쓰기