Performance 通过最小化着色器/状态更改优化WebGL性能的指南
我试图了解WebGL用于渲染大型内部场景的实用性,包括100K的三角形。这些三角形分布在许多对象上,场景中有许多材质。另一方面,没有运动部件。而且材质往往相当简单,主要基于纹理贴图。有很多纹理贴图共享。。例如,场景中的所有椅子将共享一个公共地图。还有一些多纹理-一种材质中最多覆盖三种纹理 我做了一些实验和阅读,发现在渲染过程中频繁切换材质会减慢速度。例如,假设每次显示对象时都设置了新材质,则具有200K三角形的场景将具有显著的性能差异,这取决于有10个还是1000个对象 因此,如果性能很重要,那么场景应该按材质进行排序,以最小化材质切换。我要寻找的是关于如何考虑各种状态变化的开销的指导方针,以及我从哪里得到最大的回报。比如说,Performance 通过最小化着色器/状态更改优化WebGL性能的指南,performance,opengl-es,3d,webgl,opengl-es-2.0,Performance,Opengl Es,3d,Webgl,Opengl Es 2.0,我试图了解WebGL用于渲染大型内部场景的实用性,包括100K的三角形。这些三角形分布在许多对象上,场景中有许多材质。另一方面,没有运动部件。而且材质往往相当简单,主要基于纹理贴图。有很多纹理贴图共享。。例如,场景中的所有椅子将共享一个公共地图。还有一些多纹理-一种材质中最多覆盖三种纹理 我做了一些实验和阅读,发现在渲染过程中频繁切换材质会减慢速度。例如,假设每次显示对象时都设置了新材质,则具有200K三角形的场景将具有显著的性能差异,这取决于有10个还是1000个对象 因此,如果性能很重要,那
- 例如,
,gl.useProgram()
,gl.uniformMatrix4fv()
gl.drawerelements()
- 我是否应该尝试编写ubershader来最小化着色器切换
- 我是否应该尝试聚合几何体以最小化
调用的数量gl.draurements()
这是以最新的硬件为前提的。对于低端平台(iPad?)或英特尔GMA芯片,瓶颈将出现在其他地方(如软件顶点处理) 谢谢,这有点帮助。至少我学会了一个新的艺术术语:“批量”。谷歌搜索“nvidia”批次,批次,批次”会带来有用的东西。很明显,游戏社区已经为这件事苦恼了很长时间。