【发布时间】:2019-12-06 06:06:38
【问题描述】:
我正在使用具有法线、粗糙度、漫反射和 AO 贴图的纹理阵列渲染大型分层地形。然而,每块地形都太大而无法详细纹理 (128x128),所以我通过缩放 UV 并使用 GL_REPEAT 重复每个纹理。当我使用比例尺时,FPS 从 170 下降到 100。Nvidia Nsight 报告纹理缓存使用无效。
相对于:
这里是着色器的重要部分:
// 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;
有没有办法在有效使用缓存的同时重复纹理(无需手动增加纹理大小)?
【问题讨论】:
标签: opengl caching glsl textures