像素着色器中的Alpha插值

Alpha参数中,片段着色器中的插值如何工作?

我正在用SharpDX,DirectX11编程着色器。 我的想法是插入一个段的2个3d点,以便在像素着色器中插入位置。 但是我想知道当这个位置被另一个多边形阻塞时alpha参数会发生什么。

例如,如果在我的片段左端alpha为1.0,另一个为0.0。 alpha在0.5的值是多less? 还是取决于当时的可见性(也就是说,它可能是1.0或0.0,取决于该部分是否被poolygon隐藏了?

Alpha与深度testing无关。 所有的顶点着色器输出只是在像素上进行内插,而不会根据每个像素的可见性而改变。 在你的例子中,如果从顶点着色器输出的alpha参数在一端为0,而在矩形的另一端为1,则在中心将是0.5。

认为你在那里混淆了一些概念。

这也取决于您向着色器提供哪些input,因为最简单的着色器根本不需要任何input。

以下是GLSL中的极简片段着色器,但我认为它也可以在HLSL中使用(或者具有极小的变化):

float4 main() { float4 color; color.rgba = 1; return color; } 

这将简单地设置任何和所有像素为纯白色。 你当然可以设置一个基于位置的alpha值,但这有点棘手。

问题的第二部分对我来说并不是100%清楚:如果多边形的一部分隐藏在其他东西后面(即深度testing失败),那么显卡甚至不会执行该像素的着色器代码(优化)。 这也是为什么渲染顺序在使用alpha透明度时很重要的原因。 您当然可以禁用深度testing,然后根据该位置的深度(完全透明/隐藏或基于深度等)调整像素颜色。

你的问题没有一般的概念或解决scheme。 这真的取决于你的目标。