Vulkan草叶渲染中顶点排序引发视角相关性能异常问题
草地渲染性能异常问题
我正在渲染一片草地,每片草叶的xz坐标存储在实例化顶点缓冲区中。最初使用Halton序列生成坐标,缓冲区中的位置呈随机分布。之后改用Z曲线分块生成坐标以提升数据局部性,为视锥体剔除做准备。但即便尚未实现视锥体剔除,性能在特定视角下有所提升,相反视角的性能却下降了。
为验证这一现象,我回到使用Halton序列生成点的旧分支并对其进行排序,得到如下结果:
| 排序方式 | 朝向-x视角 | 朝向x视角 | 朝向-z视角 | 朝向z视角 |
|---|---|---|---|---|
| 无排序 | ~25 FPS | ~25 FPS | ~25 FPS | ~25 FPS |
a.x < b.x | ~15 FPS | ~30 FPS | ~20 FPS | ~20 FPS |
a.x > b.x | ~30 FPS | ~15 FPS | ~20 FPS | ~20 FPS |
a.z < b.z | ~20 FPS | ~20 FPS | ~15 FPS | ~30 FPS |
a.z > b.z | ~20 FPS | ~20 FPS | ~30 FPS | ~15 FPS |
测试运行在Intel显卡(mesa驱动)上,同时使用Vulkan Memory Allocator。
回到Z曲线实现并添加视锥体剔除(仅将视锥体内的草叶位置写入缓冲区)后,性能无变化。而打乱草叶顺序则“解决”了问题,性能回到稳定但较低的水平。
需要说明的是:除开启视锥体剔除的情况外,我未基于视图矩阵的值进行任何条件操作,仅执行常规的矩阵/向量乘法。
请问造成这一现象的原因可能是什么?
内容的提问来源于stack exchange,提问作者Alex V.
相关产品推荐
相关产品推荐

