我想知道的事情,不幸的是,这可能是不可能的,但我想我会问 - 我正在设置一个延迟照明着色器,它接收 2 个纹理并输出到 2 个渲染目标。他们的渠道是:
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 目标时,我想屏蔽使用颜色纹理的 alpha 通道写入的像素以控制混合量。但是 - 我正在从着色器中输出一个 vector4 作为我的第二种颜色,它的通道都用完了。
那么有什么方法可以让 Direct3D 临时使用 alpha 值作为混合参数,用它来“屏蔽”我的 4 个规范 + 规范通道,然后在使用后丢弃它?还是让渲染目标 2 使用渲染目标 1 的 alpha 作为其混合参数?
我知道我可以只使用 2 个分量来表示法线向量 - 例如,存储 X 和 Y 然后动态重新计算 Z - 但是如果我可以不改变它们,这个过程会更简单并且可能会表现得更好 - 所以希望找到一个那样解决。
谢谢!