2

シェーダー内で絶対差の合計を実行し、単一の結果を統一された均一なフロートに書き戻そうとしています。シェーダーには、1 対 1 でマップされる同じ数の頂点を持つ 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 に追加することは可能ですか?

I don't want to use compute shader because I am not in Windows

4

0 に答える 0