SceneKit - 在着色器修改器中访问目标颜色以混合

时间:2017-10-17 17:10:09

标签: scenekit metal

有没有办法在{Shader修饰符> gl_LastFragData中与GLES类似的方式访问最后一个片段颜色(目标颜色)?

我的目标是使用着色器修改器执行自定义混合(SceneKit的SCNBlendMode在我的情况下是不够的)。目前我正在使用SCNTechnique进行3次传递(渲染目标,渲染源,组合)来实现这一点,这对我来说似乎是一个重大的过度杀戮+在没有引入新传递的情况下很难有多个混合组

SCNProgram似乎不是一个选项,原因有几个(我正在使用PBR,曲面细分/细分;我现在宁愿坚持使用技术。)

我已按照this answer中的建议尝试使用#extension GL_EXT_shader_framebuffer_fetch : require,但即使对于GLSL着色器修饰符(我正在使用Xcode 9.0iOS 11)它也不起作用

我也偶然发现了具有SceneKit默认金属着色器实现的this wonderful gist,但似乎没有在那里执行混合。这让我想知道这是否是我无法找到任何目的地颜色参考的原因:混合发生在其他地方。

除了SCNProgram暴行之外,SCNTechnique是唯一的方法吗?

P.S:gl_LastFragData的{​​{1}}上下文中唯一提到的Metal位于Metal Shading Language Specification4.8 Programmable Blending章中,如果我可以以某种方式访问​​{{1}在着色器修饰符中有类似的东西(如果可能的话)。

1 个答案:

答案 0 :(得分:0)

我只是想检查一下您是否没有忽略片段入口点?

在文档中说:“在执行所有其他着色之后,使用此入口点更改片段的颜色。”

我不确定访问“最后一个片段颜色”是否正是您的意思,但我认为这可能值得一提。

https://developer.apple.com/documentation/scenekit/scnshadermodifierentrypoint/1523342-fragment