Three.js 启用混合时如何避免与背景混合
我正在尝试实现potree实现混合Splat的功能。在中,当禁用Three.js 启用混合时如何避免与背景混合,three.js,shader,point-clouds,Three.js,Shader,Point Clouds,我正在尝试实现potree实现混合Splat的功能。在中,当禁用EDL并将quality选项切换到Appearance文件夹中的Splats时,会显示混合效果 我的问题是,它如何避免这些与背景混合的点。当我在自己的项目中启用混合时,这些点与我的背景颜色混合,看起来不太好。避免与背景混合的优雅解决方案是什么 编辑: 您可以看到这些点正在与白色背景混合。我正在使用自定义着色器设置alpha值。在此图像中,alpha值为0.5 Potree使用了一个更复杂的混合功能,需要3次传递 可见性过程:渲染深度
EDL
并将quality
选项切换到Appearance
文件夹中的Splats
时,会显示混合效果
我的问题是,它如何避免这些与背景混合的点。当我在自己的项目中启用混合时,这些点与我的背景颜色混合,看起来不太好。避免与背景混合的优雅解决方案是什么
编辑:
您可以看到这些点正在与白色背景混合。我正在使用自定义着色器设置alpha值。在此图像中,alpha值为0.5
Potree使用了一个更复杂的混合功能,需要3次传递
gl\u FragColor=vec4(w*rgb,w)
归一化过程是一个屏幕空间后处理着色器,它将帧缓冲区中的每种颜色按权重进行分割:
gl\u FragColor=vec4(加权SumofRbs/sumOfWeights,1.0)
最终结果是平滑混合点,过渡硬度取决于权重函数:
查看本论文以获得更详细的解释(第4.2.2章):
或者这篇算法的原始论文:
编辑:
此外,为了避免看穿背景,请使用黑色和alpha=0清除缓冲区,然后使用高质量的三次飞溅算法渲染点,并在最后一步渲染背景。背景仅在没有渲染点的区域可见。您能否给出一个图片示例,说明您在项目中看到了什么?另外,你的点是使用标准材质,还是有自定义着色器?因此你希望它们彼此混合,但不与背景混合?@TheJim01是的。我不希望这些点与背景混合。@rabbi76我在three.js中使用
NormalBlending
。更改背景alpha值没有任何意义。最后的颜色只与源alpha值有关,而与目标alpha值无关。我不确定这是否是问题的答案,但它肯定是一个很好的描述,即使它是剽窃。@rabbi76我试图回答关于如何在potree中实现它的问题,而不是一个有适当引用的科学应用程序。此外,我还链接到了图片的来源。我从未见过有人期望在回答中出现“从……拍摄的图像”。剽窃肯定不是我想要的,或者在图2和图3中是自我剽窃。@Markus我如何存储重量总和?在颜色缓冲区中,我只能存储0.0-1.0之间的值。@K.Miao您必须渲染到浮点纹理,该纹理未绑定到0到1的范围。这可能会有所帮助:这是初始化属性过程的渲染目标的地方:EDLRenderer也会做一些稍微不同的操作,以避免穿透背景。属性过程渲染到不同的帧缓冲区,EDL过程从该fbo读取,并在背景上将着色结果渲染到主fbo。