Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Instrucciones De Ps En Vs?

Iniciado por _Grey, 11 de Septiembre de 2004, 04:44:03 AM

« anterior - próximo »

_Grey

 Como alguna ya sabra, estoy picoteando algo de los shaders, ni dentro de mis programas DirectX sino en RenderMonkey.

La cosa es que dudo si se pueden usar instrucciones de Pixel Shaders en los Vertex Shaders. Es dicer leer los texels de una textura, por ejemplo, para usarlos en el proceso de trasformacion de los vertices. Lo que pasa es que en el libro que tengo de nivel ASM, da la lista de instrucciones por separado, y no se si se puede.
En RenderMonkey no parece haber problemas para leer un texel de una textura en el vertex shader, pero claro, como fuera del IDE no lo uso y no hace mas que leer un texel, realmente no se si es que solo compila bien, pero despues no funcionara a la practica.

Alguien lo sabe ???

Gracias.

BeRSeRKeR

 Hasta lo que yo sé, no se puede leer una textura desde un vertex shader (¿cómo lo haces en RenderMonkey?). A no ser que con el Shader Model 3.0 se pueda.

Donde sí se podrá hacer eso es en la siguiente versión de los shaders. Entonces los vertex & pixel shaders se unificarán. Así que, por ejemplo, podrías hacer displacement mapping sin problemas.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

_Grey

 
Citar¿cómo lo haces en RenderMonkey?

En la pruebecilla del RenderMonkey, me limito a poner un :

sampler2D EndColorMap;

y dentro del codigo:

float4 ColorOut = tex2D(EndColorMap,In.Pos.xy);

El In.Pos, no es mas que las coordenadas del Vertice entrante.

Y para mi sorpresa, compila prefectamente!!, pero claro como realmente no le doy utilidad, y me parece tan extraño...! por que como he dicho en el shadersX pone la lista de instrucciones de VS y PS por separado, y no me atrevo a decir que realmente sea posible. Igual solo compila, y la lectura de textura solo da 0...en fin, algo que me intriga.

BeRSeRKeR

 He intentado hacer un displacement mapping para comprobar lo que dices y como era de esperar:

error X4545: vs_2_0 target does not support texture lookups

De todas formas, si te fijas, en el panel "Constant Editor" del vertex shader, el campo "Sampler" está desactivado, lo que quiere decir que no puedes declarar samplers en el vertex shader.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

BeRSeRKeR

 Mira, éste es el código HLSL de la prueba que he hecho:

sampler2D Texture0;

struct VS_OUTPUT
{
float4 Pos:  POSITION;
float2 Tex0: TEXCOORD0;
};

VS_OUTPUT vs_main( float4 inPos: POSITION, float2 inTex0: TEXCOORD0 )
{
VS_OUTPUT Out;

float4 h = tex2D(Texture0, inTex0);

Out.Pos = mul(view_proj_matrix, inPos);
Out.Tex0 = inTex0;

return Out;
}


Y ahora mira la salida en asm:

// view_proj_matrix: registers c0-c3 (4 registers total)
vs_2_0
dcl_position v0
dcl_texcoord v1
mul r0, v0.x, c0
mad r2, v0.y, c1, r0
mad r4, v0.z, c2, r2
mad oPos, v0.w, c3, r4
mov oT0.xy, v1


Como puedes ver no hay ni rastro del texture lookup.

Y ahora, si intento utilizar el resultado del lookup de la textura:

VS_OUTPUT vs_main( float4 inPos: POSITION, float2 inTex0: TEXCOORD0 )
{
VS_OUTPUT Out;

float4 h = tex2D(Texture0, inTex0);

inPos *= h;    // <- ¡¡ERROR!!

Out.Pos = mul(view_proj_matrix, inPos);
Out.Tex0 = inTex0;

return Out;
}


Salta el error que he mencionado en el mensaje anterior.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

_Grey

 Exactamente.

Como tu dices no es posible, simplemente te lo deja poner en el codigo, y compila sin dar error. Pero en el codigo ASM no aparece ni rastro de la lectura de la textura.

En fin una dudilla de principiante en los shaders  :rolleyes:  

Gracias y saludos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.