Web3D库选择:ThreeJS/BabylonJS/SceneJS/ThingJS
Author:zhoulujun Date:
Web3D发展史
three.JS 他首先用 ActionScript 语言编写代码,然后被 Adobe Flash 使用。2009 年,Ricardo 将代码移植到了 JavaScript。
第一个可以创建 3D 计算机图形的跨浏览器 JavaScript 库 Three.js 于 2010 年 4 月 24 日由 Ricardo Cabello 首次发布。官网如下:https://threejs.org/
WebGL发展
2009年初:非营利技术联盟Khronos Group启动了WebGL的工作组,成员包括Apple、Google、Mozilla、Opera等公司。
2011年3月:WebGL 1.0规范正式发布,这一规范基于OpenGL ES 2.0,并提供了3D图形的API。WebGL 1.0允许通过HTML5 Canvas元素和JavaScript来利用底层图形硬件加速功能进行图形渲染。
起源与早期发展:
2006年:弗拉基米尔·弗基西维奇首次展示了Canvas 3D的原型。
2007年底:Canvas 3D在Firefox和Opera浏览器中被初步实现。
标准化进程:
2009年初:非营利技术联盟Khronos Group启动了WebGL的工作组,成员包括Apple、Google、Mozilla、Opera等公司。
2011年3月:WebGL 1.0规范正式发布,这一规范基于OpenGL ES 2.0,并提供了3D图形的API。WebGL 1.0允许通过HTML5 Canvas元素和JavaScript来利用底层图形硬件加速功能进行图形渲染。
WebGL 2.0的发展:
2013年:WebGL 2.0规范的发展开始,这一版本基于OpenGL ES 3.0,并引入了更多高级特性。
2017年1月:WebGL 2.0规范最终完成,并在Firefox 51、Chrome 56和Opera 43等浏览器中首次获得支持。WebGL 2.0提供了许多WebGL 1.0的扩展功能,并引入了新的API,使得WebGL的应用更加广泛和强大。
单纯前端工程师一般都做不到直接用WebGL开发3d应用——太难了,学不动了!
Three.js是最早支持WebGL 1.0的前端库(或许没有之一)
web3D引擎喷发潮
2013 年,Microsoft 和 David Catuhe创建了Babylon.js ,官网如下:https://www.babylonjs.com/
为什么要重复造轮子呢?Babylon.js 是游戏 Web 3D渲染引擎,而three.js只是一个标准库而已!
那是因为 Babylon.js 不仅可以渲染逼真的图像。 它还可以创建像Temple Run这样的互动游戏。 为了向电子产品爱好者展示 HoloLens 的外观,微软使用了 Babylon.js。
一个表格来突出显示 Three.js 和 Babylon.js 之间的差异。
Definition | Cross-platform JavaScript library | Real time 3D engine |
---|---|---|
Release | 2010 | 2013 |
Latest Release | r159 | 6.0 |
Author | Three.js Authors | David Catuhe and Microsoft |
Language | JavaScript and GLSL | TypeScript and JavaScript |
Type | JavaScripLibrary | 3D engine |
License | MIT | Apache License |
Website | threejs.org | https://www.babylonjs.com/ |
Contributors | 1700 | 190 |
VR and AR | No | Yes |
VFX | Sort of | Yes |
Browser Support | Supported by WebGL 1.0 | Internet Explorer 11+, Firefox 4+, Google Chrome 9+, Opera 15+ with WEBGL support |
Cons | Don't work well on non-WebGL browsers | Difficult |
Pros | Easy and supports advanced libraries. | Can make photorealistic images |
BabylonJS, LayaboxJS, SceneJS 、Cesium(webGIS)等等开源框架横空出世, 这些框架基本把WebGL通过JS进行了系统性的封装,提供了很多类与方法,可以直接使用,常用的类有Scene(场景)、Camera(相机)、Mesh(网格体)、Light(灯光)、renderer(渲染器)等等,基本涵盖了3d场景所需要的基本元素,让前端工程师不需要陷入WebGL本身的细节当中,而专注于3D应用的功能实现,这大大提高了工作效率、降低了工作难度。
Oasis Script
Oasis Engine 是蚂蚁集团 Web 3D 互动图形引擎,同时也是阿里经济体互动技术方向的首选 Web 3D 引擎(蚂蚁森林、庄园等应用,以及双十一、双十二和五福等大促等 )
Oasis Engine 是引擎一款以 Web 为先,移动为先的互动/创作平台。使用组件系统架构,并且追求易用和轻量。Oasis Engine 主要包含 Oasis Runtime、Oasis Editor 和 Oasis Store 三部分。
组件系统架构
采用组件系统架构,Oasis Engine 不仅需要具备三维渲染能力,还需要包含了非常多来自各领域的功能,比如 2D、3D、UI、音频、物理、VR/AR、逻辑编写等等,这些功能都是开发者的刚需。同时开发者在使用上也通常希望引擎的结构可以保持清晰,功能可以灵活组合。
除此之外,通常业务开发还希望进行功能沉淀,其实这些都是属于易用性的范畴。在如此功能复杂度和易用性的权衡下,我们选择了组件系统架构。在组件系统架构下,万物皆组件,任何功能都可以以组件的形式插拔,灵活组合。同时脚本也是一种特殊的组件,开发者也可以很自然的把业务功能沉淀为组件复用。
和 Babylon 和 Cocos Creator 的对比
和 Babylon 比,我们认为基于组件的开发模式对于 3D 业务来说更加友好。虽然 Babylon 的 behaviors 也类似于组件,但总有种生搬硬套的感觉。而且 Babylon 的 api 个人认为是不太友好的,包括资源加载,动画播放等等。和 Cocos Creator 对比,他们的编辑器做得还是比较好用的。目前 Cocos 重点应该是放在 Native 以及小游戏平台上,整套开发也是一个闭环。而我们目前更倾向于在 Web 生态里发展,去打通前端的工程体系。Cocos 目标是游戏,而我们目前是互动。
但是,阿里是真的纯粹的做生意的公司,一些都是以经济效益为基准,比资本主义国度谷歌等更商业——阿里内部不用了,就放弃,如weex。或者甚至还有改协议删代码闭源的,如那个ob数据库…………
SceneJS
特别适合需要高精度细节的模型需求,比如工程学和医学上常用的高精度模型。
专门用于快速绘制大量单独连接的对象,而没有像阴影、反射等游戏引擎效果。
资料太少,没有去仔细研究……
LayaboxJS(layaair底层开发Ar,JS,TS)
Layabox是一个免费开源的HTML5引擎解决方案(通常指的是Layabox引擎或其相关JavaScript组件)
LayaAir优先使用webgl渲染,如果webgl不可用,自动无缝转为canvas渲染,引擎设计过程中处处以性能为优先原则,LayaAir是为裸跑而设计的HTML5引擎。
LayaAir API设计上追求精简,简单易用,上手容易,引擎本身非常注意自身大小,是目前同等功能最小的HTML5引擎。
LayaAir同时支持ActionScript3、TypeScript、JavaScript三种语言开发HTML使用任意一种自己喜欢的语言开发即可。
同时支持2D,3D,VR、时间轴动画,缓动、UI系统、粒子动画、骨骼动画、物理系统等。提供可视化辅助开发及工具流。LayaAirIDE提供代码开发工具及可视化编辑器,清晰的工作流,让美术,策划,程序紧密配合,提高开发效率。
其产品家族中包括LayaAir引擎、LayaFlash引擎、LayaOpen开放平台、LayaMarket SDK、LayaStore嵌入式游戏商店、LayaPlayer运行器等。其中,核心引擎LayaAir性能全球领先,支持2D、3D、VR开发,并且支持AS3、JavaScript、TypeScript三种开发语言。
虽然Layabox的基础引擎和许多工具是免费开源的,但可能也存在一些高级功能或特定服务需要收费。此外,对于使用Layabox进行商业开发的项目,开发者也需要注意遵守相关的开源协议和版权规定。
ThingJS
号称物联网3D应用开发首选!
ThingJS是针对园区级,多建筑群应用进行接口设计的,提供了从 地球 到 城市、园区、建筑、楼层、房间、设备的多级展示与控制,论是仓库、学校、医院、工厂、办公楼等都能满足;而且这些层次的对象在ThingJS的场景加载完成后,是以JS对象的方式直接暴露给用户使用,简单方便;
在功能接口提供的粒度上,ThingJS和其他开发工具相比,站在了更高的封装层面, 用尽可能简洁的接口,直接提供了场景的加载与展示、物联网设备的创建与特效;还提供了信息点、线路、管线、区域、热图、粒子、动画等丰富功能;提供了摄影机控制、第一人称行走、寻路导航和视点线路工具;可扩展的界面、头顶信息牌、内嵌视频监控等丰富的信息展示方式。这些接口大部分已经在在线例子中可以找到,可以边改参数边看到效果;
ThingJS所定位的物联网可视化应用,侧重宏观场景表现,并不针对局部细节的效果,而且由于WebGL技术的性能局限,在性能上不能和Unity等原生程序相比,性能和效果的侧重也更偏向前者,就像 电纸书 和 手机 有着不同的定位;所以,ThingJS不适合做场景细节要求高的应用,如:家居装修设计、单体模型展示、游戏和电影级的画质效果。
这东西虽然好,但是不能白嫖(老板们要求),只能尿遁!
参考文章:
浅析前端各种3d技术ThreeJS, BabylonJS, SceneJS, ThingJS https://www.cnblogs.com/Earth-Hall-Sanwu/p/16493489.html
Three.js vs. Babylon.js 最新对比【2024】https://blog.csdn.net/shebao3333/article/details/138058356
WebGL、ThreeJS、BabylonJS、SceneJS和Cesium框架对比及简介 https://blog.csdn.net/u013869554/article/details/120910636
转载本站文章《Web3D库选择:ThreeJS/BabylonJS/SceneJS/ThingJS》,
请注明出处:https://www.zhoulujun.cn/html/webfront/visualization/threejs/9220.html