目前我们公司涉及到的threejs的项目非常多应该不下20个了,感悟很多,不过事情都要两面的看,既然题主问的是缺点我认为需要将这个项目的优点先提一提然后在说一下缺点。PS:上面一个老哥说加载2G的模型,简直是无理取闹。

:这一点可以去看看其他经常使用到的类库就明确了,人家ThreeJS自带d.ts描述文件甚至是example里面没有并入核心部分的类都具备描述文件。

:这一点可以说是前端开发的一大福利了,基本上很少有js库能够做到全面对象化,学习上在掌握三维编程的基础之后简直不要太简单,至少从上手来说已经将门槛降低很多了。

:基本上大部分其他库或平台只要有相关的需要都会提供ThreeJS的集成路径,比如Mapbox、Echart、D3这一类,这一点可以说是最大的优势了。甚至大部分项目都愿意使用ThreeJS作为底层三维框架,比如AR.js、vanta.js等等。

:什么PBR、风格化渲染、后期效果、物理、动画、粒子。。。。基本上上三维程序常用的功能特性他都是支持的,夫复何求?

:大部分功能性类库一旦想要拓展什么功能上来就是改源码重编类库,但是一旦读过ThreeJS源码就会知道,这玩意做拓展根本不需要搞源码,一方面是对象化封装使得我们可以继承重写,另一方面他其实已经将部分底层基础也是对象化实现了出来(比如着色器、几何体等)开发者可以对任意实例的任意属性或函数进行重写,这部分JS简直完胜C++。

易用性:上面说了这玩意学习成本不高、编码难度不大,但是易用性较差。ThreeJS只能算是三维引擎它只是在提供基础三维能力,并没有说提供强大的引擎能力,和真正的游戏引擎相比他缺乏优质好用的资源管理器、场景编辑器等等组件。甚至连写一个点选高亮都需要射线扫描同时集成后期效果实现,可以说只是让你能实现功能但是不能简易的实现功能。

性能问题:这里的性能一方面虽然受到浏览器WebGL的限制,但是我认为ThreeJS的渲染管线确实是存在冗余的,但是我确实也没有找到问题出在哪里。其实可以和真正意义上的WebGL高性能应用做一下比较比如说mapbox、deck.gl等,基于GPU实时将大规模的矢量数据网格化并且完成渲染,同等量级下对比ThreeJS别说实时解析了即便是静态模型性能差距都很大(感觉有好几倍),并且人家还实现了模拟的64位精度运算。

其实真正我想说的是一个定位的问题,假设你说你要做网页游戏那么有unity3D、你要做GIS有mapbox。在各个具体的领域总有更为成熟且全面的WebGL框架给你使用。但是ThreeJS的定位不在行业应用上,它的目的很简单只是为了在保证应用场景广度与拓展性的情况下降低WebGL的上手难度(只要写过原生WebGL都知道我在说什么)。这样的东西缺点显然很多我上面说的只是冰山一角但是这些缺点根本就不重要,试问任何三维Web所要求的任何功能难道ThreeJS不能满足吗?即便真的不能满足那么拓展一下不就可以了?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注