我有一个节点(只是一个带有SCNCapsule几何体的简单节点,只是为了更具体),我希望它像星球大战光剑一样发光:
我试图添加一个具有相同几何形状的子节点,只是稍大一点,不透明度为0.5,颜色不同,但这并不是我想要的。还有另一种方法吗?
答案 0 :(得分:6)
我发现在scenekit中使用cifilters几乎没用。除非场景非常简单,否则性能将是垃圾。
如果您打算制作动画,最简单的方法是将其设为白色。我使用两个动画粒子发射器。一种红色,添加剂,烟雾纹理,只是为了给它一些红/白覆盖,让粒子在局部空间中活15-30秒。第二个不断吐出较小的一个,以产生脉动效果,但保持寿命短。
如果你看看苹果船的演示,发动机的反应堆颗粒系统就像一把很短的光剑。你只想让它更长,不同的颜色。通过使用烟雾/云系统为您提供覆盖,您不需要从主发射器获得尽可能多的粒子。一旦它发光,移动它很容易,因为所有的粒子都在局部空间。你只需移动节点。虽然这不是最友好的表现方式,但它是最好看的方式。您可以使用粒子火花,在移动过程中发出的粒子产生线索效果,并且脉冲,活着的外观将比您可以掀起的任何滤镜/发射/反射/着色器更好。与苹果演示中的反应器系统一样,它看起来很棒。如果你能用3D /发光/着色器制作看起来很好的东西,我会感到惊讶。
答案 1 :(得分:1)
在3D中实现发光是一件非常困难的事情。我们谈到了this on Stackoverflow before并且出现了一些好事。
我认为对于您的特定用例,复制节点是一个良好的开端。使其成为您想要的颜色,然后添加Core Image Filter to the duplicate node。过滤器可能应为CIGaussian Blur
(documentation)。这样,你就可以在节点周围发光。
快速提示,为了避免在光剑的白色部分顶部发光,请更改辉光节点的材质,使cullMode设置为back
。您只能看到白色部分后面的多边形内部。
免责声明:这可能无法编译,但总体思路是。我的斯威夫特不是很好,所以随时纠正我。
let filter = CIFilter(name: "CIGaussianBlur")
filter.setValue(0.5, forKey: kCIInputRadiusKey)
glowNode.filters = [filter]