一直在寻找Scenekit上的灯光,虽然我现在可以应用一个灯光节点来点亮我正在寻找一种从物体内发光的方法。
作为一个例子,想象一下霓虹灯发光,或者将灯光投射到其他物体上的灯泡。
任何想法如何实现这一目标?
非常感谢。
答案 0 :(得分:15)
正如@DavidRönnqvist在评论中暗示的那样,有多种方法可以使对象看起来发光。你可以一起或单独完成这些 - 你可能需要调整你如何组合它们以获得你想要的效果。
对于发光的对象,您可能不希望场景中的其他光源出现阴影。使用材质的emission
通道为对象提供覆盖其他光源阴影的颜色或纹理。 (如果使用纹理,较亮的部分看起来会发光,如前面文档中的示例所示。)
您可能希望场景中的其他元素被发光物体照亮。 emission
材质属性可以防止对象因照明/阴影而变暗,但不会使其成为光源。要获得光源,您需要向包含对象的节点树添加至少一个SCNLight
。
根据您的场景,您可能只能使用一个光源;例如如果物体是灯泡,你可以在它的中心放置一盏灯并完成它。 (好吧,您可能还需要使用节点和灯光的类别位掩码来确保光线通过灯泡发光,而不是被它遮挡。)如果您有一个大而复杂的霓虹灯,那么你可能需要创建多个光源 - 否则,标志附近物体上的照明将背叛它是单点光源。 (如果没有任何靠近标志点亮的东西,单点光可能就足够了。)
如果你想在光源周围有一个发光的光环,事情会变得更加困难。这是体积照明,而且它不是SceneKit可以为你开箱即用的东西。但有几种方法可以伪造它:
SCNParticleSystem
,因为它可以在几何体的表面上产生粒子。emission
救援。)答案 1 :(得分:4)
Glowy 3D是我的域名!
有几种方法可以让Scenekit中的对象发光。
最直接的方法是使用SCNTechnique
在GLSL中进行设置。您将需要多次传递,以渲染照明,然后在连续的X和Y上模糊它(比一次更快)。在GPU Gems上有一篇很棒的文章。然而,如果你过度使用它,这个很重,我不太确定你是否只能在SCNTechnique
中定位照明。
第二种方法是使用CI过滤器。只需添加高斯模糊并将其合成在顶部。您可能需要其他效果来选择/增强发光元素。如果您正在寻找对象周围的光晕this question也可能对您有帮助。
第三种方法是使用广告牌伪造发光。在photoshop或3D软件中制作模板,将其放在始终面向相机的平面上。将其混合模式更改为屏幕,您的发光非常便宜!
最后,为了你的光线照射效果,你可能想要研究一下。使用GLSL也很容易设置它们,所以SCNTechnique
应该可以解决问题。这是关于它的article。