我想使用Metal着色器将卡通/单元着色应用于场景中使用的材质。我尝试实现的着色器是 AppleAAPLCelShader在MetalShaderShowcase中找到的自己的着色器。我对实现着色器有点陌生,SceneKit所以我可能会做完全错误的事情。
根据我在文档中的理解,从 iOS 9 和 Xcode 7 开始,aMetal或 GL 着色器可用于修改SceneKit渲染。文档表明,这与 GL 着色器的完成方式相同。
我的方法是尝试获取文件的路径,然后将其加载到一个字符串中,以 [String: String] 字典的形式在属性中.metal使用,就像使用 GL 着色器一样(尽管我还没有SCNMaterial shaderModifiers使其正常工作)。
我的代码是:
var shaders = [String: String]()
let path = NSBundle.mainBundle().pathForResource("AAPLCelShader", ofType: "metal")!
do{
let celShader = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding)
shaders[SCNShaderModifierEntryPointLightingModel] = celShader
}catch let error as NSError{
error.description
}
scene.rootNode.enumerateChildNodesUsingBlock({ (node, stop) -> Void in
node.geometry?.firstMaterial?.shaderModifiers = shaders
})
Run Code Online (Sandbox Code Playgroud)
这是在一个测试场景上运行的,其中有一个从.scn文件加载的盒子几何体。文件加载工作正常,所以这不是问题。 …