HLSL像素着色器中使用Texture2D数组作为渲染目标

3

目前,我需要从我的渲染通道中获取几个贴图的每像素数据(法线、深度和颜色)。

我不想运行三个着色器本质上相同的渲染通道(WorldViewPos乘法等),但每个通道将不同类型的数据输出到纹理中(例如一个通道用于颜色,一个通道用于深度,一个通道用于法线)。我想使用Texture3D对象或理想情况下使用Texture2D数组作为我的像素着色器的渲染目标。这样一来,我就可以将这三个渲染通道缩减为一个渲染通道,并一次性输出所有数据。

不幸的是,我找到的唯一示例是针对几何着色器的。在像素着色器内,有没有一种方法可以指定向哪个纹理数组发送数据?

1个回答

3
你需要的是“多重渲染目标”(Multiple Render Targets)。你可以使用GraphicsDevice.SetRenderTargetsMSDN还可参考)来设置多个渲染目标。在HLSL像素着色器中,可以通过将颜色输出到COLOR0(语义semantic)来输出到第一个目标,使用COLOR1输出到第二个目标,以此类推。最后,你必须使用允许同时设置最多4个渲染目标的HiDef配置文件。
编辑:我刚意识到我给出了XNA答案 - 但实际上你没有标记问题所涉及的API。对于DirectX、SlimDX等,HLSL应该是相同的。在DirectX中设置渲染目标,你需要使用IDirect3DDevice9::SetRenderTargetMSDN)。

谢谢,这正是我需要的,但我在实现过程中遇到了问题。由于我不得不粘贴大量数据以进行详细说明,因此我为此新建了一个问题。它可以在这里找到:https://dev59.com/mlnUa4cB1Zd3GeqPd8kl - Nick Udell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接