问题描述
我想知道在使用128x512的纹理与512x512的纹理之间的权衡是什么。
纹理是滑板甲板(自然是矩形),因此我最初使纹理具有使甲板正确显示的长宽比。
我想使用.basis纹理,并阅读“将代码转换为PVRTC1(适用于iOS)需要 square 的二次幂纹理。”在Three.js BasisTextureLoader documentation上。
因此,我试图权衡使用128x512作为JPG或PNG与512x512基本纹理之间的加载时间+性能之间的权衡。
我最好的猜测是128x512将占用更少的内存,因为更少的纹理像素,但是我也读到GPU喜欢方形纹理,并且基础更加优化了GPU,所以我在这里选择哪条路很费劲。
对于这两个选项之间的性能折衷的任何知识都将受到高度赞赏,尤其是通常对基础纹理的好处的解释。
解决方法
当您要求texture's .minFilter
执行mip映射时,Three.js实际上仅需要2的幂。在这种情况下,GPU将使several copies of the texture的分辨率是前一个分辨率的一半(512、256、128、64等),这就是为什么它要求2的幂的原因。默认值确实执行mip映射,您可以在“缩小过滤器”下看到备用.minFilter
值in this page。 Nearest
和Linear
不需要P.O.T.纹理,但是当按比例缩小纹理时,您将获得像素化伪像。
在WebGL中,您可以毫无问题地使用512x128,因为这两个维度都是2的幂。性能方面的权衡是,您节省了一堆无论如何都会被拉长的重复像素。