SceneKit - 在着色器修改器中访问目标颜色以进行混合
Posted
技术标签:
【中文标题】SceneKit - 在着色器修改器中访问目标颜色以进行混合【英文标题】:SceneKit – access destination color in shader modifier for blending 【发布时间】:2018-03-29 11:10:35 【问题描述】:有没有办法访问金属着色器修改器中的最后一个片段颜色(目标颜色),类似于GLES
中的gl_LastFragData
?
我的目标是使用着色器修改器执行自定义混合(SceneKit 的SCNBlendMode
s 不适用于我的情况)。目前我正在使用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)]]
或着色器修改器中的类似内容(如果这甚至是可能的)。
【问题讨论】:
我也想知道这个。你有想过这个吗? 这里也一样。有这方面的消息吗? 【参考方案1】:我只是想检查一下您是否忽略了片段入口点?
在文档中它说:“在执行所有其他着色后,使用此入口点更改片段的颜色。”
我不确定这是否正是您访问“最后一个片段颜色”的意思,但我认为这可能值得一提。
https://developer.apple.com/documentation/scenekit/scnshadermodifierentrypoint/1523342-fragment
【讨论】:
以上是关于SceneKit - 在着色器修改器中访问目标颜色以进行混合的主要内容,如果未能解决你的问题,请参考以下文章