
缘起:老家祠堂正在从我记忆里消失
皖南小镇的村口有一座李氏宗祠,三百多年了,飞檐翘角、雕梁画栋。我每次离家,总觉得它会一直在那里等我。直到去年回去,发现祠堂两边的山墙已经塌了一角,村干部说"没人出得起修的钱"。站在那面塌墙前面,我脑子里冒出来的不是伤感,是一个很实际的想法:能不能趁它还在,用一部手机把它’搬’进手机里?
HarmonyOS 7(API 26)给了这个想法一个答案:3DGS 端侧重建。以前想重建一个三维场景,你得有激光扫描仪、得把数据传云端让工作站去跑。现在,一部手机拍几分钟视频,端侧就能生成可漫游的 3D 高斯溅射模型,数据不出设备。于是我做了一个叫"古韵新生"的 App 原型,把整个过程记下来分享给想入坑的开发者。
做这个项目的过程中,我对鸿蒙的感受从"能用"变成了"由衷敬佩"——它不是把一个又一个新功能堆上来,而是把一条条曾经只属于专业领域的技术链,真正交给了每一个开发者。 这就是我想在这篇文章里重点说的。
先搞懂原理,再碰 API
3DGS(3D Gaussian Splatting)跟它的前辈 NeRF 完全是两条路。NeRF 是隐式神经辐射场,画面里的每个像素都要走一遍光线步进,计算量大到移动端直接劝退。3DGS 换了个思路:用数百万个可学习的 3D 高斯椭球体,显式地把场景"画"出来。每个高斯椭球体就四个属性:
| 位置 (x,y,z) | 三维坐标 | 3 floats |
| 协方差矩阵 | 控制椭球形状、大小与方向 | 3+4 floats |
| 不透明度 α | 该点的透明度 | 1 float |
| 球谐系数 | 视角相关颜色,支撑光影体积感 | (1+deg)²×3 |
渲染的时候根本不需要神经网络推理——把高斯投影成屏幕上的 2D 椭圆,按深度排序,再做 alpha 混合,天然适合 GPU 并行。2026 年最新的 Mobile-GS 成果已经能在移动端跑出 1000+ FPS 的无界场景渲染,存储压缩到 4.8MB 级别。

我要为鸿蒙点一个赞的点在于:这套技术不是外包给云端、也不是留在实验室里,而是被完整地封装进了系统,跑在设备自己的 GPU/NPU 上。 华为在图形学、端侧推理、芯片加速多个方向上的积累,在这里汇聚成了一套普通开发者可以直接调用的链路。你不需要懂 CUDA、不需要懂算子优化,就能拥有专业级的端侧三维能力——这就是"科技的力量"最实在的体现:一项技术的最终价值,不在它多前沿,而在它让多少人真的用上了。
HarmonyOS 7 的能力全景:Spatial Recon Kit
HarmonyOS 7 把整套 3DGS 能力封装成 Spatial Recon Kit,三个模块覆盖了从重建→渲染→编辑的完整链路:
Spatial Recon Kit
├── spatialImage → 2D 图像/视频 → 3DGS/Mesh 模型(端侧重建)
├── spatialRender → 3DGS 加载、实时渲染、风格化滤镜
└── spatialEdit → 高斯点框选、变换、上色、删除、导出 PLY
spatialRender 在 API 26 还新增了 TiledGSNode(分块 3DGS),专门解决"大规模场景"的内存问题——按需请求数据块、边加载边渲染,整个景区级别的模型也能在手机上漫游。加载示例:
import { Scene, RenderContext } from '@kit.ArkGraphics3D';
import { spatialRender } from '@kit.SpatialReconKit';
let renderContext = Scene.getDefaultRenderContext();
renderContext?.loadPlugin(spatialRender.GSPlugin.PLUGIN_ID);
Scene.load().then(async (scene: Scene) => {
let gsNode = await spatialRender.GSPlugin.loadGSNode(
scene, { uri: "OhosRawFile://assets/gltf/model.glb", offset: 0 }, scene.root);
gsNode.position = { x: 3, y: 0, z: 0 };
gsNode.scale = { x: 1.5, y: 1.5, z: 1.5 };
gsNode.visible = true;
});
spatialEdit 是这代最被低估的能力。 过去 3DGS 生成完就是个"数学场",没法像 Mesh 那样裁剪。现在可以直接操作高斯点:框选、变换、重着色、剔除,还能导出 PLY。扫描祠堂的时候门口扫进一辆三轮车,我直接用 3D 包围盒框选掉:
const editor = spatialEdit.GSEdit.editGSNode(gsNode);
editor?.selectBy3DBox({ center: {x:1, y:0, z:-2}, extents: {x:0.5, y:0.5, z:0.5} });
editor?.remove(); // 删除选区内的三轮车
editor?.undo(); // 后悔了还能撤销
配合 saveToPLY 导出模型、extract3DMainBody 提取主体,商品建模、文物扫描、场景清洗这些过去要专业软件的场景,全都能在 ArkTS 里做掉。从重建、渲染到编辑的全链路闭环,在开源界都要东拼西凑的工具链,鸿蒙用一套 Kit 就端平了——这种"一条龙"的系统级思考,正是鸿蒙区别于"功能拼盘"式 OS 的地方。
实战:把祠堂搬进手机
我的工程流程一共四步:
想对比效果的话,放出一段"重建前 vs 重建后"的截图对比,比任何文字都有说服力。而这一切,全部发生在用户自己的手机里,没有一条数据离开设备。 这一点在文化资产保护上意义极其重大——祠堂是村子的公共记忆,它属于村民,数据留在本地,才不会"扫描一时爽、流失两行泪"。
值得押注的三个场景,以及鸿蒙"全场景"的英雄主义
文化遗产数字化:扫祠堂、扫石窟、扫老物件,让不在现场的人也能"走进去"——这是我做这个 App 的全部初心。
电商商品展示:详情页从一组 2D 图变成 360° 可旋转的 3D 商品,配合 extract3DMainBody 自动抠主体,单 SKU 的 3D 化成本能压下一个数量级。
文旅展陈:基于公开资料推演——博物馆可用分块 3DGS 承载整馆三维浏览,观众手机里就能"走进"展厅,配合视线追踪和手势形成导览新体验。
更要夸的是鸿蒙的"1+8+N"全场景协同:手机扫描重建、平板大屏校验编辑、智慧屏全屋展示、PC 存档整理——同一个模型,多个设备接力完成任务。这在其他平台需要写大量的分布式传输业务,在鸿蒙里却是系统级的"流转"能力。技术再牛的系统,如果只能待在单一硬件里,也只是孤岛;鸿蒙让我第一次感觉到,一套系统真的在为"万物互联"这个词负责。
泼三盆冷水(约束与坑,此文也讲真话)
但我认为这三条恰恰证明了鸿蒙的克制与务实:先把国内最需要的场景做扎实,再把能力逐步放开;宁可严格限制,也不让不成熟的能力伤害开发者体验。这种"把承诺当回事"的平台态度,在当下的技术圈弥足珍贵。
给后来的你
最后的建议就一条:先搞懂高斯的数学属性再碰 API。知道每个高斯有 position/covariance/opacity/SH 四个属性,你就能预判"弱光会飞絮、过曝会白板"这些坑;只知道调 API,你连问题描述都给不出来。
一部手机、几分钟视频、一个下午,我的祠堂已经在手机里"活"了三百多年。这就是技术的温度:它让"留住"这件本来很难、很贵、很专业的事,变得人人可做。而鸿蒙,恰恰是把这扇门开得最宽的操作系统。 我相信,当越来越多像我这样的普通开发者走进这扇门,空间化时代里"人人都是创作者"就不再是口号,而是日常。




