Jump to content
SavitarDev

Shaders

Recommended Posts

Hola amigos, no se si sea una pregunta algo novata tengo un tiempo en unity c# scripting y decidí cambiarme a Shader (No es que dejare c# si no que, me gusta mucho la parte grafica y quiero aprender a hacer de todo en esa parte). Aun hay cosas claro que veo un script de shader y puedo darme la idea de que esta haciendo el script pero no entiendo al 100% todo por alguna razones.

Si, dije que llevaba un tiempo pero aun en si no entiendo al 100% que es un vector normalizado puede sonar novato pero no he encontrado alguna explicación que no sea para un ingeniero, bueno al epilogo:

1. ¿Que cual es la posición del TEXCORD,TEXCORD0,TEXCORD1?: Se que es la posición de la textura  pero, en que parte se sitúan estas cordenadas de textura?.

2. Una explicación para niños de preescolar de que es un vector normalizado y como lo podria usar: Yo lo he usado para disparos, ejemplo: Hacer que el jugador dispare en una dirección dada luego de que roto con un Quanternion o un Rotation, hacer que dispare siempre en un vector dado por ejemplo x usando medidas globales y no locales porque bueno..No tengo que decirlo.

 

Muchas gracias por su tiempo, espero me ayuden

Share this post


Link to post
Share on other sites

Hola,

No soy muy bueno explicándome, pero un vector puede ser un punto o posición, y también puede ser una dirección. En el caso de una dirección, también puede tener una longitud, por ejemplo, (0, 0, 5), sería un vector apuntando 5 unidades en el eje Z. En el caso que solo nos importe la dirección y no la longitud del vector, lo podemos normalizar, que no es más que pasarlo a una unidad de longitud, y nos quedaría (0, 0, 1), que tiene la misma dirección que (0, 0, 5), es decir dirección positiva en el eje Z.

Espero que así lo entiendas un poco mejor, un saludo.

Share this post


Link to post
Share on other sites

Hola @SavitarDev,

primero advertirte que si te quieres dedicar al tema shaders, podras contar poquito con el foro (las cosas como son) ... aqui hay muchos programadores por lo que si tienes una duda personal en programacion podran aclararte, pero en tema shaders no hay ningun experto (no se puede decir que ni tan solo haya nadie que entienda mucho, aunque no sea al nivel de experto) por lo que la ayuda que podras recibir en el foro no ira mucho mas alla de ponerte algun video colgado en youtube o el link de alguna pagina de internet y la causa es que los shaders es un tema mucho mas especializado y concreto dentro de la programacion.

por contra, y la parte buena, si te especializas en shaders tendras mucha mas salida (o como minimo te encontraras con mucha menos competencia) que si te dedicas a la programacion en general.

Respecto a tus preguntas, que perfectamente podrian ser dudas tanto de shaders como de programacion C# porque son temas compartidos en este caso, sobre los vectores nada que añadir a lo que comenta el compañero @OldGuy, simplemente es un conjunto de valores que hacen referencia a una posicion o direccion.

Sobre los vectores normalizados no es mas que el resultado de convertir un vector cualquiera para que todos sus valores esten comprendidos entre -1 y 1, pero guardando la proporcion con el vector original. Por ejemplo, si tienes el vector [-5, 0, 1] al normalizarlo obtendrias [-1, 0, 0.2]. En realidad el proceso de normalizar es muy sencillo, y es mas el nombre que recibe que no la dificultad del proceso pues no es otra cosa que dividir todos sus valores entre el valor (absoluto) del valor mas grande:

[-10, 0, 2.5] -> [-10 / 10, 0 / 10, 2.5 / 10] -> [-1, 0, 0.25]

Nota importante : tener en cuenta que aunque un vector puede hacer referencia a una posicion o direccion, un vector normalizado SIEMPRE hara referencia a una direccion y nunca se normalizara un vector cuando se trate de posiciones. Los vectores [-10, 0, 2.5] y [-1, 0, 0.25] son identicos cuando se refiere a direccion pero no cuando se hacen referencia a posiciones.

Share this post


Link to post
Share on other sites

porejemplo un vector2(8, 6):

el "modulo" seria "mivector.magnitude"

si recuerdas el teorema de pitagoras seria: raiz cuadrada de((8*8)+(6*6)) 

64+36 = 100

raiz = 10

la magnitude o "modulo" seria 10

que seria la longitud del vector

grid1.jpg

ahora "normalizarlo" seria hacer que el modulo/magnitude/longitud sea 1. para lo cual habria que dividir los valoras "x" e "y" entre el modulo(en este caso 10) para qu el modulo sea 1

existe "mivector.Normalize()"

con lo cual se quedaria asi el vector(0.8f, 0.6f) (y el modulo seria 1)

esto se usa para definir direcciones para movimiento, ya que al medir 1, puede multiplicarlo por una velocidad(y por el tiempo) para calcular el movimiento

 

respecto a "texcord" creo que son las UVs.... y el numero(texcord0, texcord1...) creo que es el "canal"... los shaders son un mundo que no termino de dominar...

Share this post


Link to post
Share on other sites

 

hace 3 horas, Arthure said:

Hola @SavitarDev,

primero advertirte que si te quieres dedicar al tema shaders, podras contar poquito con el foro (las cosas como son) ... aqui hay muchos programadores por lo que si tienes una duda personal en programacion podran aclararte, pero en tema shaders no hay ningun experto (no se puede decir que ni tan solo haya nadie que entienda mucho, aunque no sea al nivel de experto) por lo que la ayuda que podras recibir en el foro no ira mucho mas alla de ponerte algun video colgado en youtube o el link de alguna pagina de internet y la causa es que los shaders es un tema mucho mas especializado y concreto dentro de la programacion.

por contra, y la parte buena, si te especializas en shaders tendras mucha mas salida (o como minimo te encontraras con mucha menos competencia) que si te dedicas a la programacion en general.

Respecto a tus preguntas, que perfectamente podrian ser dudas tanto de shaders como de programacion C# porque son temas compartidos en este caso, sobre los vectores nada que añadir a lo que comenta el compañero @OldGuy, simplemente es un conjunto de valores que hacen referencia a una posicion o direccion.

Sobre los vectores normalizados no es mas que el resultado de convertir un vector cualquiera para que todos sus valores esten comprendidos entre -1 y 1, pero guardando la proporcion con el vector original. Por ejemplo, si tienes el vector [-5, 0, 1] al normalizarlo obtendrias [-1, 0, 0.2]. En realidad el proceso de normalizar es muy sencillo, y es mas el nombre que recibe que no la dificultad del proceso pues no es otra cosa que dividir todos sus valores entre el valor (absoluto) del valor mas grande:

[-10, 0, 2.5] -> [-10 / 10, 0 / 10, 2.5 / 10] -> [-1, 0, 0.25]

Nota importante : tener en cuenta que aunque un vector puede hacer referencia a una posicion o direccion, un vector normalizado SIEMPRE hara referencia a una direccion y nunca se normalizara un vector cuando se trate de posiciones. Los vectores [-10, 0, 2.5] y [-1, 0, 0.25] son identicos cuando se refiere a direccion pero no cuando se hacen referencia a posiciones.

 Gracias, ya comprendi lo necesario de un vector normalizado con razón lo usaban para eso que yo mismo decia el disparo de algo que toma en cuenta una posición global y no local y asi que disparace en una dirección dada.

hace 3 horas, Igor said:

porejemplo un vector2(8, 6):

el "modulo" seria "mivector.magnitude"

si recuerdas el teorema de pitagoras seria: raiz cuadrada de((8*8)+(6*6)) 

64+36 = 100

raiz = 10

la magnitude o "modulo" seria 10

que seria la longitud del vector

grid1.jpg

ahora "normalizarlo" seria hacer que el modulo/magnitude/longitud sea 1. para lo cual habria que dividir los valoras "x" e "y" entre el modulo(en este caso 10) para qu el modulo sea 1

existe "mivector.Normalize()"

con lo cual se quedaria asi el vector(0.8f, 0.6f) (y el modulo seria 1)

esto se usa para definir direcciones para movimiento, ya que al medir 1, puede multiplicarlo por una velocidad(y por el tiempo) para calcular el movimiento

 

respecto a "texcord" creo que son las UVs.... y el numero(texcord0, texcord1...) creo que es el "canal"... los shaders son un mundo que no termino de dominar...

Gracias por tu respuesta, yo ya habia investigado muy a fondo los vectores pero no me quedaba eso claro ya esta claro gracias

Share this post


Link to post
Share on other sites
11 hours ago, SavitarDev said:

Si, dije que llevaba un tiempo pero aun en si no entiendo al 100% que es un vector normalizado puede sonar novato pero no he encontrado alguna explicación que no sea para un ingeniero, bueno al epilogo:

Hola, quizas sea porque estás buscando info. en el lugar equivocado, el 60% de los shaders pasa por algebra vectorial, el resto es programas y etapas del rendering. Un vector3 normalizado es el mismo que podes encontrar en un libro de algebra cualquiera y su definición (primer resultado de google):

"Por lo tanto, normalizar un vector es tomar un vector de cualquier longitud y, mientras sigue apuntando en la misma dirección, cambiar su longitud a 1..." 

11 hours ago, SavitarDev said:

1. ¿Que cual es la posición del TEXCORD,TEXCORD0,TEXCORD1?: Se que es la posición de la textura  pero, en que parte se sitúan estas cordenadas de textura?.

Eso pasa el set de UV's (fijate que son Vectores bidimensionales) por los programas del shader, en si por el Vertex shader (primero), generalmente se usa el TEXCORD0 (si es que es el primero) o el TEXCORD (si, es que este es el primero, no recuerdo).

11 hours ago, SavitarDev said:

2. Una explicación para niños de preescolar de que es un vector normalizado y como lo podria usar: Yo lo he usado para disparos, ejemplo: Hacer que el jugador dispare en una dirección dada luego de que roto con un Quanternion o un Rotation, hacer que dispare siempre en un vector dado por ejemplo x usando medidas globales y no locales porque bueno..No tengo que decirlo.

Normalizar un vector, como te puse arriba implica algo muy simple, meter en la ecuacion la direccion, y no su magnitud, por eso es 1, en la multiplicación/división "1" es el elemento neutro (es decir, no jode), como "0" lo es en la suma/resta.

Querés un ejemplo de codigo/juegos típico? en varios juegos viejos te movias a una velocidad horizontal X (A o D), y a una velocidad vertical Y (W o S), pero si apretabas las entradas correspondientes a moverte en diagonal (ej W+D) te estas moviendo al valor de la hipotenusa = Raiz de (X al cuadrado + Y al cuadrado) que es > X o > Y, entonces en diagonal hacés trampa, por asi decirlo. Una simple solución es primero detectar la entrada, de aquí la Direccion, esto te da un vector de magnitud 1 en la direccion diagonal, ahora sí, estas en condición de ponerle la velocidad que quieras y la velocidad resultante es la misma , independientemente de la dirección.

Share this post


Link to post
Share on other sites

Por eso se usaba para hacer disparos ejemplo: Hacer un disparo en x y al rotar el objeto la posicion local ya no esta donde esta x al principio (sus valores locales), entonces se toma solo su dirección "x" y se hace disparo en ese vector, osea se lleva el vector a "numeros" mas manejables.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...