WebGL性能考虑
WebGL可以期望什么样的性能?
这有点难以回答,因为它取决于很多因素。
一般来说,您可以假定您的性能接近于GPU端的本机应用程序,因为WebGL图形API使用您的GPU进行硬件加速渲染 - 将WebGL API调用和着色器转换为操作系统图形只需要一点点开销API(通常是Windows上的DirectX或Mac或Linux上的OpenGL)。
对于CPU端来说,你所有的代码都被翻译成asm.js JavaScript。那么,您可以期待什么样的性能取决于所使用的Web浏览器的JavaScript引擎,目前存在一些非常显着的差异。在撰写本文时(2015年11月),Microsoft Edge和Mozilla Firefox在Unity代码上提供了最佳性能,因为这些目前是唯一使用asm.js规范的浏览器使用JavaScript代码的优化AOT编译路径对于那种情况,与许多编程基准测试的本机代码相比,它的性能提供了小于2倍的放慢速度,这一因素也与我们从部署到WebGL并在Firefox和Edge中运行的不同统一内容中看到的结果相匹配。
不过,还有一些其他的考虑。目前,JavaScript语言不支持多线程,也不支持SIMD。因此,从这些功能中受益的任何代码都会看到其他代码更慢的速度。您不能在脚本中编写WebGL的线程代码或SIMD代码,但某些引擎部分通常是多线程或SIMD优化的,因此会在WebGL上运行较少的代码。一个例子是皮肤代码,它既是多线程的,也是SIMD优化的。您可以在Unity中使用新的时间轴分析器,以了解Unity如何将工作分配给非WebGL平台上的不同线程。从长远来看,我们希望这些功能也可以在WebGL上使用。
影响性能的WebGL特定设置
为获得最佳性能,请在Build Player
对话框中将optimization level
*优化级别)设置为Fastest
,并在WebGL player settings
(播放器设置)中将Exception support
设置为None
。
Profiling WebGL 剖析WebGL
Unity Web Profiler支持Unity profiler,请参阅此处如何设置它。
WebGL content in background tabs 背景选项卡中的WebGL内容
如果在 WebGL Player Settings
WebGL播放器设置中启用了在后台运行(Run in background is enabled
),或者启用了Application.runInBackground,则当画布或浏览器窗口失去焦点时,您的内容将继续运行。
但是,应该注意的是,浏览器可能会限制在后台选项卡中运行的内容。如果您的内容标签不可见,则您的内容在大多数浏览器中只会每秒更新一次。请注意,由于Time.maximumDeltaTime的默认值小于1秒,所以这会导致Time.time比默认设置慢。
Throttling WebGL performance 限制WebGL性能
在某些情况下,您可能希望以较低的帧速率运行WebGL内容以减少CPU使用率。像在其他平台上一样,您可以使用Application.targetFrameRate API来执行此操作。
如果您不想限制性能,请将此API设置为默认值-1,而不是高值。这允许浏览器调整浏览器渲染循环中最平滑的动画的帧速率,并且可能产生比Unity尝试执行自己的主循环时序以匹配目标帧速率更好的结果。
Unity WebGL 中文文档 Unity 2018.1.b
1. WebGL
2. webGL Browser Compatibility
3. Building and running a WebGL project
4. WebGL: Deploying compressed builds
5. Debugging and trouble shooting WebGL builds
6. WebGL Graphics
7. WebGL Networking
8. Using Audio In WebGL
9. WebGL performance considerations
10. WebGL: Interacting with browser scripting
11. Using WebGL Templates
12. Cursor locking and full-screen mode in WebGL
13. Input in WebGL