Шейдер CGFX, многократно выводящий данные верт.

Как я могу выводить что-то из вершинного шейдера в пиксельный шейдер несколько раз. Например, мне нужно вывести цвет вершины в виде числа с плавающей запятой 4 в пиксельный шейдер 4 раза после выполнения различных математических операций с цветом вершины в вершинном шейдере?

я могу это сделать? Я попытался создать пустой float4 color2, читая In.vertcolor из In.color и выводя это ... Я не получаю никаких ошибок, но моя текстура белая. Это просто чтение любого пустого числа с плавающей запятой 4 ...

вот мой код для этого раздела. Спасибо!

//////////////////////////////////////////////////////////////
// Structs section 
// input from application
struct a2v {
float4 position  : POSITION;
float4 normal    : NORMAL;
float2 texCoord : TEXCOORD0;
float2 secondUV : TEXCOORD1;
float4 color: COLOR;
float4 color2;

};

// output to fragment program
struct v2f {
    float4 position        : POSITION;
    float2 texCoord : TEXCOORD0;

    float2 secondUV : TEXCOORD1;
    float3 worldNormal     : TEXCOORD2;
    float4 color: COLOR;
    float4 color2;

};



//////////////////////////////////////////////////////////////
// Vertex Shader 

v2f vShader(a2v In)
{
v2f Out;
Out.texCoord = In.texCoord;
Out.secondUV = In.secondUV;

float4 Mask1 = floor ((fmod((In.color  * 100f ), 10f))) *.111f;
float4 Mask2 = floor ((fmod((In.color2  * 100f ), 10f))) *.111f;
Out.color = Mask1;
Out.color2 = Mask2;


Out.position = mul(WorldViewProjection, In.position);
Out.worldNormal = mul(WorldInverseTranspose, In.normal).xyz;

return Out;
}

person fghajhe    schedule 27.06.2012    source источник


Ответы (1)


Существует атрибут привязки COLOR1, который вы можете назначить полю 'color2' в структурах a2v и v2f.

Обязательно выделите вторичный цвет (COLOR1) как поток атрибутов в вашем приложении.

person Viktor Latypov    schedule 27.06.2012
comment
Изменить: Большое спасибо! Я застрял на этом пару часов. Есть ли способ вывести цвет еще несколько раз или 2 лимит? Я спрашиваю, потому что Unity Game Engine перестает работать после COLOR1, например, COLOR2 не работает. Хорошо, по крайней мере, я могу вывести его дважды благодаря тебе. Один из шейдеров, который я хочу перенести, требует, чтобы я 4 раза произвел некоторые математические вычисления с цветами вершин в вершинном шейдере и вывел их различные результаты в пиксельный шейдер. Maya cgfx в порядке, потому что он поддерживает несколько наборов цветов, поэтому может принимать COLOR4 и т. Д. Но Unity, с другой стороны ... кажется, принимает только COLOR, COLOR1 - person fghajhe; 27.06.2012
comment
Извините, я не знаток единства. Ищите все возможные потоки Aux. Возможно, вы можете упаковать Color2 в массивы касательных / бинормалей, если вы не используете их для других вещей. - person Viktor Latypov; 27.06.2012
comment
Хорошо, без проблем. Просто возможность вывести его дважды мне очень помогает! Я также посмотрю на упаковку в другие массивы - person fghajhe; 27.06.2012