Three.js 透明点云没有正确混合点

问题描述

我正在尝试使用 THREE.Points 创建用于数据可视化的点云。我想让点透明,以便观众可以了解特定区域中点的密度。我使用球体几何和加法混合进行测试。

问题在于,一些显示为正方形的点与它们前面的点正确融合,而其他点则被它们前面的点隐藏。出于某种原因,球体下半部分的混合似乎无法正常工作,这很奇怪,因为我没有使用任何灯光,而且它应该是对称的。我不确定为什么会发生这种情况或如何解决

代码草图链接https://glitch.com/edit/#!/cloudy-chambray-leotard?path=main.js%3A22%3A0

The points on the top half of the sphere are visible behind the points in front of the camera,while the points on the bottom are not.

直视球体:

View of the whole sphere

当从上往下看时,似乎也存在左右对称问题:

enter image description here

从球体底部向上看,我得到了想要的结果:

enter image description here

解决方法

WebGL 的透明度很棘手,因为透明对象写入深度图,并且渲染器假定第一个精灵后面的其他精灵是隐藏的,因此它跳过绘制它们。在这种情况下,绘制顺序非常重要,每次旋转相机时从后到前对精灵进行排序将是一场噩梦。

解决问题的最简单方法是在材质中设置 depthWrite: false,这样每个精灵都不会写入深度图。那么不管他们是在前面还是后面,他们都会被吸引。