【发布时间】:2018-03-29 11:10:35
【问题描述】:
有没有办法访问金属着色器修改器中的最后一个片段颜色(目标颜色),类似于GLES 中的gl_LastFragData?
我的目标是使用着色器修改器执行自定义混合(SceneKit 的SCNBlendModes 不适用于我的情况)。目前我正在使用SCNTechnique 和 3 个通道(渲染目标、渲染源、组合)来实现这一点,这对我来说似乎是一个主要的矫枉过正 + 在不引入新通道的情况下很难有几个混合组。
SCNProgram 似乎不是一个选项,原因有几个(我正在使用PBR,镶嵌/细分;我想我现在宁愿坚持使用技术)。
我已尝试按照this answer 中的建议使用#extension GL_EXT_shader_framebuffer_fetch : require,但即使对 GLSL 着色器修改器也不起作用(我使用的是Xcode 9.0 和iOS 11)。
我还偶然发现this wonderful gist 具有 SceneKit 的默认金属着色器实现,但似乎没有在那里执行混合。这让我想知道这是否就是我找不到任何目标颜色参考的原因:混合发生在其他地方。
SCNProgram 是除了SCNTechnique 暴行之外的唯一途径吗?
附注:
我发现在Metal 的上下文中唯一提到gl_LastFragData 是在Metal Shading Language Specification 的4.8 Programmable Blending 章中,如果我能以某种方式访问[[color(0)]] 或着色器修改器中的类似内容(如果这甚至是可能的)。
【问题讨论】:
-
我也想知道这个。你有想过这个吗?
-
这里也一样。有这方面的消息吗?