2015-10-13 58 views
3

我正在尝试Scenekit,当我尝试在半透明对象后面渲染粒子时遇到了问题。在场景中的其他对象时,它们不会呈现。是否有可能在场景套件中的半透明物体后面渲染粒子?

enter image description here

在此画面中的所有颗粒都在半透明框的前面,不显示是后面的所有粒子。您可以看到球体被正确显示,被覆盖部分的颜色被削弱。我期望粒子也是如此,但是也许框架的渲染选择使粒子系统高效使这种行为正常?

我试图谷歌/ stackoverflow它,但它似乎scenekit是不是一个很好的覆盖主题。

+0

我不知道尽可能多的有关场景套件,但我知道在OpenGL绘制顺序是半透明非常重要。你能控制你是否在盒子之前或之后画出粒子?你应该首先绘制不透明的物体。 –

+0

这是一个很好的提示...我一直在寻找它,但我认为我忽略了...我不能改变粒子渲染顺序,但似乎我可以改变粒子发射器渲染顺序...将尝试它出。 – Xav

+0

只是一个快速的谷歌显示,你可以控制场景图的绘制顺序。 “父母在呈现其子女之前绘制其内容。” “孩子们按照他们出现在孩子数组中的顺序呈现。” –

回答

2

半透明度严重依赖于绘制顺序。使用alpha混合,渲染器读取帧缓冲区中的当前值,并在这些值之上混合半透明颜色。

这是什么意思是不透明物体应先绘制,半透明物体应从后向前绘制。如果在半透明对象之后绘制不透明对象,则渲染器不会混合当前颜色。

使用SceneKit,绘制顺序可以由场景节点上的renderingOrder属性控制。

该节点的内容被绘制的顺序相对于其他 节点的顺序。

Apple Docs

+1

这在SpriteKit(2D)中是正确的,但不在SceneKit(3D)中。在SceneKit中渲染节点的顺序不取决于它们在场景图中的位置。 – mnuages

+0

@mnuages啊谢谢你的收获。我更新了答案。 –

+1

实际上,现在我遇到了相反的问题......盒子后面的粒子被适当地衰减了,但盒子前面的粒子在它们不透明的时候也被衰减了! – Xav