gpt4 book ai didi

CGFX 着色器从 Alpha channel 提取数据

转载 作者:行者123 更新时间:2023-11-30 17:59:43 25 4
gpt4 key购买 nike

我也在 Nvidia 开发者讨论中发布了此内容。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

我正在学习编写我的第一个 cgfx 着色器 - 地形着色器。所以我只能使用 1 个顶点 channel (alpha channel ),并且我希望它存储 3 个蒙版。我在 3d App Maya 中编写了一个脚本,没有问题,我可以在十分之一处存储 1 个蒙版,在百分位处存储 1 个,在千分位处存储 1 个蒙版。

每个原始绘制的蒙版都被固定在 0 - .9(以防止使用 fmod 归零)所以如果一个顶点有:

掩码 1 =.857

掩码 2 =.345

掩码 3 -.948

该顶点的组合 Alpha channel = .839

我遇到的问题是我无法在着色器中将这些蒙版正确提取到单独的蒙版中。

如果我输出 Mask1,我会得到正确的、良好混合的蒙版。我这样做是通过:

float Mask1 = (fmod((Mcolor  * 10f ), 10f)) *.111f;

如果我输出 Mask2,我会得到所有这些奇怪的文物。看起来 mask1 正在将自己推到上面,即使我只输出 Mask2。我确信数学是有效的,我已经在 Maya 中运行了同样的操作来存储值。谁能告诉我为什么会发生这种情况?

偶数:

float Mask2 = frac(Mcolor *10);

只需将掩模 2 推到十分之一位置并删除掩模 1 就会产生相同的伪影。

float Mcolor = In.VertColor.a;
float Mask1 = (fmod((Mcolor * 10f ), 10f)) *.111f;
float Mask2 = (fmod((Mcolor * 100f ), 10f)) *.111f;

我在 Nvidia 论坛上发布了一些该问题的图片,但由于垃圾邮件防护,我无法在这里发布。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

非常感谢您的帮助 - 感谢您的阅读!如果您可以/有时间,请解释您的回复,我是编程新手,因此描述性越强越好!

最佳答案

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

然后只需分配“OUT.Masks.x”而不是“Mask1”,“OUT.Masks.y”而不是“Mask2”等

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

关于CGFX 着色器从 Alpha channel 提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com