一.万花筒的全息3D建模技术步骤
1.相机姿态恢复
相机姿态恢复是指找到每一张图片拍摄时所在的精确位置,通过该位置我们可以将所有的图片拼接成一个大场景。我们的相机拼接算法具有三个突出特点:高精度,轻量化以及大规模化。万花筒设备采集点距离通常较大,我们创新性的将图片的特征与激光雷达采集的点云特征进行融合,解决了传统SLAM, sfm等基于图像无法重建距离较远图片对的问题。同时我们针对手机等边缘设备进行了优化,使得用户可以实时的在手机上预览采集进度,指导用户进行高效采集。在服务端,基于阿里云计算平台,我们开发了分布式相机重建算法,可以处理万平米级别场景,如机场,展会等大场景。相关的论文发表在模式识别顶级期刊PAMI上。
2.密集点云重建
密集点云是指通过图片生成高质量的点云,该点云与图片的一致性更高,是激光雷达扫描出来的点云的有效补充。点云质量越高,最后生成的模型也就越精细。传统的密集点云方法有patchmatch, planesweeping,最近也有基于神经网络的方法mvsnet,调研发现,目前已有的方法在速度和精度上都无法满足我们的需求。因此我们自研了神经网络Cascade MVS Net,该方法通过coarse to fine的方式,逐步缩小深度的搜索空间,在减少显存消耗的同时,大大提升了重建的分辨率和精度。在公开数据集上DTU上测试表明,我们的算法在速度上处理一张图只需0.5秒, 是目前最好方法的三倍,精度达到0.3毫米,是目前最好方法的两倍,在TempleAndTanks公开数据上,我们的算法精度排名第一,远超市面上,以及学术界中已有的密集点云重建方法,基于该方法的论文接受为CVPR2020 Oral.我们还搭建了一套三维重建、网格重建以及纹理贴图的完整建模方案。
3.网格纹理模型生成
我们还搭建了一套三维重建、网格重建以及纹理贴图的完整建模方案。为了解决各种室内环境特别是大场景内存占用和精度问题,我们提出了一种LOD多尺度网格模型生成算法,通过场景划分、网格合并和简化算法生成不同面数的三维网格模型,解决了大场景重建精度、规模、内存占用、几何连续性等问题。同时我们也提出了相应的多尺度纹理贴图算法。我们的算法首先基于最精细的分块网格模型贴纹理,并通过局部和全局纹理融合算法、纹理投射算法等解决纹理连续性、纹理精度等问题,确保不同尺度的网格模型的纹理基本没有精度损失。目前我们已经将我们的三维重建方案部署到了阿里云计算平台,提供了一整套包括数据采集、算法计算以及前端渲染的完整产品方案,重建规模可达到2万平米,可应用于多层建筑结构(众趣等国内竞品无法做到),模型精度5cm内,优于竞品37%(MatterPort 3D公开数据集),每小时可重建100平米,2019云栖大会3500平米会场6小时内完成建模。在重建规模、精度和效率方面均达到业内领先。
二.渲染
为了将虚拟世界的结果呈现给用户让用户有沉浸体验感,然而受限于当前移动设备尤其是web平台的硬件限制,在用户端进行高质量的实时绘制具有巨大的挑战。因此,高效渲染算法的研发显得尤为重要。为了解决移动端兼顾高效和高质量的渲染问题,我们不依赖任何第三方3D引擎,而是自己直接基于底层硬件图形API开发针对性的高效渲染引擎,从而最大化的减少额外的overhead。经测试可以比three.js引擎低30%的额外调用开销。我们还引入了很多高效的渲染算法,例如完整的PBR+ HDR渲染管线,完整的延迟渲染管线(将多光源下的渲染复杂度从O(MN)降低到O(N))从而大大加速在移动端进行渲染的计算效率和渲染质量。为了实现高质量的渲染效果,我们将很多桌面端的渲染算法在移动端进行了实现并植入引擎中,在这个过程中,为了适配移动端较弱的计算能力,我们做了大量的优化,包括采样优化,动态渲染比率,分时域渲染,LOD等。