为什么底层组件尽量自己开发

科技   2024-09-28 22:18   上海  

我们知道在工业软件开发中需要很多第三方组件。这是很正常的事情。大厂的各种“全家桶”,安装包动辄几个G,多则几十个G。其实大部分都是第三方库的文件。


这是某软件安装目录下的文件,随便一个三方库就能占到1个G。



关于三方库的使用,简单做过介绍,参考:

软件研发中 如何选择第三方库(点击链接查看)


讲一个曾经的经历:

差不多15年前接手过一个基于web的CAE后处理项目,技术方法是图形显示用JAVA,做成Active控件,然后插入到html文件里。这个项目可以支持NASTRAN,ANSYS,ABAQUS,LSDYNA等老牌软件的二进制结果文件,各种图形操作,渲染,云图,动画,查询等一系列功能。早期用独立网页仿真的,不少用的该是这个产品。


这个项目是一个外国团队用了2年时间写的,然后被一家大公司买去。最开始看代码之前,以为基于某三方库,再不济也是基于OpenGL。结果真正拿到代码的时候,就傻眼了:没有依赖任何三方库!画线都是基于最原始的Bresenham算法,更不要提基础的矩阵运算,视图变换,解方程,面渲染,抗锯齿,背景剔除,LOD,光照算法,各种渲染模式,甚至当时还没流行的PBR也有demo。几乎是把计算机图形学底层内容全部用JAVA实现了一遍,并工程化,而且在硬件层面也做了相当多的优化。


当时问过初始研发团队两个问题:

  1. 为什么不用C++

  2. 为什么不用OpenGL


回答是:

  1. 从底层做图形学,C++和JAVA没区别,JAVA还没有内存泄漏问题。

  2. OpenGL语法太复杂,功能不完整


而我差不多花了1年多时间才完全把代码读通,和VTK5.0做过比较,效率和工程化远在VTK之上。VTK5.0 用在实际工程中也是一堆bug。


问题是为了追求性能,做了不少基于硬件的加速操作,而硬件更新太快,这一部分的优势后来反而成了瓶颈,另外比较大限制的是JAVA虚拟机内存问题。


这套系统优势还是比较明显的,出现任何bug,几乎都能通过修改代码解决,不存在被第三方库卡住的问题;由于底层技术全部独立实现,可以很容易在客户那里针对项目特点做优化。


由于硬件发展,图形渲染在工业仿真软件中的地位,产品定位,以及众所周知的技术选型,软件工程等原因,产品并没有很好的长期发展下去,实属非常可惜。但是从图形学技术角度看,是非常优秀的作品。


之前有不少朋友问题,为什么公众号关于工业软件里图形渲染的内容非常少,这个也算是其中原因之一吧。

多物理场仿真技术
可能是国内最专业,最有深度的 CAD CAE EDA CAM TCAD CFD AI等工业软件研发技术介绍和工业软件资讯分析
 最新文章