跳到主要内容

GLB 格式

GLB(二进制 glTF)可通过 Khronos KHR_gaussian_splatting 扩展保存高斯泼溅,使其进入标准 glTF 管线,并与普通网格、材质和动画共存于单文件。

可用 SplatTransform 创建,直接由 PlayCanvas 加载。

存储方式​

扩展将场景存为 POINTS 拓扑的 glTF 网格图元,各属性作为顶点属性:

属性类型内容
POSITIONVEC3中心位置
KHR_gaussian_splatting:ROTATIONVEC4xyzw 旋转四元数
KHR_gaussian_splatting:SCALEVEC3各轴线性空间尺寸
KHR_gaussian_splatting:OPACITYSCALAR已应用 sigmoid 的不透明度
KHR_gaussian_splatting:SH_DEGREE_{d}_COEF_{n}VEC3球谐系数,每个系数包含 RGB
COLOR_0VEC4不支持高斯泼溅的查看器使用的可选回退颜色

与 PLY 的差异:

  • 激活后数值:缩放为线性空间,PLY 为对数;不透明度已过 sigmoid,PLY 为变换前值。
  • 坐标系:标准 glTF 的 +Y 向上,不像 PLY 那样需要翻转旋转。
  • 回退渲染:不理解扩展的查看器仍可绘制 COLOR_0 点云。

创建 GLB​

用 SplatTransform 转换任意受支持格式:

splat-transform scene.ply scene.glb

在 PlayCanvas 中加载​

与其他 glTF 一样,GLB 以 container 资源加载,而非 gsplat:

const asset = new pc.Asset('scene', 'container', { url: 'scene.glb' });
app.assets.add(asset);
app.assets.load(asset);

asset.ready(() => {
// creates an entity hierarchy with gsplat components
const entity = asset.resource.instantiateRenderEntity();
app.root.addChild(entity);
});

容器通过 asset.resource.gsplats 暴露从属 gsplat 资源,与渲染资源和材质类似。应用必须注册 GSplatComponentSystem。

引擎支持说明​

  • 仅支持标准高斯泼溅的 ellipse 核,其他核按 ellipse 渲染,调试构建会警告。
  • 忽略 sortingMethod 和 projection,排序由全局 gsplat 设置控制。
  • 不支持仍处草案的 KHR_gaussian_splatting_compression_spz_2 压缩扩展。

何时使用 GLB​

GLB 未压缩,体积接近 PLY,适合标准 glTF 管线或与网格合并为单资源。

提示

Web 交付仍推荐 SOG,可压缩 15–20 倍,加载更快。