6

一、切换着色器效果哪种方式更好?1.使用大型着色器程序,并在着色器程序中统一使用if/else子句来使用差异效果。2.在调用之间切换程序。

二、用大纹理好还是用几个小纹理好?并且上传纹理成本很贵,绑定纹理怎么样?

4

1 回答 1

13

好吧,最好写一些性能测试并尝试一下,但总的来说。

  • 小着色器比大着色器快。
  • 1 纹理比许多纹理更快
  • 上传纹理很慢
  • 绑定纹理很快
  • 切换程序很慢,但通常比将 2 个小程序合并为 1 个大程序要快得多。

特别是片段着色器每帧执行数百万次。1920x1080 显示器有 200 万像素,因此没有过度绘制仍然意味着您的着色器每帧执行 200 万次。对于每帧执行 200 万次或每秒执行 1.2 亿次的任何事情,您的目标是每秒 60 帧,越小越好。

至于纹理,mips 比没有 mips 快,因为 GPU 有一个纹理缓存,如果它接下来需要的像素接近它之前读取的像素,它们很可能已经在缓存中。如果它们离得很远,它们就不会在缓存中。这也意味着从纹理中随机读取特别慢。但大多数应用程序通过纹理相当线性地读取。

切换程序的速度很慢,以至于按照它们使用的程序对模型进行排序,以便您首先绘制所有使用程序 A 的模型,然后是使用程序 B 的所有模型,这通常比以随机顺序绘制它们要快。但是还有其他的效果表现。例如,如果一个大模型遮挡了一个小模型,最好先绘制大模型,因为小模型将无法通过深度测试(z 缓冲区)并且不会对任何像素执行其片段着色器。所以这是一个权衡。您真正能做的就是测试您的特定应用程序。

此外,以正确的方式进行测试也很重要。 http://updates.html5rocks.com/2012/07/How-to-measure-browser-graphics-performance

于 2012-07-29T18:52:12.483 回答