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

news2024/11/26 9:55:57

在这里,我们推荐一些经证明非常适合创建基于 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云云耀云服务器实例使用教学

目录 国内免费云服务器(体验) 认识国内免费云服务器 如何开通国内免费云服务器 云耀云服务器 HECS Xshell 远程连接 云服务器更改安全组 切换操作系统 服务器详情 HECS适用于哪些场景? 网站搭建 电商建设 开发测试环境 云端学习环…

二维码智慧门牌管理系统开发解决方案:标准化建设的基础

文章目录 前言一、系统质量保证二、系统互联互通三、系统可扩展性 前言 在现代城市管理和服务中,二维码智慧门牌管理系统扮演着至关重要的角色,它通过智能化和数字化手段提高了城市管理效率、公共服务水平,并有助于维护社会公共安全。然而&a…

macOS 12 Monterey:一次全新的跨设备协作体验

macOS 12 Monterey是苹果公司的一次重大突破,它打破了设备间的壁垒,将不同设备无缝地连接在一起,极大地提升了用户的工作效率和娱乐体验。Monterey带来了通用控制、AirPlay、捷径等新功能,以及一些实用的新小功能。 安装&#xf…

跨链协议支持Sui的资产所有权理念,助力资产在不同链之间流通

区块链通常支持安全地持有数字资产这一概念。然而,在一个链上拥有资产并不意味着它可以转移到另一个链上。支持在不同链之间移动资产的跨链协议有助于解决行业中可能出现的主要碎片化问题。 Sui通过基于开源Wormhole协议构建的Wormhole Connect支持跨链。构建者可以…

【数据分享】1901-2022年1km分辨率逐年降水栅格数据(免费获取/全国/分省)

降水数据是我们在各项研究中最常用的气象指标之一!之前我们给大家分享过1901-2022年1km分辨率逐月降水栅格数据(可查看之前的文章获悉详情)!该数据来源于国家青藏高原科学数据中心,这儿的逐月降水量是指当月的总降水量…

SeaArt.ai: 海艺AI绘画艺术图片模型创作平台

【产品介绍】 • 名称 SeaArt.ai • 具体描述 SeaArt.ai是一个基于人工智能技术的AI绘画工具,它可以根据你的描述或者关键词来生成符合你想象的图片。你可以选择不同的模式来创建不同类型的图片,比如人物、风景、建筑、神话、自…

自动化测试面试题解析,半小时通透

面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来…

液体颗粒计数器如何选择!

随着液体污染检测技术的飞速发展,液体粒子计数器由于计数速度快、准确度高、重复性好、操作简便且结果不受人为因素的影响,成为半导体等领域用于测量和监测液体样品中颗粒物浓度和径向分布的重要工具。 液体粒子计数器是各行各业用于测量和监测液体样品中…

Jmeter+jenkins接口性能测试平台实践整理

最近两周在研究jmeter+Jenkin的性能测试平台测试dubbo接口,分别尝试使用maven,ant和Shell进行构建,jmeter相关设置略。 一、Jmeterjenkins+Shell+tomcat 安装Jenkins,JDK,tomcat,并设置环境变量&#xff…

企业网盘 VS 大文件传输, 哪个才是企业传输的正确选择?

在当今的信息时代,文件传输是企业日常工作中不可或缺的一项功能。无论是内部沟通、外部协作、还是客户服务,都需要高效、安全、便捷地传输各种类型和大小的文件。那么,面对市场上众多的文件传输产品和服务,企业应该如何选择呢&…

指针,动态内存分配

目录 什么是指针 指针重要性 指针的定义 ​指针的分类,指针和 基本类型指针 星号的含义 形参实参 ​指针和数组 指针和一维数组 指针变量的运算 一个指针变量到底站占几个字节 指针和二维数组 动态内存分配 传统数组的缺点 为什么需要动态内存分配 …

Taro小程序隐私协议开发指南填坑

一. 配置文件app.config.js export default {...__usePrivacyCheck__: true,... }二. 开发者工具基础库修改 原因:从基础库 2.32.3 开始支持 修改路径:详情->本地设置->调试基础库 三. 用户隐私保护指引更新 修改路径:mp后台->设…

Oracle数据如何迁移导入到MySQL

使用Navicat工具建立数据连接,进行数据传输 1、打开Navicat工具,分别连接Oracle数据库和MySQL数据库。 2、连接源选择你的oracle数据,目标选mysql 即可成功导入

Python中的异常处理4-2

在《Python中的异常处理4-1》中提到,用except可以捕获所有的异常。实际上,在程序运行的过程中,出现异常的原因有很多,比如下标超出范围、除数为0、变量未定义等。 1 except语句加上具体的异常类型 可以在except语句之后加上具体…

cms之wordpress主题安装

WordPress主题安装教程的方法有两种,分为在线安装和上传安装,下面是主题详细安装方法的步骤。 后台在线安装主题 从后台的主题界面在线安装主题是最方便的WordPress主题安装方式。方法如下: 1 在WordPress后台,转到外观→主题 …

yarn的资源优化的调整参数

yarn的资源优化的调整参数 官网: https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml 没事多看官网哈 yarn.nodemanager.resource.memory-mb:用于设置NodeManager节点的总内存容量,单位为MB。根据集…

php预约系统源码 网上预约小程序开发源码 整套系统搭建让在线预约更便捷

随着互联网技术的发展,越来越多的服务行业开始通过网上预约系统来实现便捷的客户管理和服务提供。PHP预约系统源码作为一种成熟的技术方案,可以帮助商家快速搭建自己的预约系统,提高工作效率,优化客户体验。 分享一个php预约系统…

C#教学辅助系统网站as.net+sqlserver

本教学辅助系统系统从两种用户角度进行功能划分。 1、学生部分: 1.1:新闻查看; 1.2:课程公告查看; 1.3:用户注册; 1.4:在线留言; 1.5:资料下载; …

goaccess 日志分析 nginx

分析命令: goaccess -a -d -f /mnt/winshare/access-2023070112.log -p goaccess.conf -o /mydata/nginx/html/2023070112_new.html分析日志时的参数 goaccess使用参数详解-a 开启 UserAgent 列表。开启后会降低解析速度 -c 在程序开始运行时显示 日志/日期 配…

KDD 2023 | WHEN异构时间序列分析模型:当Wavelet和DTW遇上Attention

论文题目: WHEN: A Wavelet-DTW Hybrid Attention Network for Heterogeneous Time Series Analysis 论文链接: https://dl.acm.org/doi/10.1145/3580305.3599549 论文作者: 王静远,杨晨,蒋笑寒,吴俊杰教授…