我正在使用具有法线贴图,粗糙度贴图,漫反射贴图和AO贴图的纹理数组渲染大的分层地形。但是,每个地形都太大而无法进行详细纹理处理(128x128),因此我通过缩放UV并使用GL_REPEAT来重复每个纹理。当我使用比例尺时,FPS从170下降到100。NvidiaNsight报告纹理缓存的使用效率不高。
相对于:
这是着色器的重要部分:
// Uses cache ineffectively
// vec2 coord = data.Texcoord * 16.0;
vec2 coord = data.Texcoord;
mat.Diffuse = (texture(TerrainAtlas, vec3(coord, 0)).rgb * alpha.r + texture(TerrainAtlas, vec3(coord, 5)).rgb * alpha.g);
mat.Normal = data.TBNMatrix * (texture(TerrainAtlas, vec3(coord, 1)).rgb * alpha.r + texture(TerrainAtlas, vec3(coord, 6)).rgb * alpha.g);
mat.Metalness = 0;
mat.Roughness = texture(TerrainAtlas, vec3(coord, 1)).r * alpha.r + texture(TerrainAtlas, vec3(coord, 7)).r * alpha.g;
mat.AO = texture(TerrainAtlas, vec3(coord, 2)).r * alpha.r + texture(TerrainAtlas, vec3(coord, 8)).r * alpha.g;
mat.Alpha = texture(TerrainAtlas, vec3(coord, 0)).a;
在有效使用缓存的情况下(是否无需通过增加纹理大小来手动重复),有什么方法可以重复纹理?
答案 0 :(得分:0)
我将图素纹理的尺寸从1024x1024减小到256x256,这似乎可以解决问题。原来,GPU(具有2048 KB L2缓存的GTX 1080)每次重复都耗尽了缓存空间。