#Mipmap

GripNewsGripNews
2025-05-14

🌘 紋理採樣的mipmap選擇詳解
➤ 揭開GPU紋理採樣的神祕面紗
pema.dev/2025/05/09/mipmaps-to
本文深入探討了GPU在紋理採樣時如何選擇mipmap級別。文章首先簡要介紹了mipmap技術及其解決紋理異化問題的原理,並指出標準的紋理採樣函數`Texture2D.Sample()`會自動選擇適當的mipmap級別。然而,作者認為這解釋不夠深入,因此進一步探討了GPU具體如何做到這一點。文章接著解釋了片段著色器如何利用像素四邊形計算屏幕空間的偏導數`ddx()`和`ddy()`,並揭示了`Texture2D.Sample()`實際上是`Texture2D.SampleGrad()`的簡化形式。最終,作者根據GLES3.0規格,闡述了mipmap級別與偏導數之間的數學關係,即mipmap級別等於scale factor的以2為底的對數,其中scale factor基於u和v座標的偏導數的計算。
+ 這篇文章寫得非常棒,深入淺出地解釋了mipmap選擇的機制

Matteo Bilotta :fediverso:byloth@mastodon.uno
2024-11-14

"Come lo feci" di @byloth Von Frankenstein

#TileMap & #Mipmap: non vanno d'accordo...
Online è una cosa risaputa; «Everyone knows it!» - mi han risposto, in un forum!

«#YesBut... Why?» - e cadeva il silenzio...

Qualcuno ha provato a darmi delle risposte che -sul momento- ho preso per buone... In seguito, rivelatesi errate!

Ci ho messo 2 settimane...
Ma potrò lasciare ai posteri il mio retaggio: come usare tilemap e mipmap insieme.

discourse.threejs.org/t/seams-

«Si può fare!» 🤯

#BDDGZProject

Fermo immagine dal film "Frankenstein Junior" di Mel Brooks del 1974.

Un primo piano di Gene Wilder che -nel film- interpreta Frederick, il nipote del famoso barone Von Frankenstein, durante l'iconica scena in cui esclama la fatidica frase: «Si può fare!».
Matteo Bilotta :fediverso:byloth@mastodon.uno
2024-11-13

Ok, ma...
Di preciso, cos'è una #Mipmap?

Una Mipmap non è nient'altro che un insieme di immagini -progressivamente sempre più piccole e meno definite- che vengono calcolate a partire dalla #Texture principale.

La #GPU utilizza queste immagini per colorare i pixel in maniera differente. Semplificando molto: più il "pixel" si trova vicino al POV e più userà un'immagine grande e definita.
Più il "pixel" sarà distante e più userà quelle piccole e sfocate.

it.wikipedia.org/wiki/MIP_map

Un esempio di Mipmap.

Nella metà alta / sinistra dell'immagine si trova una fotografia di un satellite.
Accanto a questa -su entrambi gli assi- sono presenti delle foto dello stesso soggetto ma con la dimensione della coordinata di riferimento dimezzata.
A loro volta, accanto a quest'ultime, sono presenti altre foto su -di nuovo- entrambi gli assi con le dimensioni nuovamente dimezzate.

Viene facile intuire come -l'uso di questa Mipmap- occupi 4 volte la memoria che sarebbe stata utilizzata dalla texture singola, in sé.
Un costo da considerare, per aver una resa grafica migliore.

Esistono -comunque- altri algoritmi di Mipmapping che possono ridurre considerevolmente l'uso della memoria.
Matteo Bilotta :fediverso:byloth@mastodon.uno
2024-11-13

Ma perché -di preciso- reputo così tanto importante l'uso delle #Mipmap?
Non posso -semplicemente- sbattermene e non usarle?

Certo! Potrei farlo, ovviamente!

MA...
1) La resa grafica diventa NETTAMENTE migliore, se utilizzate.
2) Ho delle manie di perfezionismo; se so che una cosa può esser fatta meglio, DEVO farla meglio per forza. Ahime... 🥲

In allegato, #Minecraft a confronto con e senza l'uso delle Mipmap.
Sono sicuro sarà più chiaro perché insisto così tanto sul loro uso... 😉

Una schermata di Minecraft, renderizzata senza l'uso delle Mipmap.

Si può notare come vengano generati degli artefatti e dei pattern ripetitivi all'aumentare della distanza degli oggetti stessi visualizzati.Una schermata di Minecraft, renderizzata tramite l'uso delle Mipmap.

Si può notare come, all'aumentare della distanza degli oggetti visualizzati, la texture su essi applicata sia progressivamente meno dettagliata e sempre più "sfocata".
Questo contribuisce -in maniera quasi paradossale- ad aumentare la resa visiva globale, a differenza di quanto accade laddove non vengano usare le Mipmap.
Matteo Bilotta :fediverso:byloth@mastodon.uno
2024-11-13

Migrazione a #ThreeJS.

Il primo problema è che -la libreria- non dispone di un componente già pronto per la gestione delle #TileMap (a differenza di #BabylonJS).

Online non ho trovato nulla che facesse al caso mio...
Mi metto -quindi- di buona lena ad implementarlo.

Un banale piano, una texture da caricare e qualche riga di #TSL da scrivere... E le famose #Mipmap?

Le abilito ma -anche il mio #Shader, come quello di Babylon- non le gestisce correttamente.

Qui il risultato. 😞

#BDDGZProject

We’re excited to announce the release of #AMD Compressonator 4.4!

The latest version includes:

🗜️ AVX-512 support in Compressonator Core
🗜️ A new #mipmap generation option in Compressonator CLI

Head over to #GPUOpen to find out more: gpuopen.com/learn/compressonat

🗜️ Introducing #Compressonator v4.3! 🗜️

Our latest release features:

✨ Support for AMD's new Brotli-G #lossless #compression
✨ Multi-texture #mipmap generation
#BCn transcoding

Plus more - take a look at our new blog on #gpuopen:

gpuopen.com/learn/compressonat

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst