Mip-Mapping很重要
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也很严重。。