normalMap的DDS压缩

关于normal map的dds压缩,有一张图可以说明问题:


可以注意到普通的dtx5压缩后,那些颗粒的光照细节丢失得比较厉害,同时栅格现象也很严重。

同时可以看到DXT5_NM在相同文件大小的情况下,细节保存得不错。

 

使用Swizzled DXT5格式:基本上还是DXT5格式,但是把X值放到A,把Y值放到G,R/B channel可忽略,理由是DXT5压缩特性使得A/G channel压缩品质比较高。品质会比直接把DXT5存XYZ的方式好很多。

使用3Dc:目前只有AMD(ATI)的GPU支援。效果应该比Swizzled DXT5好。(由于手边沒有ATI的卡,所以无从比较)

 

The DXT1 compressed normal map on the right shows noticeable
blocking artifacts compared to the original normal map on the left.

 

The DXT5 compressed normal map on the right
compared to the original normal map on the left.


The DXT5 compressed normal map with re-normalization on
the right compared to the original normal map on the left.

 

此时引入关键字:3Dc dxt5_nm swizzle

我在D3D里没看到有对DXT5_NM的直接支持,在使用nvtt生成dxt5_nm格式的normalMap,因为xy=ag,r=1,所以颜色是桔黄的。

 


shader中作相应处理

float3 fvNormal;
fvNormal.xy 
= (tex2D( normalMap, texCoord ).ag * 2.0f - 1.0f);
fvNormal.z = sqrt(1.0 - dot(fvNormal.xy, fvNormal.xy));


渲染效果 

 

链接:

http://codefield.blogspot.com/2007/04/normal-map_6771.html 

http://www.ozone3d.net/tutorials/bump_map_compression_p3.php#z_generation 

http://code.google.com/p/nvidia-texture-tools/wiki/NormalMapCompression 

http://developer.nvidia.com/object/real-time-normal-map-dxt-compression.html 

posted @ 2011-03-18 18:19  千里马肝  阅读(4565)  评论(2编辑  收藏  举报