Photoshop DDS转化插件的一些问题
最近被老外提NORMAL效果不够好,建议我们使用DXT5来压缩NORMAL,而不是DXT1,我很纳闷,如果不是用DXT5NM,DXT1和DXT5效果应该是一样的才对,难道他指BC5,但BC5支持也还不广泛。后来还特地将原始TGA NORMAL分别压成DXT1和DXT5对比了下,确实DXT5比DXT1好很多,真奇怪,都用的RGB来存储XYZ,怎么会有差别了,当时也没多想,后来有空我测试了下,发现PS插件原来是这样压缩DXT1和DXT5的,如果原始图含RGBA 4个通道,你选择DXT1 WITH 1BIT ALPHA将它当作带ALPHA压缩,这样4色中有1色会被设置成完全无用的黑色,所以如果使用PS DXT PLUGIN存储DXT1时,如果没有ALPHA需求,一定将ALPHA通道给删了。后来只存储RGB 3通道的原图,则DXT1和DXT5效果完全一样。如果追求比较好的效果只能使用DXT5NM,就是将X分量存于DXT5独立压缩的A通道上,而将Y分量存储在有6bit精度的G通道上,同时将RB设置为相同值避免co-compression artifacts,如果是DX10可以考虑使用高精度,且体积小的BC5压缩方式,就是ATI的3Dc,另外还有个trick,我们即可用DXT1存也可以用DXT5存,可以保证shader代码不用变。如果存DXT1可以将X存入R通道,而Y存入G通道,不要ALPHA;如果存成DXT5格式,则将X存入ALPHA,Y存进G通道,且将R通道设置为1,这样shader中的解压代码都是:
normal.x = R * Alpha;
normal.y = G;
normal.z = sqrt(1 - x^2 - y ^2);