2

我正在尝试在我的着色器中进行绝对差的总和,并将单个结果写回统一的统一浮点数。在着色器中,我有 2 个具有相同顶点数的几何图形,它们一对一映射。

            // substract vertices
            float norm = 10;
            float error=infereCrater.vertex.y-v.vertex.y;
            error = error*error*norm;
            o.debugColor = float3(error,1-error ,0.0f);
            //////
            o.posWorld =mul(_Object2World,v.vertex);
            o.normalWorld = normalize(mul(float4(v.normal,0.0),_World2Object).xyz);
            o.tangentWorld = normalize(mul(float4(v.tangent,0.0),_World2Object).xyz);
            o.binormalWorld = cross(o.normalWorld,o.tangentWorld);
            o.tex = v.texcoord;
            o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
            TRANSFER_VERTEX_TO_FRAGMENT(o);
            return o;
        }

我可以计算每个单独顶点的误差,并根据差异改变表面的颜色。我遇到了一个障碍,我不知道如何同步所有线程并开始累加值。

有没有办法在第一个顶点着色器完成后调用另一个顶点着色器?

顶点着色器如何读取相邻顶点的值?(不要认为它可能,因为在线程的本地内存中)

或者它可能有一个全局数组来存储差异值,将其复制到 CPU(由于延迟我不想要)并将它们添加到 CPU 中?

我不想使用计算着色器,因为我不在 Windows 中

4

0 回答 0