欢迎光临
我们一直在努力

【共创稿事节】一部手机,让三百年的祠堂活了过来:HarmonyOS 7 端侧 3DGS 重建全记录

请添加图片描述

缘起:老家祠堂正在从我记忆里消失

皖南小镇的村口有一座李氏宗祠,三百多年了,飞檐翘角、雕梁画栋。我每次离家,总觉得它会一直在那里等我。直到去年回去,发现祠堂两边的山墙已经塌了一角,村干部说"没人出得起修的钱"。站在那面塌墙前面,我脑子里冒出来的不是伤感,是一个很实际的想法:能不能趁它还在,用一部手机把它’搬’进手机里?

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 的地方。

实战:把祠堂搬进手机

我的工程流程一共四步:

  • 拍摄:绕着祠堂缓慢匀速走一圈,拍约两分钟视频。血泪教训:覆盖率比时长关键——我第一次拍了八分钟,结果有一面墙没走到,重建出来是"半张脸";
  • 重建:spatialImage 端侧重建出 3DGS 模型,中高端机型分钟级内出结果(首次有模型编译开销,需要做等待引导 UI);
  • 清洗:spatialEdit 框选剔除杂物、用 undo 反复调整;
  • 漫游:spatialRender 加载,做出可旋转缩放的观赏界面。
  • 想对比效果的话,放出一段"重建前 vs 重建后"的截图对比,比任何文字都有说服力。而这一切,全部发生在用户自己的手机里,没有一条数据离开设备。 这一点在文化资产保护上意义极其重大——祠堂是村子的公共记忆,它属于村民,数据留在本地,才不会"扫描一时爽、流失两行泪"。

    值得押注的三个场景,以及鸿蒙"全场景"的英雄主义

    文化遗产数字化:扫祠堂、扫石窟、扫老物件,让不在现场的人也能"走进去"——这是我做这个 App 的全部初心。

    电商商品展示:详情页从一组 2D 图变成 360° 可旋转的 3D 商品,配合 extract3DMainBody 自动抠主体,单 SKU 的 3D 化成本能压下一个数量级。

    文旅展陈:基于公开资料推演——博物馆可用分块 3DGS 承载整馆三维浏览,观众手机里就能"走进"展厅,配合视线追踪和手势形成导览新体验。

    更要夸的是鸿蒙的"1+8+N"全场景协同:手机扫描重建、平板大屏校验编辑、智慧屏全屋展示、PC 存档整理——同一个模型,多个设备接力完成任务。这在其他平台需要写大量的分布式传输业务,在鸿蒙里却是系统级的"流转"能力。技术再牛的系统,如果只能待在单一硬件里,也只是孤岛;鸿蒙让我第一次感觉到,一套系统真的在为"万物互联"这个词负责。

    泼三盆冷水(约束与坑,此文也讲真话)

  • 国内限定:Spatial Recon Kit 只支持中国大陆地区,港澳台除外;
  • 没有模拟器:官方明确标注"暂不支持模拟器",无真机场景只能做技术分析和架构设计;
  • 算力门槛:重建靠端侧 NPU/GPU,中低端机体验会明显打折。
  • 但我认为这三条恰恰证明了鸿蒙的克制与务实:先把国内最需要的场景做扎实,再把能力逐步放开;宁可严格限制,也不让不成熟的能力伤害开发者体验。这种"把承诺当回事"的平台态度,在当下的技术圈弥足珍贵。

    给后来的你

    最后的建议就一条:先搞懂高斯的数学属性再碰 API。知道每个高斯有 position/covariance/opacity/SH 四个属性,你就能预判"弱光会飞絮、过曝会白板"这些坑;只知道调 API,你连问题描述都给不出来。

    一部手机、几分钟视频、一个下午,我的祠堂已经在手机里"活"了三百多年。这就是技术的温度:它让"留住"这件本来很难、很贵、很专业的事,变得人人可做。而鸿蒙,恰恰是把这扇门开得最宽的操作系统。 我相信,当越来越多像我这样的普通开发者走进这扇门,空间化时代里"人人都是创作者"就不再是口号,而是日常。

    赞(0)
    未经允许不得转载:171主机测评 » 【共创稿事节】一部手机,让三百年的祠堂活了过来:HarmonyOS 7 端侧 3DGS 重建全记录
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址