Я хотел бы использовать шейдер Metal
, чтобы применить оттенок toon/cell к материалам, используемым в сцене. Шейдер, который я пытаюсь реализовать, является собственностью Apple AAPLCelShader
, найденной в MetalShaderShowcase. Я немного новичок в реализации шейдеров в SceneKit
, чтобы я мог делать все совершенно неправильно.Использование металлического шейдера в SceneKit
Из того, что я понимаю в документации, Metal
или GL-шейдер можно использовать для изменения рендеринга SceneKit
с iOS 9 и Xcode 7. Документация предполагает, что это делается так же, как GL-шейдеры.
Мой метод заключается в попытке получить путь к файлу .metal
, а затем загрузить его в строку для использования в свойстве SCNMaterial
shaderModifiers
в виде [String: String] словаря, как вы бы с GL шейдер (хотя я еще не понял, что работает нормально).
Мой код:
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
})
Это выполняется на тестовой сцене с одной геометрией коробки в нем, который грузили из .scn
файла. Загрузка файла работает нормально, так что это не проблема.
Ошибка возникает из второй строки, где я пытаюсь найти путь, он дает мне «найденный нуль при разворачивании необязательного значения», который можно было бы ожидать при развертывании силы, кроме факта, что файл, который он пытается для загрузки, безусловно, входит в комплект, и тот же код отлично работает с другими типами файлов, только не .metal
.
Неужели я об этом совершенно не так? Я не могу понять, почему он не будет обращаться к файлу, кроме проблемы с неправильным использованием металлического файла.
Есть ли более простой или лучший способ реализовать затенение ячеек и, в конечном итоге, жирный контур по краям?
Это отличная информация, спасибо. Это действительно проливает свет на все это, потому что это совершенно новая область для меня. –