我正在尝试实现potree实现混合splats的功能。在this example中,当禁用EDL
并将quality
选项切换到Splats
文件夹中的Appearance
时,会显示混合效果。
我的问题是如何避免那些与背景混合的点。当我在我自己的项目中启用混合时,这些点会与我的背景颜色混合并且看起来不太好。什么是避免与背景混合的优雅解决方案?
编辑:
您可以看到这些点与白色背景融为一体。我正在使用自定义着色器来设置alpha值。在此图像中,alpha值为0.5。
答案 0 :(得分:1)
Potree使用更复杂的混合功能,需要3次传递。
(编辑:取自http://www.ahornung.net/files/pub/Hornung_PBG05.pdf)
属性pass将属性值的加权和输出到rgb通道,并将权重和输出到alpha通道。
每个点的重量w取决于到中心的距离。
片段着色器的输出为:gl_FragColor = vec4(w * rgb, w)
规范化过程是一个屏幕空间后期处理着色器,它将帧缓冲区中的每种颜色除以权重:
gl_FragColor = vec4(weightedSumOfRGBs / sumOfWeights, 1.0)
最终结果是平滑混合点,其过渡硬度取决于重量函数:
检查本论文以获得更详细的解释(第4.2.2章):
https://www.cg.tuwien.ac.at/research/publications/2016/SCHUETZ-2016-POT/SCHUETZ-2016-POT-thesis.pdf
或者算法的原始论文:
http://www.ahornung.net/files/pub/Hornung_PBG05.pdf
编辑:
另外,为避免透视到背景,请使用黑色和alpha = 0清除缓冲区,然后使用高质量的3遍splatting算法渲染您的点,并在最后一步中渲染背景。只有在没有渲染点的区域才能看到背景。