关键代码
- 无论时候开启抗锯齿,都会进行二维膨胀:
template <typename T>
inline __device__ T add_blur(const T eps2d, mat2<T> &covar, T &compensation) {T det_orig = covar[0][0] * covar[1][1] - covar[0][1] * covar[1][0];covar[0][0] += eps2d;covar[1][1] += eps2d;T det_blur = covar[0][0] * covar[1][1] - covar[0][1] * covar[1][0];compensation = sqrt(max(0.f, det_orig / det_blur));return det_blur;
}
数学公式直观理解:
当然把eps2d设为0,就能不用二维膨胀
如果开启抗锯齿的话会对透明度进行衰减:
if compensations is not None:opacities = opacities * compensations
mip-splatting 公式
-
3D 滤波
-
2D 滤波
结论
- gsplat 没有实现 mip-splatting 的三维滤波
这个可以在渲染前(Pre-rendering),修改高斯的属性实现
- gsplat 在开启抗锯齿时,相当于“二维滤波”;在关闭时,相当于“二维膨胀”。
实验
不开启抗锯齿,s = 0.3
不开启抗锯齿,s = 0
不开启抗锯齿,s = 1.0
不开启抗锯齿,s = 3.0
开启抗锯齿,s = 0.3
开启抗锯齿,s = 1.0
开启抗锯齿,s = 3.0