着色器:包装4纹理到一个单一的RGBA – 较慢?

我在iOS移动设备上遇到了一些非常奇怪的事情。 我有4个纹理,经过一些分析后,似乎做了四个单独的灰度纹理读取比从单个打包纹理中读取相同的纹理更快:

#ifdef COMBINED_METALLIC_ROUGHNESS_AO_EMISSION_TEXTURE fixed4 mraeTex = tex2D(_MetallicRoughnesAOEmissionTex, IN.uv_MainTex); fixed metallic = mraeTex.r; fixed roughness = mraeTex.g; fixed ambientOcclusion = mraeTex.b; fixed3 emission = mraeTex.a * albedo; #else fixed metallic = tex2D(_MetallicTex, IN.uv_MainTex).r * _Metallic; fixed roughness = tex2D(_RoughnessTex, IN.uv_MainTex).r * _Roughness; fixed ambientOcclusion = tex2D(_AmbientOcclusionTex, IN.uv_MainTex).r; fixed3 emission = tex2D(_EmissionTex, IN.uv_MainTex).rgb; #endif 

看起来,第二种方法由于某种原因而更快。 读取的单个纹理应该比单独进行4次纹理读取要快吗? 我错过了什么吗?

谢谢!

根据PowerVR的说法,“低频vector的组件昂贵,应该避免”。 资料来源: https : //stackoverflow.com/questions/7251772/what-exactly-constitutes-swizzling-in-opengl-es-2-0-powervr-sgx-specifically