STL文件是一种非常简单且实用的三角形网格文件,他只按照三角面片的方式存储了所有的面信息及法矢量,不包含纹理以及其他任何媒体信息,主要存储格式分为:ASCII码格式、二进制格式。
这种文件格式在工业上以及3D打印行业应用非常广泛,但是Unity并不支持这种格式的模型,原因可能是因为STL模型的顶点普遍量级过大,随随便便一个模型都有可能越过了Unity单个网格顶点数不能超过65000的上限,以及他自身在未经过3DMax或maya等的二次加工前提下并不能表现出良好的渲染效果的原因。
综上所述,貌似几乎不会有哪个吃撑了的会想直接将STL模型拿到Unity中开发,毕竟那样的计算量级确实过于庞大了。目前的效果,导入一个4M的STL模型就花了将近5分钟!对了,到这里我不得不吐槽Unity的某些机制了,我可以理解为Unity将编辑器主线程的资源分配做了极大限制,在不开其他线程的情况下,主线程导入一个4M的STL模型需要约20几分钟,开一个线程来单独处理的话,只需要5分钟左右,但再开10个线程或者100个线程的话(不存在同步锁),处理时间几乎也是5分钟左右,当然100个线程电脑几乎死机,我查了一下这应该是由于进行的是内存计算的原因,多线程并不能优化本地内存计算的效率,不过在子线程中处理运算与在Unity主线程中处理却是有着本质区别的。
首先,在网上随便下了一个STL模型,因为一直没找到ASCII码格式的,所以暂时只处理二进制格式的文件。
模型原图:
将它拖到工程中,先重写DefaultAsset的OnInspectorGUI,使他看起来像一个我们已知的文件,DefaultAsset代表的是Unity缺省资源,不可识别的资源,我们在OnInspectorGUI中