밉 매핑은 2의 거듭 제곱이 아닌 텍스처에서 어떻게 작동합니까?


12

최근 GPU는 모두 2의 제곱이 아닌 텍스처를 지원하며 모든 기능이 작동한다고 들었습니다. 그러나 그러한 시나리오에서 밉 매핑이 어떻게 작동하는지 이해하지 못합니다. 누군가 설명 할 수 있습니까?

답변:


13

규칙은 다음 밉맵 크기를 계산하기 위해 2로 나누고 가장 가까운 정수로 내림합니다 (0으로 내림하지 않는 경우 대신 1 임). 예를 들어 57x43 이미지에는 다음과 같은 밉맵이 있습니다.

level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1

UV 매핑, LOD 선택 및 필터링은 2의 거듭 제곱 크기와 동일한 방식으로 작동합니다.

2의 제곱이 아닌 텍스처에 대해 양질의 밉을 생성하는 것은 약간 까다로울 수 있습니다. 모든 경우에서 다운 샘플링을 위해 2x2 픽셀 상자를 평균화 할 수는 없기 때문입니다. 그러나 2x2 박스 필터는 그다지 좋지 않으므로 텍스처 크기에 관계없이 Mitchell-Netravali와 같은 더 나은 다운 샘플링 필터를 사용하는 것이 좋습니다.


1
이 답변과 John Calsbeek의 답변 사이에 불일치가 있습니까? 구현이 두 설명과 모두 일치합니까? 그렇지 않은 경우 하나 또는 다른 참조를 사용하는 것이 유용합니다 (또는 두 기술이 모두 사용중인 경우 둘 다).
trichoplax

4

그것을 생각하는 한 가지 방법은 그래픽 카드가 종종 각 방향으로 2의 거듭 제곱이 될 때까지 패딩함으로써 간단히 2의 거듭 제곱이 아닌 텍스처를 구현한다는 것입니다. 예를 들어, 타일링 및 하드웨어 필터링과 같은 대부분의 작업은 "정상 작동"합니다. 변경해야 할 유일한 것은 텍스처 좌표에서 이미지 좌표로의 변환입니다.

그렇게 구현하면 밉 매핑을 수행하는 방법이 분명합니다. 변화가 없습니다. 패딩없이 2의 제곱이 아닌 텍스처를 지원하는 GPU가 있더라도 밉맵 레벨은 "패딩"으로 끝납니다. 예를 들어 3x3 텍스처는 lod 1과 같은 2x2 텍스처를 갖습니다.


이 답변과 Nathan Reed의 답변 사이에 불일치가 있습니까? 구현이 두 설명과 모두 일치합니까? 그렇지 않은 경우 하나 또는 다른 참조를 사용하는 것이 유용합니다 (또는 두 기술이 모두 사용중인 경우 둘 다).
trichoplax

1
@trichoplax 나는 "2의 거듭 제곱이 아닌 텍스처에 대해 좋은 품질의 밉을 생성하는 것이 조금 까다로워진다"고 Nathan의 주장은 우리의 대답이 적어도 약간 동의하지 않는다고 생각합니다. 그것만으로도 더 정교해질 가치가 있습니다.
John Calsbeek

1
여기서 문제는 텍셀의 논리적 위치와 메모리의 "물리적"레이아웃을 혼동하고 있다는 것입니다. 1) 픽셀은 불연속적인 아이템입니다. 즉, 항상 정수 차원이 필요하므로 홀수 차원을 축소하면 반올림하거나 반올림해야합니다. Nx1 또는 1xN 텍스처에 도달하면 반올림해야하기 때문에 항상 반올림하는 것이 좋습니다. 2) 물리적 주소로 배치 될 때, 텍스처를 "편리한" "보폭"크기로 채우는 것은 드문 일이 아닙니다. a) HW를 더 저렴하게 만들 수 있으며 b) Morton 주문이 쉬운 경우 HW를 더 저렴하게 만들 수 있습니다.
Simon F
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.