一、纹理图的选择
选择纹理图时,处于性能的考虑,一般需要注意以下几点:
- 尽量不要使用特别大的纹理图,同时纹理图的尺寸应该为2的N次方,这样不仅能保证所有的设备都识别该纹理,而且计算速度也是最快的。
- 在游戏或可视化应用中,总是会遇到许多非常小的纹理,一种比较好的办法是把这些纹理组合成一个比较大的纹理,这样驱动程序在加载纹理的时候,仅仅需要加载一次就够了。例如,开发人体模型,可以将一个人的头发、脸、眼睛等组合为一个纹理。
- 使用压缩纹理。压缩纹理比非压缩纹理具有更快的运算速度和更小的存储空间要求,而且很容易使用图形硬件纹理缓冲。因此,这样能够显著地提高渲染性能,特别适合3D应用中纹理数量较大的场合。能采用压缩纹理时一定要采用,很多大厂的游戏中都是如此。
二、纹理图使用中需要注意的其他问题
使用纹理时,不应该一拿到就直接使用,需要对纹理图做一些必要的处理后再使用。这样就能很好的避免资源浪费。出于性能考虑,一般需要注意以下几点。
- 对于大场景贴图而言,进行纹理采样时,要尽量使用mipmap,虽然这样会多占用一些内存,但是这样有可能提高纹理采样的效率,同时会得到更好的画面效果。
- 进行纹理采样时,若最近点采样时就能满足视觉效果的要求,就不要使用线性采样。由于线性采样算法比最近点采样算法复杂很多,其执行效率要比最近点采样低很多。
- 对于需要较小的纹理图平铺到一个较大平面上的情况,不应该采用一堆小的纹理矩形组合的方式,而应该采用一个大的纹理矩形结合VK_SAMPLER_ADDRESS_MODE_REPEAT采样方式来解决。
摘自《vulkan开发实战详解》吴亚峰 著