Three.js / WebGL - transparent planes hiding other planes behind them
When you have two planes in Three.js / WebGL and one or both of them are transparent, sometimes the plane behind will be hidden by the transparent plane above. Why is this?
Solution 1:
Let's say that you are using some transparent *.png image. Then this would help:
new THREE.MeshBasicMaterial( { side:THREE.BackSide,map:texture, depthWrite: false, depthTest: false });
Solution 2:
Setting the depthWrite
property to false
solved my issue.
new THREE.MeshBasicMaterial({
opacity: 0.25,
transparent: true,
side: THREE.DoubleSide,
depthWrite: false
});
Solution 3:
Try adding alphaTest: 0.5
to the material.
Solution 4:
This is not a bug, it's just how OpenGL (and, hence, WebGL) works. Transparent surfaces don't play well with the z-buffer, and as such must be manually sorted and rendered back-to-front. Three JS is attempting to do this for you (which is why the problem goes away when you set the X value > 0) but cannot robustly handle the case of intersecting geometry like you're showing.
I've explained the issue more in-depth in a different SO question, so you may want to reference that.