对于数据压缩,其实就是把浮点的32位精度,改用16位定点数来表达。数据
例如0.0 = 0,1.0 = 32767,-1.0 = -32767思考
这是一种有损压缩,会丢失一些精度,通常状况下是能够接受的。浮点数
当浮点数是-1至+1的范围,即-32767至+32767。压缩
这时问题出现了,若是浮点的范围是几万,那么一些浮点若是是小数位后几位的数值,压缩后会变成0。模型
例如:0.0123,在上述状况下,最终存在unsigned short中实际上是0或者1,解压后也是0。
发现问题的原由是手上有一个奇葩的模型数据,它的某一组UV居然有3千万的大小,而其余的UV则是正常范围的几十或者是0-1。
压缩后,出现大面积的纹理走样。
经过思考后,发现缘由是美术手上有一张大小多是几十的贴图,他想贴到一个几十万甚至几百万单位大小的模型上,因而就简单粗暴得将UV值设置为很大。
可是其实想想,即便再大一点的贴图,例如1000x1000大小的图,这时使用3千万的UV数值,这张图最后在屏幕上显示时只会变成纯色。
因而解决办法是在导出时,若是发现有这种奇葩数值,首先是红色LOG警告,而后将UV数值钳制在100之内,这样就不会由于变态数值而影响到正常的数值了。