我想在 SCNView 上的 Swift Playgrounds 中使用带有金属着色器的 SCNTechnique。因此,我尝试使用以下代码编译我的着色器:
guard let metalDevice = sceneView.device else {
return
}
if let path = Bundle.main.path(forResource: "distortTechnique", ofType: "metal") {
do {
let contents = try String(contentsOf: URL(fileURLWithPath: path))
do {
try metalDevice.makeLibrary(source: contents, options: nil)
} catch { error
print(error)
}
} catch {
// contents could not be loaded
}
}
Run Code Online (Sandbox Code Playgroud)
该文件已加载,但出现以下编译器错误:
Error Domain=MTLLibraryErrorDomain Code=3 "Compilation failed:
program_source:11:10: fatal error: 'SceneKit/scn_metal' file not found
#include <SceneKit/scn_metal>
^
" UserInfo={NSLocalizedDescription=Compilation failed:
program_source:11:10: fatal error: …Run Code Online (Sandbox Code Playgroud) 在 iOS 13(iOS 11 和 12)之前,SCNTechnique 应用于具有多通道设置的 ARSCNView,该设置首先应该将整个场景绘制到纹理中(通过 DRAW_SCENE)也会影响 ARKit 场景背景(相机源)。\n现在在 iOS 13 中,情况似乎不再如此。应用于生成的纹理的片段着色器不会更改相机输入\xe2\x80\x93,仅更改SceneKit 内容(例如节点)。当使用自定义场景背景(例如图像)时,一切都会按预期运行。仅使用 SCNView 时会得到相同的结果。
\n\n在 colorStates 中将clearColor 设置为 sceneBackground 没有帮助。\n我还尝试禁用环境纹理和人物遮挡。
\n\n有谁知道这个问题的解决方法?我希望过滤整个渲染的 ARKit 场景,以改变我的 AR 体验氛围。\n随附的是我的技术 plist 的屏幕截图。
\n\n谢谢你!
\n\n\n