微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从深度缓冲区读取的 SCN 程序

如何解决从深度缓冲区读取的 SCN 程序

我正在研究 Scenekit 中的一些高级渲染,以及 SCNTechniqueSCNProgram 的用途。

我想像这样实现多通道渲染:

  1. 第一;使用内置的 PBR 着色器渲染整个场景,
  2. 第二;使用 SCNProgram 渲染单个节点,该节点访问第一遍的颜色和深度输出

我知道我可以使用 SCNTechnique 执行以下操作:

...
    <key>passes</key>
    <dict>
        <key>pass_scene</key>
        <dict>
            <key>draw</key>
            <string>DRAW_SCENE</string>
            <key>excludeCategoryMask</key>
            <string>The bit mask of the node to exclude</string>
            <key>outputs</key>
            <dict>
                <key>color</key>
                <string>COLOR</string>
                <key>depth</key>
                <string>DEPTH</string>
            </dict>
        </dict>
        <key>pass_object</key>
        <dict>
            <key>draw</key>
            <string>DRAW_SCENE</string>
            <key>includeCategoryMask</key>
            <string>The bit mask of the node to exclude</string>
            <key>inputs</key>
            <dict>
                <key>color</key>
                <string>COLOR</string>
                <key>depth</key>
                <string>DEPTH</string>
            </dict>
            <key>outputs</key>
            <dict>
                <key>color</key>
                <string>COLOR</string>
            </dict>
            <key>MetalVertexShader</key>
            <string>myCustomVertShader</string>
            <key>MetalFragmentShader</key>
            <string> myCustomFragShader </string>
        </dict>
    </dict>
    <key>sequence</key>
    <array>
        <string>pass_scene</string>
        <string>pass_object</string>
    </array>
...

但我想对对象渲染使用 SCNProgram,而不是在 MetalVertexShader 中指定 MetalFragmentShaderSCNTechnique

我不知道如何将颜色和深度缓冲区从 SCNTechnique 的第一遍传递到 SCNProgram 以进行第二遍。

有谁知道怎么解决这个问题?文档很难拼凑,也很难调试问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。