有没有办法在场景套件中添加轮廓?

Posted

技术标签:

【中文标题】有没有办法在场景套件中添加轮廓?【英文标题】:Is there a way to add an outline in scene kit? 【发布时间】:2015-06-22 07:51:18 【问题描述】:

我一直在用场景工具包制作游戏,但物体的边缘很难看到,导致一些游戏细节无法看到。有没有办法在所有游戏对象周围画出黑色轮廓?

【问题讨论】:

您的问题中没有足够的信息来使其有意义地回答。包括您现有代码的示例。 是的,有一种方法,但它会涉及使用 SCNTechnique 执行多通道渲染。它将涉及在一次渲染中渲染场景的颜色和深度,然后对深度进行边缘检测(例如 Sobel 过滤器)并将边缘合成到来自第一次渲染的颜色之上。对所有这些都进行详细说明的答案可能太长,无法获得好的答案。 【参考方案1】:

您可以使用另一个答案中提到的SCNTechnique(您可以查看这篇关于cel shading 的文章,它具有边缘检测通道),但全帧后期处理非常昂贵。

在 OS X 上,您还可以利用几何着色器(请参阅 this article)。但它在 ios 上不可用,并且可能更难实现和正确。

我会采用一种更简单的技术,它只涉及顶点和片段着色器。您可以查看this article,它提供了一个使用SCNProgram 或着色器修改器很容易在SceneKit 中重新创建的示例。

【讨论】:

【参考方案2】:

这里有一个使用 SCNTechnique 为节点制作发光轮廓的示例: https://github.com/laanlabs/SCNTechniqueGlow

您可以修改颜色和模糊的方法来实现描边的轮廓效果。

【讨论】:

【参考方案3】:

另一个 SCNTechnique 示例,在此处引用:https://www.nurfacegames.com/everything-you-wanted-to-know-about-outline-shaders/,是将您的节点在后面稍微大一点,然后再以常规大小在前面。

这是一个游乐场示例:https://github.com/mackhowell/scenekit-outline-shader-scntechnique。

【讨论】:

以上是关于有没有办法在场景套件中添加轮廓?的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 3D 轮廓标签

如何为 1px 宽的 UIButton 添加黑色轮廓?

近似线到平面图轮廓

移除焦点轮廓 TideSDK

css:使用单面轮廓和轮廓偏移?

coreldraw里面怎么给物品添加外轮廓