SceneKit中的金属着色器可概述对象

时间:2018-11-20 14:03:57

标签: ios shader scenekit metal fragment-shader

我在玩耍,试图在SceneKit中实现Metal着色器,以勾勒出一个对象。

想法是绘制类似于this blogpost中的图片的轮廓(或轮廓)(博客文章不包含任何代码):

silhouette

我是SceneKit和Metal着色器的新手,所以我只能够绘制一些几何图形并编写简单的顶点或片段着色器。我很好奇如何达到这种效果?是通过多次通过吗?

干杯!

1 个答案:

答案 0 :(得分:7)

这里的基本思想是克隆“选定的”节点及其几何形状,然后使用自定义的顶点和片段着色器沿顶点法线“推”出几何形状,仅使用纯色。

我写了一个小样本项目来演示这一点,并将其发布到here

Swift的核心代码如下:

let outlineProgram = SCNProgram()
outlineProgram.vertexFunctionName = "outline_vertex"
outlineProgram.fragmentFunctionName = "outline_fragment"

let outlineNode = duplicateNode(node)
scene.rootNode.addChildNode(outlineNode)
outlineNode.geometry?.firstMaterial?.program = outlineProgram
outlineNode.geometry?.firstMaterial?.cullMode = .front

顶点着色器负责沿着其法线推动顶点的部分如下所示:

const float extrusionMagnitude = 0.05;
float3 modelPosition = in.position + normalize(in.normal) * extrusionMagnitude;

从那里,您只需应用典型的模型-视图-投影矩阵,然后从片段着色器返回纯色即可。

Screenshot