抗锯齿
部分训练器采用类似 Mip-Splatting 的抗锯齿滤波:Postshot 默认启用,Brush 和 gsplat 提供相应模式。这类数据渲染时需要匹配的不透明度补偿,否则细小或远处单元过亮,毛发细节闪烁。未使用滤波训练的数据则必须不补偿,否则会过淡。
自动检测
默认按文件要求渲染。加载时,文件记录的训练模式设置资源的 antiAlias:
| 格式 | 记录方式 |
|---|---|
| PLY | Postshot 的头部注释 postshot.anti_aliasing=1,或 Brush、SplatTransform 的 SplatRenderMode: mip |
| SOG | meta.json 中 "model": "antialiased" |
| 流式 SOG | lod-meta.json 中相同 model,适用于全部流式分块 |
| SPZ | 头部抗锯齿标志 |
未记录模式的文件、LCC2、glTF 和程序化单元不补偿。同场景可混合两种训练方式,各用自身设置。
SplatTransform 在格式转换时保留训练模式。
未记录训练模式的文件
可自行设置资源 antiAlias,随时修改:
const asset = new Asset('scene', 'gsplat', { url: 'scene.ply' });
asset.ready(() => {
// this scene was trained with anti-aliasing, but its file does not record it
asset.resource.antiAlias = true;
const entity = new Entity();
entity.addComponent('gsplat', { asset });
app.root.addChild(entity);
});
app.assets.add(asset);
app.assets.load(asset);
流式场景资源为 GSplatOctreeResource,设置适用于全部分块。
全场景覆盖
app.scene.gsplat.antiAlias 默认 undefined,让各资源自行决定。设 true 或 false 可忽略文件记录,对全部单元强制开启或关闭补偿:
// render every splat without the compensation
app.scene.gsplat.antiAlias = false;
// let each splat follow its resource again
app.scene.gsplat.antiAlias = undefined;
滤波大小
训练器采用不同大小:Mip-Splatting、Brush mip 模式、LichtFeld Studio 和 Spirula 用 0.1 平方像素,gsplat 抗锯齿模式用 0.3。文件不记录大小,应设置 app.scene.gsplat.antiAliasFilterSize 匹配训练器,默认 0.1。大于训练时大小会使结果过软:
// splats trained with gsplat's anti-aliased mode
app.scene.gsplat.antiAliasFilterSize = 0.3;
大小只作用于补偿单元,其他始终使用标准训练的 0.3 滤波。
性能
补偿每单元增加少量指令。混合两种训练方式时,还需读取逐单元标志,产生同类单元场景没有的少量开销。