Technical Whitepaper V3.1

高斯视界:校园数字孪生
技术架构与实现原理

本文档深入剖析了本项目的核心技术栈。重点阐述了如何利用 Web 标准技术实现“一次编写,全平台运行”,为何选择 3D Gaussian Splatting (3DGS) 作为核心渲染技术,以及如何利用 AI 辅助编程提升开发效率。

01 UNIVERSAL ACCESS

基于 Web 的全平台无缝适配

打破设备壁垒:Write Once, Run Anywhere

在传统的数字孪生开发中,通常需要为 Windows 开发 .exe,为 iOS 开发 .ipa,为 Android 开发 .apk,这不仅极大地增加了开发成本,也提高了用户的访问门槛(需要下载安装包)。

本项目基于 Web 标准 (HTML5 + WebGL) 构建。通过浏览器作为统一的运行时环境,我们抹平了底层操作系统的差异。用户无需下载任何插件或客户端,只需通过一个 URL 链接,即可在任何支持 WebGL 的设备上获得一致的沉浸式体验。从高性能的桌面工作站到便携的智能手机,甚至游戏主机,都能成为探索校园的窗口。

针对PC,手机端,手柄端分别开发三套操作逻辑,实现键盘,鼠标,手柄,触摸4种方式交互体验

Windows
iOS / macOS
Linux
Android
HarmonyOS
PlayStation 5
02 CORE TECHNOLOGY

三维高斯渲染 (3DGS) 深度解析

1. 技术演进与历史背景

在三维重建(3D Reconstruction)领域,长久以来存在着“速度”与“质量”的博弈。传统的多视图几何(MVS/Photogrammetry)技术成熟,但生成的网格(Mesh)难以表现复杂结构。2020年,神经辐射场(NeRF)的出现震惊了学界,它利用神经网络实现了照片级的视图合成,但其“隐式表达”导致推理速度极慢,动辄需要数秒渲染一帧,无法应用于实时交互。

3D Gaussian Splatting 是由 Kerbl 等人在 SIGGRAPH 2023 提出的里程碑式技术。它创造性地结合了 NeRF 的高质量与传统光栅化的极速。它放弃了神经网络的黑盒计算,回归到“显式点云”表达,并通过“高斯球抛雪球(Splatting)”算法,实现了 1080p 分辨率下的 100fps+ 实时渲染。这是目前唯一能在 Web 端同时实现照片级画质实时帧率的技术方案。

2. 为什么校园场景必须用 3DGS?

在本项目立项之初,我们对比了传统倾斜摄影建模。校园环境具有两个显著特征,这正是传统技术的“死穴”:

  • 复杂的植被结构: 校园内植被茂密。传统 Mesh 建模必须构建闭合的三角面,面对树叶这种离散、细碎的结构,算法会强行将其“粘连”成一团糊状的块状物,看起来像融化的塑料,完全失去了树木的通透感。
  • 非朗伯体表面(Non-Lambertian): 图书馆、尚美楼存在大量玻璃幕墙。传统贴图是“烘焙(Baking)”上去的静态图片,无论从哪个角度看,反光都是死的。而 3DGS 携带球谐函数(SH Coefficients),能够计算出随观察视角变化的各向异性颜色,真实还原玻璃反光和金属高光。

3. 数学直觉与底层原理

3DGS 将场景表示为数百万个各向异性的 3D 高斯椭球。每个高斯球由以下参数定义:

  • 位置 (Position $\mu$): 椭球在空间中的 XYZ 坐标。
  • 协方差矩阵 (Covariance $\Sigma$): 决定了椭球的形状(长短轴)和旋转方向。
  • 不透明度 (Opacity $\alpha$): 决定了该点的透明程度。
  • 球谐系数 (SH): 存储颜色的频率信息,用于计算随视角变化的 RGB 值。

渲染时,这些 3D 椭球被投影到 2D 屏幕平面(Splatting),然后根据深度进行排序,最后通过 Alpha Blending 公式叠加出最终像素颜色。这种计算过程完全可以并行化,极度适合 GPU 加速。

维度
传统 Mesh 建模
3DGS (本项目)
基本单元
三角面片 (Triangle)
高斯椭球 (Gaussian)
植被表现
粘连、面片化、塑料感
(极大破坏沉浸感)
独立叶片、边缘柔和、自然通透
光照材质
静态贴图 (Diffuse)
无动态高光
视图依赖 (View-dependent)
真实玻璃反光
渲染速度
快,但受限于面数
极快 (Web端 60fps+)

Pipeline: 从采集到渲染

STEP 01
无人机影像采集
DJI Mini3,圆形航线,采集 4K 原始影像数据。
STEP 02
稀疏点云重建 (SfM)
使用 RealityScan 解算相机位姿,生成初始点云。
STEP 03
高斯训练与优化
PostShot 训练 30k 迭代,生成 .ply 模型。
STEP 04
Web 轻量化压缩
SuperSplat 裁剪无效区域,SH 系数量化,输出 .splat 格式。
03 CORE ARCHITECTURE

原生 WebGL 2 渲染架构

轻量化底层设计与开源致谢

为了在网页端实现极致的加载速度,本项目摒弃了 Three.js 等庞大的通用引擎,采用了基于 原生 WebGL 2 API 的底层开发方案。核心架构参考了 Antimatter15/splat 的开源实现,并针对校园场景进行了深度定制。

关键性能优化技术

  • 硬件实例化 (Hardware Instancing): 并没有为每个高斯球生成网格。我们仅定义了一个包含 4 个顶点的简单矩形 (Quad),通过 gl.drawArraysInstanced 一次性通知 GPU 绘制数百万个实例,每个实例代表一个高斯点。
  • 数据纹理化 (Data-to-Texture): 为了绕过 WebGL 属性数量限制,高斯点的属性(位置、旋转、缩放、颜色)被打包成一张巨大的 2D 纹理 (u_texture)。Shader 使用 texelFetch 通过位运算从纹理中“精准狙击”读取数据。
  • Web Worker 多线程排序: 透明度混合要求严格的“从远到近”绘制。我们将繁重的 CPU 排序任务(计数排序变体)剥离至 Web Worker 线程,计算排序后的索引 (depthIndex) 并回传,确保主线程 UI 不冻结。
// 核心渲染逻辑 (main.js) // 1. 极简几何体 (Quad) const triangleVertices = new Float32Array([-2, -2, 2, -2, 2, 2, -2, 2]); // 2. Vertex Shader: 从纹理读取数据 const vs = `#version 300 es uniform highp usampler2D u_texture; void main() { // 使用 gl_InstanceID 计算纹理坐标 uvec4 cen = texelFetch(u_texture, ...); // 还原 3D 协方差矩阵并投影... }`; // 3. 实例化绘制 (Instanced Draw Call) gl.drawArraysInstanced( gl.TRIANGLE_FAN, 0, 4, vertexCount );
04 MATH & INTERACTION

数学原理与交互系统

Splatting 着色器数学原理

顶点着色器 (Vertex Shader): 负责从四元数和缩放还原 3D 协方差矩阵,并将其投影到 2D 屏幕空间 (EWA Splatting)。随后计算 2D 椭圆的长短轴,将简单的矩形顶点拉伸、旋转(Billboarding),使其精确覆盖投影区域。

片元着色器 (Fragment Shader): 计算当前像素距离椭圆中心的距离 $A$。通过公式 $e^A \times \alpha$ 计算最终不透明度。如果距离太远 ($A < -4.0$),则直接 discard,从而在矩形上“雕刻”出完美的椭圆。

数据流与文件解析

代码支持两种数据路径:.ply (标准点云) 通过 processPlyBuffer 解析标准头并预处理球谐系数;.splat (自定义二进制) 则是高度压缩的流式格式,支持 downsample 逻辑,实现“边下载边渲染”的渐进式加载体验。

自研交互系统 (No Third-party Libs)

未引入 glMatrix 等数学库,而是手写了 multiply4, invert4, rotate4 等矩阵运算函数。基于此实现了多模态输入支持:

Gamepad API

原生支持手柄双摇杆飞行与按键交互

Touch & Inertia

自研单指旋转、双指缩放与惯性算法

Keyboard

WASD + 方向键漫游控制

05 CHALLENGES & AI

技术挑战与 AI 协同创新

CHALLENGE #01
大模型 Web 加载

500MB+ 模型文件的传输难题

校园全景的原始 .ply 点云数据通常超过 1GB,Web 端直接加载会导致用户长时间等待甚至浏览器崩溃。

✅ 解决方案: 使用 SuperSplat 工具进行模型裁剪,去除天空盒与远景杂物。同时配合流式加载进度条,缓解用户焦虑。
CHALLENGE #02
跨界开发门槛

艺术生如何突破全栈工程难关?

由于放弃了现成的游戏引擎,团队必须直接处理 Shader 编译、矩阵求逆运算以及 WebGL 上下文丢失等底层难题,技术跨度极大。

创新解法:AI 协同编程

本项目全面引入大语言模型,进行代码辅助开发和测试纠错

  • 数学算法纠错: AI 辅助排查了手写矩阵求逆函数 (invert4) 中的行列式计算 Bug,解决了相机画面黑屏问题。
  • Shader 逻辑优化: 辅助编写了复杂的 texelFetch 位运算逻辑,实现了从纹理中高精度还原 float32 数据。
  • 交互代码生成: 快速生成了适配移动端的 Touch 事件处理逻辑(preventDefault),解决了浏览器滚动冲突。
🚀 开发周期缩减:15个月+ ➔ 1.5个月
06 PROJECT SCHEDULE

项目开发时间轴

WEEK 1-4

前期策划与数据采集

召开小组会议确定技术路线;使用无人机进行校园实地影像采集;制定数据规范与文件命名标准。

WEEK 4-10

模型重建与 3DGS 渲染

通过 RealityScan 生成建筑点云;使用 PostShot 进行高斯模型训练;使用 SuperSplat 进行模型裁剪与轻量化压缩。

WEEK 10-21

前端开发

搭建 Web 项目结构

WEEK 22-30

系统整合与性能测试

修复模型加载错误;在不同设备(PC/iOS/Android)上进行压力测试;优化 Loading 体验与用户提示。

WEEK 31

最终交付与展示

撰写技术文档与说明书;制作汇报视频与 PPT;发布 V1.0 正式版上线。