如何检查 Cg 中的数组元素是否为空? (Unity着色器开发)

How do I check if an array element is empty in Cg? (Unity shader development)

在我的着色器中,我声明了一个非序列化的 float4 数组并对元素执行了一段代码:

uniform float4 _HandPos[5];

v2f vert(appdata v) 
{
    float distH;

    for (float i = 0; i < _HandPos.Length; i++)
    {

         /*if element has not been assigned, assuming an empty element is NaN, 
         check distance between vertex and element*/
         if (!isnan(_HandPos[i]))
         {
             distH = distance(_HandPos[i], v.vertex);
         }
         //do something with distH here
    }
}

每帧,C# 脚本中的数组都会发送到 _HandPos。它并不总是为所有 5 个元素发送值,所以我必须过滤掉空的元素。在这里,我假设一个空元素是 NaN,但这似乎不起作用。

如果您不在每一帧中写入一个值,那么最后设置的任何值都将被保留。或者,您可以使用与需要重新处理的 _HandPos 元素相对应的 int 值数组。

请记住,GPU 上的分支语句(例如 if())通常会导致 GPU 执行两个分支然后丢弃一个值——因此如果这是一种优化,它可能是不会有预期的效果。