本文档深入剖析了本项目的核心技术栈。重点阐述了如何利用 Web 标准技术实现“一次编写,全平台运行”,为何选择 3D Gaussian Splatting (3DGS) 作为核心渲染技术,以及如何利用 AI 辅助编程提升开发效率。
在传统的数字孪生开发中,通常需要为 Windows 开发 .exe,为 iOS 开发 .ipa,为 Android 开发 .apk,这不仅极大地增加了开发成本,也提高了用户的访问门槛(需要下载安装包)。
本项目基于 Web 标准 (HTML5 + WebGL) 构建。通过浏览器作为统一的运行时环境,我们抹平了底层操作系统的差异。用户无需下载任何插件或客户端,只需通过一个 URL 链接,即可在任何支持 WebGL 的设备上获得一致的沉浸式体验。从高性能的桌面工作站到便携的智能手机,甚至游戏主机,都能成为探索校园的窗口。
针对PC,手机端,手柄端分别开发三套操作逻辑,实现键盘,鼠标,手柄,触摸4种方式交互体验
在三维重建(3D Reconstruction)领域,长久以来存在着“速度”与“质量”的博弈。传统的多视图几何(MVS/Photogrammetry)技术成熟,但生成的网格(Mesh)难以表现复杂结构。2020年,神经辐射场(NeRF)的出现震惊了学界,它利用神经网络实现了照片级的视图合成,但其“隐式表达”导致推理速度极慢,动辄需要数秒渲染一帧,无法应用于实时交互。
3D Gaussian Splatting 是由 Kerbl 等人在 SIGGRAPH 2023 提出的里程碑式技术。它创造性地结合了 NeRF 的高质量与传统光栅化的极速。它放弃了神经网络的黑盒计算,回归到“显式点云”表达,并通过“高斯球抛雪球(Splatting)”算法,实现了 1080p 分辨率下的 100fps+ 实时渲染。这是目前唯一能在 Web 端同时实现照片级画质与实时帧率的技术方案。
在本项目立项之初,我们对比了传统倾斜摄影建模。校园环境具有两个显著特征,这正是传统技术的“死穴”:
3DGS 将场景表示为数百万个各向异性的 3D 高斯椭球。每个高斯球由以下参数定义:
渲染时,这些 3D 椭球被投影到 2D 屏幕平面(Splatting),然后根据深度进行排序,最后通过 Alpha Blending 公式叠加出最终像素颜色。这种计算过程完全可以并行化,极度适合 GPU 加速。
为了在网页端实现极致的加载速度,本项目摒弃了 Three.js 等庞大的通用引擎,采用了基于 原生 WebGL 2 API 的底层开发方案。核心架构参考了 Antimatter15/splat 的开源实现,并针对校园场景进行了深度定制。
gl.drawArraysInstanced 一次性通知 GPU 绘制数百万个实例,每个实例代表一个高斯点。texelFetch 通过位运算从纹理中“精准狙击”读取数据。顶点着色器 (Vertex Shader): 负责从四元数和缩放还原 3D 协方差矩阵,并将其投影到 2D 屏幕空间 (EWA Splatting)。随后计算 2D 椭圆的长短轴,将简单的矩形顶点拉伸、旋转(Billboarding),使其精确覆盖投影区域。
片元着色器 (Fragment Shader): 计算当前像素距离椭圆中心的距离 $A$。通过公式 $e^A \times \alpha$ 计算最终不透明度。如果距离太远 ($A < -4.0$),则直接 discard,从而在矩形上“雕刻”出完美的椭圆。
代码支持两种数据路径:.ply (标准点云) 通过 processPlyBuffer 解析标准头并预处理球谐系数;.splat (自定义二进制) 则是高度压缩的流式格式,支持 downsample 逻辑,实现“边下载边渲染”的渐进式加载体验。
未引入 glMatrix 等数学库,而是手写了 multiply4, invert4, rotate4 等矩阵运算函数。基于此实现了多模态输入支持:
原生支持手柄双摇杆飞行与按键交互
自研单指旋转、双指缩放与惯性算法
WASD + 方向键漫游控制
校园全景的原始 .ply 点云数据通常超过 1GB,Web 端直接加载会导致用户长时间等待甚至浏览器崩溃。
由于放弃了现成的游戏引擎,团队必须直接处理 Shader 编译、矩阵求逆运算以及 WebGL 上下文丢失等底层难题,技术跨度极大。
本项目全面引入大语言模型,进行代码辅助开发和测试纠错
invert4) 中的行列式计算 Bug,解决了相机画面黑屏问题。texelFetch 位运算逻辑,实现了从纹理中高精度还原 float32 数据。preventDefault),解决了浏览器滚动冲突。召开小组会议确定技术路线;使用无人机进行校园实地影像采集;制定数据规范与文件命名标准。
通过 RealityScan 生成建筑点云;使用 PostShot 进行高斯模型训练;使用 SuperSplat 进行模型裁剪与轻量化压缩。
搭建 Web 项目结构
修复模型加载错误;在不同设备(PC/iOS/Android)上进行压力测试;优化 Loading 体验与用户提示。
撰写技术文档与说明书;制作汇报视频与 PPT;发布 V1.0 正式版上线。