关于directx:Direct3D:输出4个颜色通道和一个单独的alpha?

Direct3D: Output 4 color channels and a separate alpha?

我想知道的事情,不幸的是,这可能是不可能的,但我想我会问 - 我正在设置一个延迟照明着色器,它接收 2 个纹理并输出到 2 个渲染目标。他们的频道是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Input Tex 1: Color Texture
  Channel 1: R
  Channel 2: G
  Channel 3: B
  Channel 4: A

Input Tex 2: Normal + Specular Texture
  Channel 1: X
  Channel 2: Y
  Channel 3: Z
  Channel 4: Specular Amount


Output Target 1: Color Target
  Channel 1: R
  Channel 2: G
  Channel 3: B
  Channel 4: A

Output Target 2: Normal+Specular Target
  Channel 1: X
  Channel 2: Y
  Channel 3: Z
  Channel 4: Specular Amount

很简单。除了 - 当输出到 Normal Specular 目标时,我想屏蔽使用 Color 纹理的 alpha 通道写入的像素以控制混合量。但是 - 我正在从着色器中输出一个 vector4 作为我的第二种颜色,它的通道都用完了。

那么有什么方法可以让 Direct3D 临时使用 alpha 值作为混合参数,用它来"屏蔽"我的 4 个规范规范通道,然后在使用后将其丢弃?还是让渲染目标 2 使用渲染目标 1 的 alpha 作为其混合参数?

我知道我可以仅使用 2 个分量来表示法线向量 - 例如商店 X


所以,为了跟进这一点 - 我最终只是使用 Spheremap 变换技术将 XYZ 法线编码为两个组件(页面 http://aras-p.info/texts/CompactNormalStorage.html 中提到的#3 #method03sphere )。

所以我正在向两个目标写入相同的 alpha 值以控制混合 - 找不到任何其他方式。


有趣的问题!只是大声想,我想知道您是否可以将遮罩值写入深度缓冲区的模板通道并在遮罩时使用它?