GC
内部にシェーダーを書き込むために使用していますUnity3D
。
いくつかのパラメーターをシェーダーに渡すために頂点カラー属性を使用しています。これらは色の定義には使用されず、変更せずに頂点シェーダーからピクセル シェーダーに転送する必要があります。
これは、Unity3D から頂点シェーダーへの入力として取っている構造です。
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
fixed4 color : COLOR;
#if defined(SHADER_API_XBOX360)
half4 texcoord2 : TEXCOORD2;
half4 texcoord3 : TEXCOORD3;
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
};
これは、フラグメントへの入力として頂点シェーダーによって返される構造です。
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
fixed4 col: COLOR;
};
パラメータを単にフラグメント シェーダに転送すると、もちろん補間されます。
v2f vert (appdata_full v)
{
v2f output;
//....
output.col = v.color;
}
v.color
補間されていないパラメータをフラグメントシェーダに渡したいです。これは可能ですか?はいの場合、どのように?
編集
ティムが指摘したように、頂点シェーダーからフラグメントに渡された場合、シェーダーは色を補間する以外に何もできないため、これは予想される動作です。私が達成しようとしていることをよりよく説明しようとします。色以外の種類の情報を保存するために、頂点ごとの色を使用しています。私がそれで何をしているのかについてのすべての詳細を言わずに、各色の頂点をidと見なすことができるとしましょう(同じ三角形の各頂点は同じ色になります。実際には同じメッシュの各頂点)。
そのため、他に方法がないため、カラー トリックを使用していくつかのパラメーターをマスクしました。この情報は、何らかの方法でフラグメント シェーダーで利用できる必要があります。頂点シェーダーの出力パラメーターとして渡す場合、色にエンコードされたこの情報はフラグメントに補間されて到着し、フラグメントは使用できなくなります。
この情報を変更せずにフラグメント シェーダーまで伝播する方法を探しています (グローバル変数などを使用することは可能でしょうか?そうであれば、どのようにすればよいでしょうか?)。