数据可视化:浅析目前各种3d技术

文摘   2024-10-09 22:37   北京  

关注公众号 前端界,回复“加群

加入我们一起学习,天天进步

一、发展

3D或者说三维数字化技术,是基于电脑/网络/数字化平台的现代工具性基础共用技术,包括3D软件的开发技术、3D硬件的开发技术,以及3D软件、3D硬件与其他软件硬件数字化平台/设备相结合在不同行业和不同需求上的应用技术。

随着电脑技术的快速发展,3D技术的发展十分迅速。我们最初了解的3D技术就是WebGL(全写Web Graphics Library),它是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。

「WebGL」地解决了现有的Web交互式三维动画的两个问题:第一,它通过HTML脚本本身实现Web交互式三维动画的制作,无需任何浏览器插件支持;第二,它利用底层的图形硬件加速功能进行的图形渲染,是通过统一的、标准的、跨平台的OpenGL接口实现的。

WebGL 原生 API 是一种非常低级的接口,而且还需要一些数学和图形学的相关技术。对于没有相关基础的人来说,从而衍生了很多3d开发应用。

接下来我们将介绍「ThreeJS」, 「BabylonJS」, 「LayaboxJS」, 「SceneJS」「Cesium」「ThingJS」,这些框架很大一部分是将WebGL通过JS进行了系统的封装,提供了众多类和方法,方便前端工程师使用使用,让前端工程师不需要陷入WebGl的细节当中,专注于功能的实现,这样大大提高了工作效率,降低了工作难度。

  • three.js 是一个基于 WebGL 的 Javascript 3D 图形库

  • BabylonJS:是一个完整的JavaScript框架,用于构建HTML5,WebGL,WebVR和Web Audio的3D游戏和体验

  • SceneJS:是一个基于 JavaScript 时间轴的动画库,用于创建动画网站,作为一个动画时间轴库,它允许你创建对象的移动和位置的时间顺序。

  • Cesium:是国外一个基于JavaScript编写的使用WebGL的地图引擎。Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持,且支持绝大多数的浏览器和mobile

  • ThingJS:基于 HTML5 和 WebGL 技术,可方便地在主流浏览器上进行浏览和调试,支持 PC 和移动设备。ThingJS为可视化应用提供了简单、丰富的功能,只需要具有基本的 Javascript 开发经验即可上手。

二、技术介绍

2.1 ThreeJS

官网:threejs.org/

中文官网:www.webgl3d.cn/

「Three.js」是此种最著名的3D WebGL JavaScript库,成千上万的开发人员将其用于基于WebGL的游戏,模拟甚至网站。它具有简单的学习曲线,数百个演示和示例,丰富的教程库以及强大的社区。Three.js用作许多WebGL图形引擎和几个支持浏览器的游戏引擎的基础。它具有功能强大的轻量级在线编辑器。

功能特点

  1. 「Three.js掩盖了3D渲染的细节」:Three.js将WebGL原生API的细节抽象化,将3D场景拆解为网格、材质和光源(即它内置了图形编程常用的一些对象种类)。

  2. 「面向对象」:开发者可以使用上层的JavaScript对象,而不是仅仅调用JavaScript函数。

  3. 「功能丰富」:Three.js除了封装了WebGL原始API之外,Three.js还包含了许多实用的内置对象,可以方便地应用于游戏开发、动画制作、幻灯片制作、髙分辨率模型和一些特殊的视觉效果制作。

  4. 「扩展性很强」:为Three.js添加新的特性或进行自定义优化是很容易的事情。如果你需要某个特殊的数据结构,那么只需要封装到Three.js即可。

  5. 「包含数学库」:Three.js拥有一个强大易用的数学库,你可以在其中进行矩阵、投影和矢量运算。

  6. 「内置文件格式支持」:你可以使用流行的3D建模软件导出文本格式的文件,然后使用Three.js加载;也可以使用Three.js自己的JSON格式或二进制格式。

  7. 「速度很快」:Three.js采用了3D图形最佳实践来保证在不失可用性的前提下,保持极高的性能。

  8. 「支持交互」:WebGL本身并不提供拾取(picking)功能(即是否知道鼠标正处于某个物体上)。而Three.js则固化了拾取支持,这就使得你可以轻松为你的应用添加交互功能。

  9. 「支持HTML5 Canvas」:Three.js 不但支持 WebGL,而且还支持使用 Canvas2D、Css3D 和 SVG 进行渲染。在未兼容 WebGL 的环境中可以回退到其它的解决方案。

优点

  1. 国内目前最流行的前端3d框架,国内用的人比较多,目前中文资料也比较多

  2. 上手难度低,封装了很多3D 图形编程中常用的对象。

缺点

  1. 官网文档非常粗糙,对于新手极度不友好。

  2. 国内的相关资源匮乏。

  3. 不是游戏引擎,一些游戏相关的功能没有封装在里面,如果需要相关的功能需要进行二次开发。

应用场景

Three.js是一款基于原生WebGL封装通用Web 3D引擎,在小游戏、产品展示、物联网、数字孪生、智慧城市园区、机械、建筑、全景看房、GIS等各个领域基本上都有three.js的身影。

只要你有Web3D可视化的需求,基本上都可以首选学习Three.js。

2.2 BabylonJS

官网:www.babylonjs.com/

中文官网:www.cnbabylon.com/

Babylon.js是一个javascript开源框架,用于为Web开发3D应用程序/视频游戏。要以游戏开发和易用性为主。

功能特点

  1. 开源,免费

  2. 强大,美观,简单和开放的3D渲染体验,支持JavaScript和TypeScript。

优点

  1. 功能较为全面,功能比较丰富、灵活、模型显示不失真。

  2. 有微软背景,有不少的demo,有较详细的api文档,有供测试的平台,有提供3dsmax转换模型的插件,比three.js

  3. 成熟;几经更新与完善之后,Babylon.js已更新至1.12版本,相比之前的版本,除了不断的Bug修复之外,Babylon.js还新增了.许多非常牛叉的新特性,并对已有功能进行了完善。更方便快捷地完成光线、轮船纹理、海浪等的3D建模,从而带来最佳的呈现效果。

缺点

  1. 学习难度大、周期长,需要进行大量深入的学习与研究。

  2. 在模型文件较大或较多时,浏览器打开时会等待较长时间。

  3. 中文资料很少,没有系统的中文教程。

应用场景

适合做中大型项目,尤其是多种媒体混杂的或者是游戏项目VR体验项目。

2.3 SceneJS

官网:daybrush.com/scenejs/

GitHub:github.com/daybrush/sc…

SceneJS 是一款基于 WebGL 的 JavaScript 库,专门用于创建复杂的 3D 场景。它提供了一种易于使用的方式来描述场景,并支持高度定制化,包括灯光、阴影、纹理等等。您可以使用 SceneJS 来创建各种类型的场景,从简单的物体到复杂的城市景观

功能特点

  1. 「支持JavaScript和CSS播放方法」:支持两种播放方式:javascript和css动画。在使用过程中感受不到差异

  2. 「完全控制时间」,准确地显示当前时间的移动情况

  3. 「可同时控制多个元素」

  4. 「支持各种值类型」

  5. 「提供 CSS 使用的缓动」

  6. 「支持各种效果预设」

相关内容可参照官网

优点

  1. 提供了一个基于流水线的架构,使其在大型场景中表现出非常好的性能

  2. 可以很容易地在网格之间进行交互,并且对于场景的动态变化处理起来也很方便

  3. 支持灯光、阴影、纹理、透明度等丰富的效果,并具有可定制性

缺点

  1. 相关社群几乎没有,中国很少人用。

  2. 缺少碰撞检测等功能。

  3. 加载大模型时速度较慢 。

  4. 需提供正在载入信息提示,尽可能提高用户体验。

应用场景

2.4 ThingJS

官网:www.thingjs.com/guide/

功能特点

  1. 「强大的3D引擎」:hingJS平台的3D引擎核心是由优锘科技的核心3D研发团队依托多年3D基础算法研究和积累,通过潜心研发,完成底层H5、3D运行基础库架构,并经持续优化、封装、测试逐步完善而成。

  2. 「移动端可访问」:ThingJS平台采用浏览器原生的WebGL方式实现3D能力封装,不仅兼容IE11 ,Edge ,Chrome,Firefox等浏览器,而且还可以在手机、PAD等移动端访问,甚至微信扫码也可以直接访问

  3. 「简化模型制作」:ThingJS平台提供面向普通用户(而非3D设计师)的快速3D场景搭建工具ThingBuilder,可让用户在无需专业3D设计师情况下低成本完成3D场景搭建

  4. 「提高开发效率」:开发者可登录官方网站直接开始在线开发,还提供各类简化开发者开发工作的功能,比如,开发者右键自动生成基础代码。

  5. 「在线开发部署」:ThingJS平台推荐将在线开发调试完成的3D可视化应用直接使用在线SaaS方式部署,省去用户本地安装调试等环节,降低成本,提升交付效率

  6. 「支持离线部署」:用ThingJS平台开发的项目也可以离线部署,支持Linux(CentOS,Ubuntu, Debian,FreeBSD)和Windows(Window Ser ver)服务器平台。

优点

  1. 入门简单,在线开发具备JS基础即可,不需要3D开发技能

  2. 支持移动端访问

缺点

  1. 非开源

  2. 对个人开发者大部分功能都是免费的, 但如果是企业或者商用,则需要购买服务

  3. ThingJS不 适合做场景细节要求高的应用

应用场景

物联网可视化Paas平台,主要针对以一栋或多栋建筑组成的园区级别 的场景,可以用于数据中心、仓储、学校、医院、城市、设备等多种领域。

2.5 Cesium

官网:www.cesium.com/

中文官网:cesium.xin/wordpress/

Cesium 是国外一个基于 JavaScript 编写的使用 WebGL 的地图引擎,支持 3D、2D、2.5D 形式的地图展示,可以自行绘制图形,高亮区域

特点

  1. 跨平台、跨浏览器

  2. Cesium 使用 WebGL 来进行硬件加速图形,不需要任何插件支持

  3. Cesium 是基于 Apache2.0 许可的开源程序,可免费用于商业和非商业用途

应用场景

  1. 支持2D,2.5D,3D 形式的地理(地图)数据展示

  2. 可以绘制各种几何图形、高亮区域,支持导入图片,甚至三维模型等多种数据可视化展示

  3. 可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和移动端浏览器

  4. 支持基于时间轴的动态流式数据展示

三、总结

  1. 前端3D技术汇聚着各种各样的方法,除了上面写的这些,还有很多迷人的技术,欢迎大家来补充。

  2. 工作过程中也要根据企业的情况来正确选择

  3. 市面上也有一些技术更成熟的数据可视化平台,但很多需要提前调研,如果预算充足的话,可以使用

最后


大家好,我是芝士,最近创建了一个低代码/前端工程化/高级前端面试交流群,欢迎加我微信,拉你进群,互相监督学习进步等!




关注福利,关注公众号后,在首页:

  • 回复「简历获取精选的简历模板

  • 回复「思维图」获取完整 JavaScript 相关思维图

  • 回复「电子书」可下载我整理的大量前端资源,包含面试、Vue实战项目、CSS和JavaScript电子书等。

  • 回复「Node」获取简历制作建议

最后不要忘了点个赞再走噢

前端界
高质量文章分享、实践干货、技术前沿、学习资料, 你感兴趣的都在前端界
 最新文章