iOS SceneKit Neon Glow

Mat*_*ker 8 lighting effects ios scenekit swift

一直在寻找Scenekit上的灯光,虽然我现在可以应用一个灯光节点来点亮我正在寻找一种从物体内发光的方法.

举一个例子,想象一下霓虹灯发光,或者在其他物体上投射光线的灯泡.

任何想法如何实现这一目标?

非常感谢.

ric*_*ter 15

正如@DavidRönnqvist在评论中暗示的那样,有多种方法可以使对象看起来发光.你可以一起或单独完成这些 - 你可能需要调整你如何组合它们以获得你想要的效果.

  1. 对于发光的对象,您可能不希望场景中的其他光源出现阴影.使用emission材质的通道为对象提供覆盖其他光源阴影的颜色或纹理.(如果使用纹理,较亮的部分看起来会发光,如前面链接文档中的示例所示.)

  2. 您可能希望场景中的其他元素被发光对象点亮.的emission材料特性只是不断从由照明/阴影变暗的对象时,它并不能使它的光源.要获得光源,您需要在SCNLight包含对象的节点树中添加至少一个光源.

    根据您的场景,您可以只使用一个光源; 例如,如果物体是灯泡,您可以在其中心放置一盏灯并完成它.(好吧,您可能还需要使用节点和灯光的类别位掩码来确保灯光通过灯泡发光,而不是被它遮挡.)如果你有一个大而复杂的霓虹灯,你可能需要创建多个光源 - 否则,标志附近物体上的照明将背叛它是单点光源.(如果没有任何靠近标志点亮的东西,单点光可能就足够了.)

  3. 如果你想在光源周围有一个发光的光环,事情会变得更加困难.这是体积照明,而且它不是SceneKit可以为你开箱即用的东西.但有几种方法可以伪造它:

    • 对于像灯泡这样的点光源,具有发光纹理的2D广告牌可能就足够了.(见@ MatthewBaker的评论.)
    • 对于像霓虹灯这样的大灯,您可以尝试沿其长度放置几个广告牌.一种很好的实现方法SCNParticleSystem,因为它可以在几何体的表面上产生粒子.
    • 具有复杂形状的灯的另一个好选择可能是着色器修改器.GLSL着色器可以通过基于视图和表面法线向量之间的角度改变alpha来模拟体积光照.
    • 如果发光只需要出现在非常接近光线的表面上 - 例如霓虹灯管后面的实心标志 - 你可以通过将发光烘焙成纹理并在所述表面上使用该纹理来伪造它.(再次,emission救援.)
    • 将Core Image滤镜附加到包含灯光的节点(或其几何体的副本),以便您可以使渲染图像变亮,展开和模糊.
    • 如@ Moustach的回答所述,使用技术进行多通道渲染,使用一些奇特的GLSL技巧来创建光环.


Mou*_*ach 5

编辑:糟糕,我可能误解了这个问题... Rickster的答案更适合您的需求。

Glowy 3D是我的领域!

有几种方法可以使对象在Scenekit中发光。

最直接的方法是使用来在GLSL中进行设置SCNTechnique。您将需要多次通过,以渲染照明,然后在X和Y上成功对其进行模糊处理(比一次更快)。关于GPU Gems的一篇很棒的文章。但是,如果您过度使用它,它会很沉重,而且我不确定您是否只能将瞄准照明SCNTechnique

第二种方法是使用CI筛选器。只需添加高斯模糊并将其合成在顶部即可。您可能需要其他效果才能选择/增强发光元素。如果您正在寻找物体周围的光芒,这个问题可能也对您有帮助。

第三种方法是使用广告牌伪造辉光。在photoshop或3D软件中制作模具,将其放在始终面向相机的平面上。将其混合模式更改为“屏幕”,您将获得非常便宜的发光效果!

最后,为了获得光亮的效果,您可能需要查看Godrays。它们也很容易使用GLSL进行设置,因此SCNTechnique应该做到这一点。这是一篇关于它的文章