在SceneKit中制作一个发光节点

时间:2015-07-05 12:32:33

标签: swift scenekit glow

我有一个节点(只是一个带有SCNCapsule几何体的简单节点,只是为了更具体),我希望它像星球大战光剑一样发光:

image

我试图添加一个具有相同几何形状的子节点,只是稍大一点,不透明度为0.5,颜色不同,但这并不是我想要的。还有另一种方法吗?

2 个答案:

答案 0 :(得分:6)

我发现在scenekit中使用cifilters几乎没用。除非场景非常简单,否则性能将是垃圾。

如果您打算制作动画,最简单的方法是将其设为白色。我使用两个动画粒子发射器。一种红色,添加剂,烟雾纹理,只是为了给它一些红/白覆盖,让粒子在局部空间中活15-30秒。第二个不断吐出较小的一个,以产生脉动效果,但保持寿命短。

如果你看看苹果船的演示,发动机的反应堆颗粒系统就像一把很短的光剑。你只想让它更长,不同的颜色。通过使用烟雾/云系统为您提供覆盖,您不需要从主发射器获得尽可能多的粒子。一旦它发光,移动它很容易,因为所有的粒子都在局部空间。你只需移动节点。虽然这不是最友好的表现方式,但它是最好看的方式。您可以使用粒子火花,在移动过程中发出的粒子产生线索效果,并且脉冲,活着的外观将比您可以掀起的任何滤镜/发射/反射/着色器更好。与苹果演示中的反应器系统一样,它看起来很棒。如果你能用3D /发光/着色器制作看起来很好的东西,我会感到惊讶。

答案 1 :(得分:1)

在3D中实现发光是一件非常困难的事情。我们谈到了this on Stackoverflow before并且出现了一些好事。

我认为对于您的特定用例,复制节点是一个良好的开端。使其成为您想要的颜色,然后添加Core Image Filter to the duplicate node。过滤器可能应为CIGaussian Blurdocumentation)。这样,你就可以在节点周围发光。

快速提示,为了避免在光剑的白色部分顶部发光,请更改辉光节点的材质,使cullMode设置为back。您只能看到白色部分后面的多边形内部。

免责声明:这可能无法编译,但总体思路是。我的斯威夫特不是很好,所以随时纠正我。

let filter = CIFilter(name: "CIGaussianBlur")
filter.setValue(0.5, forKey: kCIInputRadiusKey)
glowNode.filters = [filter]