Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 具有多粒子系统排序的Three.js透明度错误_Sorting_Three.js_Webgl_Fragment Shader_Particle System - Fatal编程技术网

Sorting 具有多粒子系统排序的Three.js透明度错误

Sorting 具有多粒子系统排序的Three.js透明度错误,sorting,three.js,webgl,fragment-shader,particle-system,Sorting,Three.js,Webgl,Fragment Shader,Particle System,我有两个THREE.ParticleSystem系统,其中粒子的纹理具有alpha透明度,一个使用AdditiveBlend fire纹理,另一个使用NormalBlending烟雾纹理,它们使用简单的自定义顶点和片段着色器 每个粒子系统都有sortParticles=true,并且它们独立地工作得很好,但是,当两种类型的粒子重叠时,第一个粒子系统的fire纹理具有类似的透明度深度错误,该错误通常与sortParticles=false有关请参见图像 第一个粒子系统似乎没有正确渲染,可能是因为这

我有两个THREE.ParticleSystem系统,其中粒子的纹理具有alpha透明度,一个使用AdditiveBlend fire纹理,另一个使用NormalBlending烟雾纹理,它们使用简单的自定义顶点和片段着色器

每个粒子系统都有sortParticles=true,并且它们独立地工作得很好,但是,当两种类型的粒子重叠时,第一个粒子系统的fire纹理具有类似的透明度深度错误,该错误通常与sortParticles=false有关请参见图像

第一个粒子系统似乎没有正确渲染,可能是因为这些粒子都在其他粒子之前绘制,即使来自其他系统的粒子在它们之后,也会导致透明度瑕疵

也许一个可能的解决方案是sortParticles以某种方式对两个系统进行排序。这有可能吗?是否有某种类型的全局粒子排序标志或强制排序粒子跨越两个系统的方法

另一个更复杂的解决方案可能是使用单个已排序粒子系统,但以某种方式改变每个粒子的纹理和混合模式。这可能吗?我知道如何在着色器中实现这一点,但出于性能原因,我担心添加条件


对任何和所有解决方案开放。谢谢你的建议、想法或帮助

由于某种原因,ParticleSystem.sortParticles和ParticleSystem.frustumCulled默认为false。试着在没有分拣的情况下尝试得到你想要的效果。据我所知,任何种类的透明表面都必须经过深度排序才能正确渲染。有没有其他方法可以在不进行排序的情况下实现火和烟样式的粒子?例如,您可以在不进行排序的情况下使用添加剂混合。如果您的相机不移动,并且您觉得需要对粒子进行排序,那么您可以只对粒子进行一次预排序。您还可以尝试设置material.depthWrite=false.West,我已经尝试了所有这些,以发现包括自定义着色器在内的完美组合。摄像机正在移动,需要在建筑物后面遮挡烟雾和火焰粒子,使其看起来逼真。这类粒子的情况以前有没有出现过多粒子系统?据我所知,没有。尝试使用材质进行试验。alphaTest=0.5。