我在玩耍,试图在SceneKit中实现Metal着色器,以勾勒出一个对象。
想法是绘制类似于this blogpost中的图片的轮廓(或轮廓)(博客文章不包含任何代码):
我是SceneKit和Metal着色器的新手,所以我只能够绘制一些几何图形并编写简单的顶点或片段着色器。我很好奇如何达到这种效果?是通过多次通过吗?
干杯!
答案 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;
从那里,您只需应用典型的模型-视图-投影矩阵,然后从片段着色器返回纯色即可。