有没有一种方法可以在Metal着色器修改器中访问最后一个片段颜色(目标颜色),类似于中的?我的目标是使用着色器修改器执行自定义混合(在我的情况下,SceneKit的不足够)。目前,我正在使用3个传递的来实现这一点(渲染目标,渲染源,合并),这对我来说似乎是一个重大的过度杀伤+很难有几个混合组而不引入新的传递。由于多种原因,似乎不是一个选择(我正在使用PBR,细分/曲面细分;我想现在还是坚持使用技术)。我已经尝试使用<#extension GL_EXT_shader_framebuffer_fetch:require>,如this answer所建议的那样,但即使对于GLSL着色器修改器也无法正常工作(我正在使用和)。
我也偶然发现了这个精美的Gist,其中包含了SceneKit的默认Metal着色器实现,但似乎没有进行混合。这让我想知道是否这就是我找不到任何目标颜色参考的原因:混合发生在其他地方。
除了SCNTechnique丑陋的方法之外,
P.S: 我在Metal Shading Language Specification的第4.8章“可编程混合”中找到了关于
我也偶然发现了这个精美的Gist,其中包含了SceneKit的默认Metal着色器实现,但似乎没有进行混合。这让我想知道是否这就是我找不到任何目标颜色参考的原因:混合发生在其他地方。
除了SCNTechnique丑陋的方法之外,
SCNProgram
是唯一的选择吗?P.S: 我在Metal Shading Language Specification的第4.8章“可编程混合”中找到了关于
Metal
上gl_LastFragData
的唯一提及,如果我能在着色器修改器中以某种方式访问[[color(0)]]
或类似的东西,那将非常有帮助(即使可能性很小)。