【问题标题】:is it possible to render particles behind semi transparent objects in scene kit ?是否可以在场景套件中渲染半透明物体后面的粒子?
【发布时间】:2016-01-11 11:32:09
【问题描述】:

我正在试用 Scenekit,但在尝试渲染半透明对象后面的粒子时遇到了问题。它们根本不会渲染,而场景中的其他对象会渲染。

在这张图片上,所有粒子都在半透明框的前面,后面的所有粒子都不显示。可以看到球体显示正常,被覆盖部分的颜色变淡了。我对粒子也有同样的期望,但也许框架的渲染选择使粒子系统高效,使这种行为正常?

我已经尝试在 google/stackoverflow 上搜索它,但 Scenekit 似乎不是一个很好的话题。

【问题讨论】:

  • 我不太了解场景套件,但我知道在 OpenGL 中绘制顺序对于半透明非常重要。你能控制在盒子之前还是之后绘制粒子吗?您应该先绘制不透明的对象。
  • 这是一个很好的提示...我一直在寻找它但我认为我忽略了...我无法更改粒子渲染顺序但似乎我可以更改粒子发射器渲染订购...将尝试一下。
  • 只是一个快速的 google 显示您可以使用场景图控制绘图顺序。 “父级在渲染其子级之前绘制其内容。” “子元素按照它们在子数组中出现的顺序呈现。”
  • 就是这样...我只需要调整粒子系统的scnode parent的渲染顺序。谢谢!
  • 我会写一个答案。

标签: ios macos frameworks scenekit particle-system


【解决方案1】:

半透明很大程度上取决于绘制顺序。通过 alpha 混合,渲染器读取帧缓冲区中的当前值,并在这些值之上混合半透明颜色。

这意味着应该首先绘制不透明的对象,而应该从后到前绘制半透明的对象。如果在半透明对象之后绘制不透明对象,则渲染器没有可混合的当前颜色。

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

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

Apple Docs

【讨论】:

  • 这在 SpriteKit (2D) 中是正确的,但在 SceneKit (3D) 中则不然。在 SceneKit 中渲染节点的顺序不取决于它们在场景图中的位置。
  • @mnuages 啊,谢谢你的收获。我更新了答案。
  • 其实现在我遇到了相反的问题......盒子后面的粒子被适当地衰减了,但是盒子前面的粒子也被衰减了,但它们不透明!
  • 我遇到了半透明盒子对象内的不透明节点对象的问题。在不将渲染顺序调整为 i.E 100 的情况下,有时会绘制对象,有时根本不会绘制对象。将 order 设置为 100 后,始终绘制不透明对象 - 完美答案。
猜你喜欢
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多