簡體   English   中英

SceneKit中的金屬着色器勾勒出一個對象

[英]Metal shader in SceneKit to outline an object

我正在玩游戲並嘗試在SceneKit中實現Metal Shader,它將勾勒出一個對象。

想法是繪制一個與此博客文章中的圖像類似的輪廓(或輪廓)(博客文章不包含任何代碼):

輪廓

我是SceneKit和Metal着色器的新手,所以我只能繪制一些幾何體並編寫簡單的頂點或片段着色器。 我很好奇我怎么能達到這種效果呢? 它是在多次通過中完成的嗎?

干杯!

這里的基本思想是克隆“選定”節點及其幾何體,然后使用自定義頂點和片段着色器沿頂點法線“推”幾何體,僅使用純色繪制克隆幾何體的背面。

我寫了一個小樣本項目,以證明這一點,並張貼在這里

核心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;

從那里,您只需應用典型的模型 - 視圖 - 投影矩陣,並從片段着色器返回平面顏色。

截圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM