Files
obsidian-notes/1Project/GPU地形/地形优化.md
zzzisfunnyboy ab75441581
2025-11-28 08:44:02 +08:00

1.1 KiB
Raw Blame History

优化带宽(减少储存数据量

  • 一块地形为128个三角形每个三角形包含三个位置
    • 每个位置包含位置Vec3,法线Vec3,UV Vec2
      • 计算得出每个网格是12kb整个场景为192M
  • 优化uv储存
    • uv可以直接去掉使用网格模型空间下的坐标 / 8来代替
    • !Pasted image 20251111231745.png
  • 位置信息,可以优化掉position.xz只保留高度(没懂
    • 使用gl_VertexID(顶点索引)来生成位置
    • 使用floor和mod来确定x,z
      • position.x = flooar(gl_VertexID / 2.0);
      • position.z = mod(gl_VertexID, 2.0);
  • 去掉法线改为两个16整数使用俯仰角和偏航角来确定法线方向。虽然精度只有原来的一半但是对于法线来说足够了
  • 这些做完之后由12.9kb=>3kb
  • 使用三角形条带,除了第一个三角形之外,之后的每个三角形都可以较少两个顶点信息
    • 但只适合规整的网格

着色器执行很快,但是一直等待从内存读取更多的数据,所以造成瓶颈

使用批处理

LOD

使用foliage来掩盖每个细节层次的起始位置