javascript - WebGL 基准 - 我应该创建什么样的测试?

标签 javascript opengl opengl-es benchmarking webgl

(我不确定这是否应该在 https://softwareengineering.stackexchange.com/ 上,如果您认为是,请评论)

我即将为我的学士论文创建 WebGL 实现的基准。我不确定我应该创建什么样的测试,我是否应该只测量每秒的帧数,如果我可以获得一些其他有用的数据来进行基准测试......

目前我只是想这样的测试:

  • 1 个单色物体
  • 1 个多色物体
  • 1 个纹理对象
  • 1 个带有混合的纹理对象
  • 1 个带有闪电的纹理物体
  • 1 个带多个照明点的纹理对象
  • 将 1 个场景渲染为纹理并将其用于另一个对象
  • 1个模型动画
  • 包含更多对象的所有测试:50、500、5000
  • 每次渲染更改着色器/程序(一次、两次、多次)

这将导致 40 个不同的测试,但我不确定这些是否是对性能的重要测试。

一位 friend 建议在复杂着色器上进行测试,但由于着色器在图形硬件上运行,因此与 Java 桌面应用程序应该没有区别,对吧?

无论如何,我的感觉是,JavaScript 的性能是 WebGL 的主要瓶颈。

更新

我终于完成了测试。在讨论基准应该如何工作之后,我创建了以下内容:http://martin.cyor.eu/benchmark

最佳答案

我同意@timday 的观点,即您应该将调查偏向于“真实”的事物,并且正如您在评论中所建议的那样,您可能希望故事是关于在桌面应用程序还是基于浏览器的应用程序之间做出决定。

这正是我现在正在做的事情。我的客户有一个当前在 Windows 桌面上运行的可视化应用程序。他们的典型场景有 500,000 个三 Angular 形、大量纹理和透明度。目前,他们的用户不愿意安装查看器 - 他们倾向于在系统管理员控制他们计算机上安装的内容的公司环境中工作。一些用户更愿意在他们的 iPad 上运行可视化,而查看器无论如何都不会运行。所以我的客户想知道 WebGL 是否会解决他们的平台问题——没关系,目前还没有浏览器正式支持 WebGL,而且 IE 和 iPad 都没有宣布任何类型的支持。

请记住,您所做的任何基准测试都相对没有意义,因为您测量的是一个移动的目标。浏览器制造商正在努力实现 WebGL,并且他们经常更新他们的测试版。他们不仅致力于以一致的方式实现 WebGL,而且还必须担心浏览器安全问题和整体管道流程。 This video谈论一些问题(并让您了解要研究的内容)。此外,性能可能会因您的操作系统和图形硬件而异。

正如您所指出的,一旦 WebGL 在图形硬件中运行,它的运行速度应该与桌面应用程序一样快。您的基准测试应该尝试确认这一点,然后您应该尝试衡量由于在浏览器中而导致的性能损失。我的感觉是 Javascript 本身并不是瓶颈,只是因为没有那么多的 Javascript 可以执行(而且现在它非常快)。然而,正如上述视频末尾所述,在 Javascript-C++ 绑定(bind)、请求验证、流控制等方面可能会出现效率低下的情况。另一方面,浏览器制造商(至少是谷歌)正在努力解决这些问题。

我注意到的事情之一不是帧速率/性能问题(在我当前的测试中,我可以以 30fps 渲染 500,000 个带纹理的三 Angular 形),但帧速率似乎不是很一致,而且帧似乎不时被丢弃。我怀疑,但不知道这是否与相对简单的 setInterval() 方式或在 Javascript 中运行动画有关。 (Mozilla 的 mozRequestAnimationFrame 可能是一种更好地处理这种情况的方法)。

虽然我不知道以上任何一项对你的论文有多大帮助,但在我看来你的主题很丰富,你应该做的不仅仅是炮制简单的基准。也许您应该从一些基准测试开始,比较浏览器与桌面性能,然后尝试检查最佳实践,不仅可以在浏览器和桌面之间做出选择,还可以用于编写 WebGL 应用程序。

还有很多 WebGL 框架。我尝试了几个,印象非常深刻——可以从中学到很多东西。根据您的兴趣和论文要求,您可能也有兴趣对这些进行基准测试。

无论您采用哪种方式,我都怀疑会有一个由潜在的 WebGL 采纳者组成的大型社区,他们将渴望获得您将要研究的那种信息。

关于javascript - WebGL 基准 - 我应该创建什么样的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4609014/

相关文章:

c++ - 从 obj 文件绘制模型

c++ - FBX节点变换计算

javascript - 将 mongodb 数据库连接公开到 Next.js 6 应用程序中的页面

iphone - OpenGL 到 OpenGL-ES - glRectf()

javascript - 让 jqueryrotate 工作时遇到问题

android - OpenGL fragment 着色器正在移动对象

iphone - OpenGL-ES 改变视锥体的视角

c++ - OpenGL ES 是否适合执行骨骼动画?

javascript - 如何正确拆分 Controller 的模型?

JavaScript 继承对象作为属性