CGFX着色器从alpha通道提取数据

CGFX着色器从alpha通道提取数据,c,colors,shader,vertex,cg,C,Colors,Shader,Vertex,Cg,我也在Nvidia开发者讨论会上发布了这篇文章 我正在学习编写我的第一个cgfx着色器-地形着色器。 因此,我只能使用1个顶点通道alpha通道,我希望它存储3个遮罩。我在3d应用程序Maya中编程了一个脚本“没问题”,在那里我可以在十分之一处存储一个面具,在百分之一处存储一个面具,在千分之一处存储一个面具 每一个原始的喷漆面罩都被夹在0-.9之间,以防止fmod调零 因此,如果vert具有: 掩码1=.857 掩码2=.345 面具3-948 此顶点的组合alpha通道为=.839 我遇到的问

我也在Nvidia开发者讨论会上发布了这篇文章

我正在学习编写我的第一个cgfx着色器-地形着色器。 因此,我只能使用1个顶点通道alpha通道,我希望它存储3个遮罩。我在3d应用程序Maya中编程了一个脚本“没问题”,在那里我可以在十分之一处存储一个面具,在百分之一处存储一个面具,在千分之一处存储一个面具

每一个原始的喷漆面罩都被夹在0-.9之间,以防止fmod调零 因此,如果vert具有:

掩码1=.857

掩码2=.345

面具3-948

此顶点的组合alpha通道为=.839

我遇到的问题是,我无法在着色器中将这些遮罩正确地提取到单独的遮罩中

如果我输出Mask1,我会得到正确的混合好的mask。 我通过以下方式做到这一点:

float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;
如果我输出Mask2,我会得到所有这些奇怪的工件。看起来mask1正在将自己推上,即使我只输出Mask2。我肯定数学是可行的,我在Maya中运行了同样的程序来存储要开始的值。谁能告诉我为什么会这样

甚至:

只需将遮罩2推到十分之一的位置,擦除遮罩1就会产生相同的伪影

float Mcolor = In.VertColor.a;
float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;
float Mask2 = (fmod((Mcolor * 100f ), 10f)) *.111f;
我在英伟达论坛上发布了一些问题的图片,但是我不能在这里发布垃圾邮件预防。 非常感谢您的帮助-感谢您通读!如果你能/有时间,请解释你的回答,我是编程新手,所以描述得越多越好

只需向顶点着色器添加额外的输出值即可。给它一个“texcoord”语义,例如float4掩码:TEXCOORD1

然后只需指定'OUT.Masks.x'而不是'Mask1','OUT.Masks.y'而不是'Mask2'等等


在片段/像素着色器中,只需使用连接器结构在输入中包含相同的值,即可轻松管理并读取'In.Masks.x'等

好的,我发现了问题。我需要在顶点着色器中执行此操作,而不是在像素着色器中。所以现在我的问题是。如何将某些内容从顶点着色器多次输出到像素着色器。例如,在顶点着色器中对顶点颜色执行一些不同的数学操作后,我需要将顶点颜色作为浮点4输出到像素着色器4次?我能做这个吗?我尝试创建一个空的float4 color2,从In.color读取In.vertcolor并输出它。。。我没有得到任何错误,但我的纹理是白色的。它只是读取任何空的浮动4。。。
float Mcolor = In.VertColor.a;
float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;
float Mask2 = (fmod((Mcolor * 100f ), 10f)) *.111f;