【问题标题】:SceneKit – access destination color in shader modifier for blendingSceneKit - 在着色器修改器中访问目标颜色以进行混合
【发布时间】: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.0iOS 11)。

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

SCNProgram 是除了SCNTechnique 暴行之外的唯一途径吗?

附注: 我发现在Metal 的上下文中唯一提到gl_LastFragData 是在Metal Shading Language Specification4.8 Programmable Blending 章中,如果我能以某种方式访问​​[[color(0)]] 或着色器修改器中的类似内容(如果这甚至是可能的)。

【问题讨论】:

  • 我也想知道这个。你有想过这个吗?
  • 这里也一样。有这方面的消息吗?

标签: scenekit metal


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 2017-01-20
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多