魔兽纹理的一图两用

来源:互联网 发布:xampp linux 64位下载 编辑:程序博客网 时间:2024/04/19 12:46

    近来尝试导入魔兽世界的模型,遇到了不少意料之外的事情。比如.m2的顶点竟然是预乘了bone offset矩阵的,让我花了不少时间在找这个矩阵上,结果它根本没有,不需要。最大的意料之外是它一张纹理两种用途,它在纹理的全透明部分又放置了其它纹理内容。原理上很好理解,反正RGBA四个通道是独立的,当A等于0时,也就是完全透明时,RGB的值就没意义了;所以这些RGB完全可以用来存些别的值,只要忽略A就可以使用它们。

    在引擎里支持这种情况倒是不难,只要可以选择性的忽略alpha通道就可以了。但毕竟我只是在导入它的模型,而不是要完全支持它的功能,是否要支持这种trick呢?为什么要犹豫,因为专业游戏里的trick太多了,为了减少内存开销,提高性能,它们经常在美工资源上做各种各样的技巧性处理。这些trick又往往都是在特定硬件水平上、针对特定游戏的特殊优化,不具有通用性。比如,当今最常用的一个trick是将法向贴图和高光贴图合并到一张纹理,既节约了显存又提高了速度,但这方法不具有通用性,如果同时又有自发光贴图等,就需要不同的合并方式。这其中一些trick可以由程序预处理生成,而不需要美工制作时就考虑,有些则必须美工周全地考虑到。

    这个在透明区域存储其他内容的trick就是美工必须自己考虑的。一方面这对美工的经验水平要求较高,另一方面和当今主流工具相悖。暴雪的美工水平自然不用说,魔兽世界里的模型的纹理大多是256x256以下的单张纹理,光这一点就很牛X。但为了使这么小的纹理能提供足够的细节,它的纹理上的各块区域是经常重复应用到模型上的不同区域的。加上透明区域的两用,最大化了纹理的利用率,使得同一时刻装载的纹理量得到有效压缩。这意味着在造型设计时就需要考虑到纹理子区域的复用,之后万一需要修改调整,要么受限于已有的复用方案,要么需要推倒重来。

    另一方面,活用alpha通道的trick越来越难于应用,因为主流的图像工具如Photoshop不再支持独立alpha通道的导入和导出。如前所述,当A为0时,RGB的值是无所谓的,这对web图像而言是可以选择特殊的值以便提高压缩率的,这时A为0的像素的RGB值不再保持原本的值,不能再用于存储别的信息。常用的PNG格式是其中之一,现在只有老版的SuperPNG插件还能导入导出带独立alpha通道的PNG。TGA在Photoshop 7.0也被“优化”了,但之后由于抗议众多,在7.01版又恢复了独立alpha通道的支持,这也是如今游戏业多用TGA格式的一个原因。

原创粉丝点击