前言
之前采用的方案是draco库压缩。这个在Blender中本身自带的,通过减少顶点数起到压缩大小的效果。是一种有损压缩,尤其在人物渲染方面,身体上会出现很多洞洞。在有形态键的人物模型上压缩率也不是很高,100M顶多压缩到90M。而且前端通过decoder解算的过程也非常耗时,decoder本身的js文件体积也很大,非常不划算。
压缩模型
将glb模型直接打包成zip。在前端使用jszip解压。大大减少了加载模型的速度。
使用rust写一个解压工具,将其转化成wasm包代替jszip,可以发现wasm的冷启动性能确实要比js好很多,可以将解压的时长从几十到100毫秒降低到1毫秒左右。
对glb模型的加密。
随着越来越多的高精度模型,而且需要给别的客户做演示,所以非常有必要对glb模型做加密处理。这个也是借鉴 nexthuman,用了加密的方式,让我们这些小白用户始终拿不到它的模型文件。
这个加密之后就需要在前端解密的过程中不能延长资源加载时间,影响用户体验。
为了提供效率,作者提出截取文件buffer的一部分进行加密,而不要对整个文件加密,同时将解密过程也放到wasm中,提升解算效率的同时也增加了安全性。采用对称加密的算法,同一个方法既可以用于加密,也可以用来解密。
按照模型加载的流程,解密的操作应该放在解压缩之后,序列化之前,那么如何判断数据是否进行了加密呢,可以通过判断解压数据decode以后是否有glTF的标记来确定。
更多优化参考:https://mp.weixin.qq.com/s/6EeonnvxzeQjDouSMHEHRQ
标签:解压,加密,模型,解密,wasm,优化,glb From: https://www.cnblogs.com/Wei-notes/p/18400159