iOS SceneKit 霓虹灯
Posted
技术标签:
【中文标题】iOS SceneKit 霓虹灯【英文标题】:iOS SceneKit Neon Glow 【发布时间】:2015-02-14 22:26:51 【问题描述】:一直在关注 Scenekit 上的照明,虽然我现在可以应用照明节点来照亮某些东西,但我正在寻找一种从对象内部照明的方法。
举个例子,想象一下霓虹灯或将光投射到其他物体上的灯泡。
任何想法如何实现这一目标?
非常感谢。
【问题讨论】:
您是在谈论具有明亮的材质,即使没有光源,还是在谈论在明亮的物体周围渲染“光晕”? 两者都适合,但我正在寻找的效果可能是两者的结合。如果您想象与将灯安装在表面上的类似效果。当它打开时,它会将光线投射到它周围的其他物体上。 过去我使用 gimp 处理 2D 图像,增加了明亮元素的大小并进行了模糊处理。效果类似于this 【参考方案1】:正如@DavidRönnqvist 在 cmets 中所暗示的,有多种方法可以使物体看起来发光。您可以一起或单独执行这些操作 - 您可能需要调整组合它们的方式以获得您想要的效果。
对于发光的对象,您可能不希望场景中的其他光源产生阴影。使用材质的emission
通道为对象提供覆盖其他光源阴影的颜色或纹理。 (如果您使用纹理,较亮的部分会发光,如前面链接文档中的示例所示。)
您可能希望场景中的其他元素被发光物体照亮。 emission
材质属性只是防止对象被光照/阴影变暗,它不会使其成为光源。要获得光源,您需要将至少一个SCNLight
添加到包含您的对象的节点树中。
根据您的场景,您也许可以只使用一个光源;例如如果物体是灯泡,您可以在其中心放置一盏灯并完成它。 (好吧,您可能还需要使用节点和灯光的类别位掩码,以确保灯光通过灯泡照射而不是被它遮挡。)如果您有一个大而复杂的霓虹灯,您可能需要创建多个光源 - 否则,标志附近物体上的照明将表明它是单点光源。 (如果它所照亮的标志附近没有任何东西,那么单点灯可能就足够了。)
如果您希望在光源周围有一个发光的光环,事情会变得有点困难。那是体积光照,这不是 SceneKit 开箱即用的功能。但是有几种方法可以伪造它:
对于像灯泡这样的点光源,具有发光纹理的 2D 广告牌可能就足够了。 (请参阅@MatthewBaker 的评论。) 对于像霓虹灯这样的大灯,您可以尝试沿其长度放置几个广告牌。使用SCNParticleSystem
可能是一个很好的实现方法,因为它可以沿着几何体的表面产生粒子。
对于形状复杂的灯光,另一个不错的选择可能是shader modifiers。 GLSL 着色器可以通过根据视图和表面法线向量之间的角度改变 alpha 来模拟体积光照。
如果辉光只需要出现在非常靠近灯光的表面上 - 例如霓虹灯管后面的实心标志 - 您可以通过将辉光烘焙成纹理并在所述表面上使用该纹理来伪造它。 (再次,emission
来救援。)
将核心图像滤镜附加到包含灯光(或其几何体的副本)的节点,以便您可以对渲染图像进行增亮、扩展和模糊处理。
如@Moustach 的回答中所述,使用techniques 进行多通道渲染,并使用一些花哨的 GLSL 技巧来创建光环。
【讨论】:
听起来是几个不错的选择。我会看看发射设置,看看我能做什么。我会在测试后标记为答案并发布我的最终结果。【参考方案2】:编辑:哎呀,我可能误解了这个问题...... Rickster 的回答更适合您的需求。
Glowy 3D 是我的领域!
有几种方法可以在 SceneKit 中使对象发光。
最直接的方法是在 GLSL 中使用SCNTechnique
进行设置。您将需要多次通过来渲染照明,然后依次在 X 和 Y 上模糊它(比同时更快)。 GPU Gems 上有一篇很棒的文章。但是,如果您过度使用它,它会很重,而且我不太确定您是否只能针对 SCNTechnique
中的照明。
第二种方法是使用 CI 过滤器。只需添加一个高斯模糊并将其合成在上面。您可能需要其他效果来选择/增强发光元素。如果您正在寻找对象周围的光晕,this question 也可能对您有所帮助。
第三种方法是使用广告牌来伪造发光。在 Photoshop 或 3D 软件中制作模板,将其放在始终面向相机的平面上。将其混合模式更改为 Screen,您将获得非常便宜的发光效果!
最后,对于您的发光效果,您可能需要研究一下神光。使用 GLSL 也很容易设置它们,所以 SCNTechnique
应该可以解决问题。这是关于它的article。
【讨论】:
嘿,我本来打算在我最初的答案中解决过滤器和技术,但是在写了这么多之后我开始忘记它......认为这是一个停止的好地方。 :) 顺便说一句,您确实可以将SCNTechnique
渲染传递限制到特定节点 - 请参阅技术定义字典中的 includeCategoryMask
/excludeCategoryMask
。
我说的是限制通道,而不是节点,因为发光应该只适用于发射通道,而不适用于颜色、反射等。但感谢您的提醒!以上是关于iOS SceneKit 霓虹灯的主要内容,如果未能解决你的问题,请参考以下文章
霓虹都市(Neon City) 苹果版下载 | iOS版下载 | iPhone版本下载 | 游戏下载 | 手机游戏免费下载 | 安卓版免费下载 | Android版本免费下载 - 赛车游戏 赛车 竞速