【问题标题】:Repeating a texture with GL_REPEAT without thrashing cache使用 GL_REPEAT 重复纹理而不破坏缓存
【发布时间】: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


    【解决方案1】:

    我将可平铺纹理的大小从 1024x1024 减小到 256x256,这似乎起到了作用。结果表明 GPU(GTX 1080 和 2048 KB 二级缓存)每次重复都会耗尽缓存空间。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 2012-07-03
      • 1970-01-01
      • 2012-03-04
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多