有没有办法在{Shader修饰符> gl_LastFragData
中与GLES
类似的方式访问最后一个片段颜色(目标颜色)?
我的目标是使用着色器修改器执行自定义混合(SceneKit的SCNBlendMode
在我的情况下是不够的)。目前我正在使用SCNTechnique
进行3次传递(渲染目标,渲染源,组合)来实现这一点,这对我来说似乎是一个重大的过度杀戮+在没有引入新传递的情况下很难有多个混合组
SCNProgram
似乎不是一个选项,原因有几个(我正在使用PBR,曲面细分/细分;我现在宁愿坚持使用技术。)
我已按照this answer中的建议尝试使用#extension GL_EXT_shader_framebuffer_fetch : require
,但即使对于GLSL着色器修饰符(我正在使用Xcode 9.0
和iOS 11
)它也不起作用
我也偶然发现了具有SceneKit默认金属着色器实现的this wonderful gist,但似乎没有在那里执行混合。这让我想知道这是否是我无法找到任何目的地颜色参考的原因:混合发生在其他地方。
除了SCNProgram
暴行之外,SCNTechnique
是唯一的方法吗?
P.S:
在gl_LastFragData
的{{1}}上下文中唯一提到的Metal
位于Metal Shading Language Specification的4.8 Programmable Blending
章中,如果我可以以某种方式访问{{1}在着色器修饰符中有类似的东西(如果可能的话)。
答案 0 :(得分:0)
我只是想检查一下您是否没有忽略片段入口点?
在文档中说:“在执行所有其他着色之后,使用此入口点更改片段的颜色。”
我不确定访问“最后一个片段颜色”是否正是您的意思,但我认为这可能值得一提。
https://developer.apple.com/documentation/scenekit/scnshadermodifierentrypoint/1523342-fragment