9个值得收藏的WebGL性能优化技巧

在这里,我们推荐一些经证明非常适合创建基于 Web 的交互体验的优化技术。 本章主要基于 Soft8Soft 在 Verge3Day Europe 2019 会议上的演讲。

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

1、几何/网格

几何是 3D 应用程序的基础,因为它构成了模型的主要形状。 为了获得更平滑的反射和更快的渲染,你应该尽可能保持网格规则。 一开始,你应该决定场景中想要的细节级别,并在建模时坚持这一点。

在这里插入图片描述

对折痕建模时,最好使用平滑组,而不是添加更多多边形:
在这里插入图片描述

在处理圆柱形模型时,请努力减少其中心的多边形数量。

在这里插入图片描述

不要让模型有用户无论如何也看不到的额外细节。 如下图所示,橙色突出显示的边缘定义了整个模型的细节程度,因此可以使用它作为参考。
在这里插入图片描述

2、法线贴图

优化 WebGL 性能的常见方法是通过将法线贴图从高多边形模型烘焙为低多边形模型来减少多边形数量。
在这里插入图片描述

然而,由于 8 位图像的精度有限,法线贴图可能会产生可见的伪影。 一些可能的解决方案如下图所示:使用更高精度(16位)的图像会产生更大的文件,而第二种方法使用带法线贴图的平滑组相当耗时,并且不能保证干净的结果。 第三种方法在某些情况下可能有效:如果你的表面相当粗糙,可以考虑向材质添加一些噪声以减少这些伪影。
在这里插入图片描述

根据我们的经验,我们发现光泽物体的最佳解决方案是使用带有平滑组的中间多边形几何体,并且没有任何法线贴图。
在这里插入图片描述

最后,在某些情况下你可能想要使用法线贴图而不是高度详细的网格:

  • 物体由许多不同的表面组成。
  • 表面粗糙,不会产生精密工件。
  • 对象距离较远或较小,因此用户不会注意到任何伪影。
    在这里插入图片描述

3、纹理化

这是 PBR 管道(以及一般情况)中使用的一组典型纹理。
在这里插入图片描述

正如你所看到的,大多数都是黑白的。 因此,可以将黑白纹理组合到单个图像的 RGBA 通道中,每个图像最多 4 个贴图。

在这里插入图片描述

如果你只有一个黑白纹理,可以通过将其打包到 Alpha 通道中将其与任何现有的 RGB 纹理组合起来。 最后,如果没有要合并的图像,可以将黑白图像转换为 jpeg 格式,压缩率为 95%,并启用灰度模式。
在这里插入图片描述

减小纹理大小的另一种方法是优化 UV 空间。 UV 展开越紧凑,图像使用纹理空间的效率就越高。 因此,可以获得较小的图像,而不会损失任何质量。

在这里插入图片描述

4、顶点颜色

使用顶点颜色而不是图像是加快加载速度并提高 WebGL 应用程序整体性能的有效方法。 尽管它是以额外的边为代价的,你必须将这些边添加到模型中才能分离不同的顶点颜色。
在这里插入图片描述

你还可以使用顶点颜色来定义粗糙度、金属度或镜面表面或任何其他参数。 下面可以看到此类材质的示例,其中仅使用顶点颜色。
在这里插入图片描述

5、着色器数量

这对于场景中减少不同的材质/着色器非常有益。 WebGL 中的着色器处理会导致加载时间延长,这在 Windows 上尤其明显。 此外,如果着色器较少,引擎在渲染时在它们之间切换的时间就会减少,从而提高性能。

如果有类似的材质,仅纹理不同,则可以仅使用一种材质并在运行时加载/交换其纹理。 为此,你可以使用替换纹理拼图或使用 JavaScript 来完成。 这不仅会优化着色器的数量,还会减少应用程序启动时加载的图像数量。
在这里插入图片描述

这是此类优化的一个示例。 所有这些轮胎仅由一种材料表示,并通过交换其纹理进行配置。
在这里插入图片描述

为了减少着色器的数量,可以将 2 种或多种简单材质组合成一种更大的材质。 如果你计划在这些材质之间切换(例如正在制作配置器应用程序),则此技术特别有效,因为这种方式运行速度更快,并且还允许动画过渡。
在这里插入图片描述

6、绘制调用

此外,还有一个重要的方面——绘制调用的数量。 该数字可以从打印性能信息拼图输出的几何缓冲区部分获得。 如果每个对象只分配一种材质,这大致相当于单独对象的数量,而多材质对象需要更多的绘制调用来渲染它们。

因此,你应该尽可能地加入网格,并减少使用独特的材质,以减少绘制调用的次数并提高性能。

在这里插入图片描述

你可以使用这个 在线工具进行材质的合批优化:
在这里插入图片描述

https://gltf.nsdt.cloud
如果你有一个动画对象,仍然可以将其各个部分连接在一起并使用骨骼进行动画,有时在为单独的对象制作动画时这样更方便。
在这里插入图片描述

7、高动态范围照明

如果仅通过 HDR 图像而不使用任何光源来照亮场景,将有助于大大提高性能。 HDR 文件的大小可能小于 1 Mb。
在这里插入图片描述

8、阴影

仅当动态阴影有助于很好地呈现对象时才使用动态阴影。 在下图中,工业机器人演示中使用的动态阴影强调了机器人模型的形状。 模型本身可以旋转,因此阴影无法向用户隐藏对象的任何部分。 另一方面,滑板车演示中的阴影会使许多细节变得模糊。
在这里插入图片描述

如果你的对象在应用程序中不移动,可以烘焙阴影和环境光遮挡贴图并将它们应用到对象下方的平面。

在这里插入图片描述

9、模型格式

最适合WebGL应用的3D模型格式是GLTF,因此别忘了将你的3D模型保存为GLTF或二进制的GLB,或者使用NSDT 3DConvert将其他格式的模型 转换为GLTF转换为GLB

在这里插入图片描述


原文链接:9个WebGL性能优化技巧 — BimAnt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于优化 Unity 打包的 WebGL 的卡顿问题,可以尝试以下几种方法: 1. 减少网页的内容和资源大小,可以使用图片压缩、资源压缩等方式来减小网页的大小。 2. 减少 WebGL 渲染的复杂度,可以尝试简化模型、减少纹理的大小、减少灯光的数量等。 3. 使用合适的浏览器和设备,不同的浏览器和设备对 WebGL 的支持程度和效果都有所不同,因此选择适合的浏览器和设备可以有效地优化性能。 4. 调整 Unity 的设置,比如减少渲染帧率、调整 Quality Settings 等。 希望这些方法能够帮助你解决卡顿问题。 ### 回答2: Unity 打包 WebGL 运行卡顿是由于性能不足引起的,可以采取以下措施来优化: 1. 减少三维模型和纹理的数量和大小:大量使用高分辨率的模型和纹理会增加网页加载时间和渲染负荷。可以优化模型和纹理的分辨率,减少使用复杂的模型和减小纹理的尺寸,以降低资源消耗和提高性能。 2. 合并网格和减少渲染批次:通过将多个物体合并成一个网格,可以减少渲染调用,减少渲染批次,从而提高性能。可以使用Unity的网格合并功能来合并网格。同时,还可以使用批处理技术将具有相同材质的物体合并到一个批次中。 3. 减少动画和粒子效果:过多和复杂的动画和粒子效果会消耗大量的计算资源和内存,导致性能下降。可以减少或简化动画和粒子效果的数量和复杂度,以改善性能。 4. 使用低多边形模型和简化碰撞体:高多边形模型和复杂的碰撞体会增加渲染和碰撞检测的计算量,导致性能下降。可以使用低多边形模型来代替高多边形模型,并使用简化的碰撞体来加速碰撞检测。 5. 异步加载资源:将资源的加载和初始化分散到多个帧中进行,以避免一次性加载过多资源导致卡顿。可以使用Unity的异步加载资源的功能来实现。 6. 使用LOD(层次细节)技术:通过使用不同层次的细节模型,根据距离将更高细节的模型替换为更低细节的模型,可以减少渲染负荷,提高性能。 7. 编写高效的脚本和代码:避免使用复杂和低效的脚本和代码,优化关键路径的性能,避免频繁的内存分配和垃圾回收。 8. 使用GPU实例化:使用Unity的GPU实例化功能来复制和渲染大量相同或相似的物体,以提高渲染性能。 通过以上优化措施,可以减少资源消耗、提高渲染性能,从而解决Unity打包WebGL运行卡顿的问题。 ### 回答3: Unity打包WebGL运行卡顿的原因可能有很多,以下是一些优化建议: 1. 减少包的大小:首先,要确保你的资源文件合理压缩,不要包含过多的无用资源。可以使用压缩的图片格式,限制纹理的大小,移除不必要的模型和音频等。 2. 降低渲染负荷:Unity中的多个物体和效果绘制会增加渲染负荷。可以尝试优化物体的数量和复杂性,减少特效的使用等。 3. 使用合理的光照与阴影:光照和阴影是游戏中产生高额渲染开销的因素之一。可以降低光照和阴影的质量,或者使用更轻量级的光照模型,如平行光。 4. 合理优化脚本和代码:检查你的脚本和代码,尽量避免使用耗时的操作,如频繁的循环,频繁的内存分配等。可以使用Unity Profiler工具来分析和优化性能。 5. 合理设置物理引擎:物理引擎可以导致额外的计算开销。如果游戏中没有必要的物理模拟,可以禁用物理引擎或减少物理引擎的计算步长。 6. 打包设置优化:在Unity打包设置中,可以根据具体需求调整WebGL的压缩和优化设置,如物理内存大小、压缩选项等。 7. 平台适配:尽可能在WebGL平台上测试和优化你的游戏,确保它在WebGL上运行得更流畅。在开发过程中,可以使用真机测试来评估性能表现。 总的来说,优化WebGL性能是一个综合性的工作,需要考虑多个因素。通过以上的方法和工具,可以逐步提高游戏在WebGL平台上的运行效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值