【问题标题】:HLSL Multi-passHLSL 多通道
【发布时间】:2014-01-21 19:59:16
【问题描述】:

我了解(至少在 xna 项目的 .fx 中使用 hlsl)每种技术都可以有多个通道,并且每个通道都与某个设备状态及其顶点和像素着色器功能相关联。现在我的问题是:鉴于技术中的通道是一个接一个地执行的,每个通道是否意味着通过渲染管道的完整通道? 例如,如果我有一个两次通过的技术,那么以下陈述是否正确: 第一遍获取应用程序的数据(VertexBuffer)并通过管道,第二遍获取第一个吐出的数据并再次通过管道。

【问题讨论】:

    标签: xna shader hlsl


    【解决方案1】:

    通行证通常是相互独立的。所有通道都将使用相同的输入几何图形(通常由顶点缓冲区定义)。他们对这个几何图形所做的事情可能会有所不同。

    例如你可以有两次传球的技术。第一遍以通常的方式绘制对象。第二遍不会绘制对象,而是将法线绘制为小线。结果是法线表示为线的对象。

    类似地,多通道可用于范围广泛的效果,例如毛发、发光、光晕……请记住,管道的结果通常是一种颜色。如果您想将此结果用作另一个着色器的输入,则需要重新连接管道(即设置新的输入对象、着色器...)。

    【讨论】:

    • 感谢您的明确回答,但现在我有一个疑问:用两个通道制作一个着色器而不是只用一个通道制作两个着色器有什么区别?是否只是为了保持整洁并赋予效果一种联系感?
    • 是的,这就是重点。大多数渲染对象的代码都涉及for each pass in technique { apply pass, render object }。这样做比每次都应用不同的着色器更具可读性。此外,这个功能可以封装在一个方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2018-06-19
    • 1970-01-01
    • 2022-09-25
    • 2012-04-09
    相关资源
    最近更新 更多