ミップマッピングは2のべき乗でないテクスチャでどのように機能しますか?


12

最近のGPUはすべて非2のべき乗テクスチャをサポートしており、すべての機能が正常に機能すると聞いています。ただし、このようなシナリオでmip-mappingがどのように機能するかはわかりません。誰か説明できますか?

回答:


12

次のミップマップサイズを計算するには、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
この答えとジョン・カルスビークの答えの間に意見の相違はありますか?実装は両方の説明と一致しますか?そうでない場合は、どちらか(または両方が使用されている2つの異なる手法である場合は両方)の参照を用意しておくと便利です。
trichoplax

4

それを考える1つの方法は、グラフィックスカードはしばしば、各方向に2の累乗になるまでそれらをパディングするだけで、2のべき乗でないテクスチャを実装することです。これにより、タイリングやハードウェアフィルタリングなど、ほとんどのことが「機能する」ようになります。変更する必要があるのは、テクスチャ座標から画像座標への変換だけです。

そのように実装されている場合、ミップマッピングの実行方法は明らかです。変更はありません。パディングなしで2のべき乗以外のテクスチャをサポートするGPUを使用している場合でも、ミップマップレベルは「パディング」になります。たとえば、3x3テクスチャは、lod 1として2x2テクスチャを持ちます。


この答えとネイサンリードの答えに意見の相違はありますか?実装は両方の説明と一致しますか?そうでない場合は、どちらか(または両方が使用されている2つの異なる手法である場合は両方)の参照を用意しておくと便利です。
trichoplax

1
@trichoplax「2のべき乗ではないテクスチャに対して高品質のmipを生成するのは少し難しい」というNathanの主張は、少なくとも少し意見が合わないと思います。おそらくそれだけで、より複雑になります。
ジョンカルスビーク

1
ここでの問題は、テクセルの論理的な位置とメモリ内の「物理的な」レイアウトを混同していることだと思います。1)ピクセルは個別のアイテムです。つまり、整数の次元が常に必要です。したがって、奇数の次元を縮小するには、切り上げまたは切り下げを行う必要があります。Nx1または1xNテクスチャに到達したら切り上げる必要があるため、常に切り上げることは理にかなっています。2)物理アドレスにレイアウトする場合、テクスチャを「便利な」「ストライド」サイズにパディングすることは珍しくありません。これは次の2つの理由で行われる可能性があります。a)ハードウェアをより安価にする可能性、およびb)P.of.2、モートン注文が簡単な場合。
サイモンF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.