代码之家  ›  专栏  ›  技术社区  ›  K.Miao

启用混合时如何避免与背景混合

  •  1
  • K.Miao  · 技术社区  · 8 年前

    我正在尝试实现potree实现混合splat的功能。在 this example ,禁用时 EDL 然后切换 quality 选择 Splats Appearance 文件夹中,它显示混合效果。

    我的问题是,它如何避免这些点与背景融合。当我在自己的项目中启用混合时,这些点会与我的背景色混合,看起来不太好。避免与背景混合的优雅解决方案是什么?

    你可以看到这些点正在与白色背景混合。我正在使用自定义着色器来设置alpha值。在此图像中,alpha值为0.5。

    image

    1 回复  |  直到 5 年前
        1
  •  2
  •   Markus    8 年前

    Potree使用更复杂的混合函数,需要3次传递。

    1. 可见性过程:渲染深度。
    2. 混合深度
    3. 着色/规格化过程:规格化加法输出,使其从明亮的加法过渡到平滑混合的外观。

    enter image description here (编辑:取自 http://www.ahornung.net/files/pub/Hornung_PBG05.pdf )

    每个点的权重w取决于到中心的距离。 片段着色器的输出为: gl_FragColor = vec4(w * rgb, w)

    enter image description here

    gl_FragColor = vec4(weightedSumOfRGBs / sumOfWeights, 1.0)

    最终结果是平滑混合点,过渡硬度取决于权重函数:

    enter image description here

    查看本论文以获得更详细的解释(第4.2.2章):

    https://www.cg.tuwien.ac.at/research/publications/2016/SCHUETZ-2016-POT/SCHUETZ-2016-POT-thesis.pdf

    或者这篇算法的原始论文:

    编辑: