【发布时间】:2013-06-06 15:41:45
【问题描述】:
我想知道的事情,不幸的是这可能是不可能的,但我想我会问 - 我正在设置一个延迟照明着色器,它接收 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 - 但如果我可以不改变它们,这个过程会更简单并且可能表现更好 - 所以希望以这种方式找到解决方案。
谢谢!
【问题讨论】:
-
使用第三个渲染目标怎么样?可以存储诸如镜面反射之类的材料信息,并且将来可能是发射部分。此外,您可以存储许多有趣的后期效果的深度:)
-
-
谢谢 - 我认为这两种方法都行得通 - 我现在正在尝试球坐标方法。
标签: directx direct3d rendertarget