如何在 ARKit 中打印出着色器修改器输出?

Posted

技术标签:

【中文标题】如何在 ARKit 中打印出着色器修改器输出?【英文标题】:How can I print out shader modifier output in ARKit? 【发布时间】:2021-10-27 07:27:49 【问题描述】:

我正在使用 SCNMaterial 并使用表面着色器修改器设置它的diffuse.contents。 我想记录一些正在输入着色器的颜色值,但我找不到这样做。 有没有办法在着色器修改器执行后读取和打印_surface.diffuse.rgba?

我们在 SCNPlane 上显示一个带有绿色背景的视频,我们希望它知道该绿色的确切渲染颜色。它被创建为 (0,220,0,1) 但不知何故它被着色器修改器读取为不同的绿色,我们无法将其屏蔽掉,因为我们可以屏蔽掉全绿色 (0,255,0,1) bg 视频。

【问题讨论】:

【参考方案1】:

Xcode 有一个 GPU 调试器来调查特定帧在 GPU 上发生的情况,请参阅 https://developer.apple.com/documentation/metal/shader_authoring/developing_and_debugging_metal_shaders

至于为什么颜色看起来不一样,可能是色彩空间问题。当您向 SceneKit 着色器修改器提供颜色组件时,将它们置于正确的颜色空间中很重要。见https://***.com/a/44045637/2997825

【讨论】:

感谢您的建议。我无法打印出这些值,但我发现 SceneKit 对着色器使用了预乘 alpha。这有助于我过滤掉正确的颜色值。 ***.com/a/51709176/4156490

以上是关于如何在 ARKit 中打印出着色器修改器输出?的主要内容,如果未能解决你的问题,请参考以下文章

ARKit,用于ARSCNView的金属着色器

如何改善 ARKit 3.0 中的人物遮挡

如何在片段着色器中找到 4 个顶点之间的插值位置?

如何通过在 glsl 中注册来设置着色器常量?

如何在Vim插件输出中为单词着色

如何为溶解效果编写 sceneKit 着色器修改器