MipMap這個東東,記得我除了最早在DX9龍書上了解了其基本概念后,以后便再沒接觸過,因為從創建到使用都是硬件一手包辦,所以這個知識點很容易被遺忘和忽視。這幾天空閑時恰好發現了一點MipMap引起的問題,就專門看了下,發現很多東西原來我之前根本就沒理解對。我之前竟然傻逼的以為MipMap是用來加速渲染的。。。其實它是用來改善渲染走樣的,即提升畫面質量。
相關的資料我看了下面這幾個,感覺很不錯:
《3D編程大師技巧》12章Mip Mapping and Trilinear Texture Filtering 一節
《Real-Time Rendering》3rd第6章專門講了放大縮小走樣相關
http://blog.sina.com.cn/s/blog_5f99aed00100d7pw.html
http://www.gamasutra.com/view/feature/3301/runtime_mipmap_filtering.php
http://www.lihuasoft.net/article/show.php?id=4509
看了最后一個鏈接的文章后,我終於明白了Ogre的Terrain Sample中有兩句代碼是什么意思。。。
MaterialManager::getSingleton().setDefaultTextureFiltering(TFO_ANISOTROPIC); MaterialManager::getSingleton().setDefaultAnisotropy(7);
即各向異性過濾的用處,建議讀這篇文章。下面是各向異性效果的對比:
DX11未開啟各向異性過濾
DX11開啟16x各向異性過濾
下面貼一些有無MipMap的比較圖:
地形渲染,有MipMap
DX11,關閉Mipmap,可以看出越往遠越有麻點的感覺,而且相機移動會有"sparklies"效果
DX11,開啟MipMap
DX11,關閉MipMap,遠處已經完全失真了
我也在自己的軟渲中加入了非常弱智的MipMap。生成是采用了簡單的box-filter,mip選擇是根據相機空間z值,比如每隔幾百米增加一個mip層。。。渲染也是選擇單層mip,而不是Trilinear。。
下面這幅圖顯示了采用各層mip的分布,效果太差了,其實跟沒mipmap差不多。。。Mip-banding也很嚴重。。