在Three.js材质中使用矩形纹理与方形纹理的性能折衷吗?特别是.basis纹理

问题描述

我想知道在使用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映射,您可以在“缩小过滤器”下看到备用.minFilterin this pageNearestLinear不需要P.O.T.纹理,但是当按比例缩小纹理时,您将获得像素化伪像。

在WebGL中,您可以毫无问题地使用512x128,因为这两个维度都是2的幂。性能方面的权衡是,您节省了一堆无论如何都会被拉长的重复像素。