HarmonyOS鸿蒙Next中3DGS能否与几何体做深度遮挡?
HarmonyOS鸿蒙Next中3DGS能否与几何体做深度遮挡? 问题:
@hms.graphics.spatialRender GSPlugin 渲染的 3DGS 高斯泼溅,能否与 @kit.ArkGraphics3D 几何体做深度遮挡?
需求: 使用 spatialRender.GSPlugin.loadGSNode() 加载 3D Gaussian Splatting (.ply) 模型渲染正常。现需要在场景中叠加一个立方体包围线框盒(12 条 Geometry+CubeGeometry 线段),期望高斯点云与包围盒线段互相做正确的深度遮挡:靠近相机的高斯遮住后方线段,远离相机的线段被前方高斯遮住。
实测结果:
3dgs始终覆盖在包围盒上,没有任何深度交互,无论包围盒材质如何配置。
环境:
SDK:HarmonyOS 6.1.1 Beta1 SDK,原样包含OpenHarmony SDK Ohos_sdk_public 6.1.1.115 (API Version 24 Beta1)
设备:pura 90 pro HarmonyOS 6.1.0.120 SP30
模块:@kit.ArkGraphics3D + @hms.graphics.spatialRender

更多关于HarmonyOS鸿蒙Next中3DGS能否与几何体做深度遮挡?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前从公开能力来看:
@hms.graphics.spatialRender.GSPlugin
渲染的 3DGS(Gaussian Splatting)与:
@kit.ArkGraphics3D
里的常规 Geometry / Mesh / Line 并不能真正共享深度缓冲(Depth Buffer)。
所以你现在看到的现象:
3DGS 永远覆盖在线框盒上方
其实是当前版本的已知限制,不是你的材质配置问题。
结论先说
目前 HarmonyOS 的:
GSPlugin
基本是:
独立渲染通道(独立 Render Pass)
并没有和 ArkGraphics3D 主场景做统一 ZBuffer 合并。
因此:
- Geometry 无法遮挡 3DGS
- 3DGS 也无法遮挡 Geometry
- 不支持真正的 Depth Test 互操作
你现在这个:
3DGS + CubeGeometry线框
无法实现类似:
Unity / Unreal / Three.js
那种统一深度排序。
为什么会这样?
3DGS 本质不是普通 Mesh。
GSPlugin 内部通常是:
GPU Instancing + Splat Shader
或者:
Compute + Billboard
渲染方式。
而且为了性能:
- 会自己做排序
- 自己做 blending
- 自己做 splat accumulate
很多 3DGS 引擎:
根本不写标准Depth Buffer
因为:
半透明高斯
和传统深度缓冲天然冲突。
你现在看到的本质
现在大概率是:
先渲染 ArkGraphics3D
后渲染 GSPlugin Overlay
或者:
GSPlugin 使用单独 RenderTarget
最终 compositing 到屏幕。
所以:
Depth 根本没共享
你问的几个核心问题
1. 是否支持与 Geometry 深度交互?
目前公开 API:
不支持
没有看到:
- shared depth buffer
- custom render pass
- depth attachment injection
- z-prepass interop
相关能力。
2. 是否能获取 GSPlugin DepthTexture?
目前也没有公开 API。
没有类似:
getDepthTexture()
或者:
attachDepthBuffer()
之类接口。
3. 能否通过材质强制开启 depthTest?
即使:
material.depthTest = true
也没用。
因为问题不是:
材质没开深度测试
而是:
两个系统不在同一个深度上下文
4. 能否自定义 GS Shader?
目前也不行。
GSPlugin 现在属于:
黑盒封装
没有:
- shader hook
- render callback
- custom fragment
- custom pass
能力。
你之前提到的:
Three.js patch fragment shader
那套目前在 HarmonyOS GSPlugin 上做不了。
目前官方能力更像:
Viewer / 展示组件
而不是:
完整可编程渲染管线
目前可行的替代方案
方案1:纯视觉假遮挡(推荐)
例如:
- 让包围盒半透明
- 降低亮度
- 改为虚线
- 使用 additive blending
视觉上弱化穿帮。
这是目前最现实方案。
方案2:把线框也做进 3DGS
例如:
- 在 ply 预处理阶段
- 将 box edge 转成 splat 点
这样:
整个场景都属于 GSPlugin
自然就有统一遮挡。
很多 3DGS 编辑器就是这么干。
缺点:
- 线框不可实时编辑
- 不是真 Geometry
方案3:双Pass深度图方案(理论可行)
理论流程:
GSPlugin → 输出深度图
Geometry → 读取深度图裁剪
但:
HarmonyOS 当前没开放
做不了。
方案4:自己实现3DGS渲染(重型方案)
不用:
GSPlugin
自己:
- 解析 ply
- 自写 Shader
- 用 ArkGraphics3D / Native XComponent
- Vulkan/OpenGL ES
实现 Gaussian Splatting。
这样:
深度完全可控
但工程量极大。
你当前这个需求在业界其实很典型
尤其:
- AR空间裁切
- 工业扫描
- 空间标注
- 房间切片
- Bounding Box
都会要求:
3DGS 与 Geometry 深度融合
但现在很多移动端 3DGS SDK 都还没开放这能力。
你这个截图其实说明了一个关键点
你那个:
白色线框完全浮在最上层
说明:
GSPlugin 连 Depth Write 都没参与
否则至少会局部遮挡。
一句话总结
目前 HarmonyOS 的:
@hms.graphics.spatialRender.GSPlugin
渲染 3DGS 时,尚未与:
@kit.ArkGraphics3D
共享深度缓冲,因此:
不支持 Geometry 与 3DGS 的真实深度遮挡
当前没有公开 API 支持:
- 自定义 GS Shader
- 注入 RenderPass
- 获取 GS DepthTexture
- clip plane / AABB depth clipping
现阶段更建议:
纯视觉方案
或者:
将辅助几何也转成 splat
来规避。
更多关于HarmonyOS鸿蒙Next中3DGS能否与几何体做深度遮挡?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
厉害!
在HarmonyOS Next图形渲染中,3DGS(3D高斯泼溅)可以通过深度测试与几何体实现深度遮挡。需在渲染管线中正确配置深度缓冲区(depth buffer)、启用深度写入与测试,并确保3DGS的深度值计算与几何体一致。这样即可实现正确的前后遮挡关系。
当前 spatialRender.GSPlugin 渲染的 3DGS 使用独立的渲染管线,与 ArkGraphics3D 的深度缓冲区并未共享。因此场景中的高斯点云与几何体之间无法进行深度比较,表现为 3DGS 始终覆盖在其他几何体上层,无法实现正确的相互遮挡。
这是当前版本的已知限制,后续版本计划统一深度缓冲以实现正确的混合渲染。

