Está en la página 1de 6

1.1.6.

Matrices y sistemas de coordenadas | Jettelly Learn 16/12/21, 10:37

1.1.6. Matrices y sistemas de


coordenadas
Uno de los conceptos que veremos con frecuencia en la creación de
shaders es el de matrices. Una matriz es una lista de elementos
numéricos que siguen ciertas reglas aritméticas y son utilizadas con
frecuencia en computer graphics.

En Unity las matrices representan una transformación espacial y entre


ellas podemos encontrar:

UNITY_MATRIX_MVP.
UNITY_MATRIX_MV.
UNITY_MATRIX_V.
UNITY_MATRIX_P.
UNITY_MATRIX_VP.
UNITY_MATRIX_T_MV.
UNITY_MATRIX_IT_MV.
unity_ObjectToWorld.
unity_WorldToObject.

Todas estas corresponden a matrices de cuatro por cuatro dimensiones


(4×4), es decir, que cada una de ellas posee cuatro filas y cuatro
columnas de valores numéricos. Su representación conceptual es la
siguiente:

https://learn.jettelly.com/es/curso/biblia-de-shader-en-unity/usb-capitulo-1/matrices-y-sistemas-de-coordenadas/ Page 1 of 6
1.1.6. Matrices y sistemas de coordenadas | Jettelly Learn 16/12/21, 10:37

Como ejemplificamos anteriormente en la sección 1.0.2; donde hablamos


de vértices, un objeto poligonal posee dos nodos por defecto. En Maya
estos nodos son conocidos como transform y shape, y ambos se
encargan de calcular la posición de los vértices en un espacio
denominado object-space, el cual define la posición de los vértices en
relación a la posición del centro del mismo objeto.

El valor final de cada vértice en el espacio del objeto es multiplicado por


una matriz conocida como model matrix (UNITY_MATRIX_M), la cual
permite modificar los valores de transformación, rotación y escala de los
vértices de un objeto. Cada vez que nosotros rotamos, cambiamos de
posición o escalamos nuestro objeto entonces el model matrix es
actualizado, pero ¿cómo ocurre este proceso?

Para entenderlo vamos a suponer que tenemos un cubo en nuestra


escena y deseamos transformar sus valores utilizando un model matrix.
Iniciaremos tomando un vértice de nuestro cubo que se encuentra en la
posición XYZW [0.5, -0.5, -0.5, 1] respecto a su centro.

Cabe mencionar que el canal “W” en el ejemplo anterior corresponde a un


sistema de coordenadas denominado “homogéneo”, el cual nos permite

https://learn.jettelly.com/es/curso/biblia-de-shader-en-unity/usb-capitulo-1/matrices-y-sistemas-de-coordenadas/ Page 2 of 6
1.1.6. Matrices y sistemas de coordenadas | Jettelly Learn 16/12/21, 10:37

manejar vectores y puntos de manera uniforme. En las transformaciones


de matrices, la coordenada W puede ser igual a “cero o a uno”. Cuando W
es igual a uno (e.g. X, Y, Z, 1), se refiere a un punto en el espacio, mientras
que, cuando es igual a cero (e.g. X, Y, Z, 0), se refiere a una dirección en el
espacio.

Más adelante en este libro hablaremos de este sistema cuando


multipliquemos vectores por matrices y vice versa.

(Fig. 015. Identity matrix se refiere a los valores por defecto una matriz)

Uno de los elementos a considerar con respecto a las matrices es que una
multiplicación se puede llevar a cabo siempre y cuando el número de
columnas de la primera matriz sea igual al número de filas de la segunda.
Como ya sabemos nuestro model matrix posee una dimensión de cuatro
filas y cuatro columnas (4×4), y la posición de los vértices posee una
dimensión de cuatro filas y una columna (4×1). Como la cantidad de
columnas en el model matrix es igual a la cantidad de filas en la posición
de los vértices, entonces se pueden multiplicar y el resultado será igual a
una nueva matriz de cuatro filas y una columna (4×1), lo que definiría una
nueva posición para los vértices. Este proceso de multiplicación ocurre
para todos los vértices en nuestro objeto y tal proceso es llevado a cabo
en el vertex shader stage dentro de nuestro shader.

Hasta este punto ya sabemos que object-space se refiere a la posición de


https://learn.jettelly.com/es/curso/biblia-de-shader-en-unity/usb-capitulo-1/matrices-y-sistemas-de-coordenadas/ Page 3 of 6
1.1.6. Matrices y sistemas de coordenadas | Jettelly Learn 16/12/21, 10:37

los vértices de un objeto en relación a su propio centro, entonces, ¿qué


quiere decir world-space, view-space y clip-space? El concepto es
básicamente el mismo.

World-space se refiere a la posición de los vértices según el centro del


mundo; a la distancia entre el punto XYZW [0, 0, 0, 1] de la cuadrícula en
nuestra escena y la posición de un vértice en el objeto. Si deseamos
transformar una coordenada de espacio desde object-space a world-
space podemos utilizar la variable interna unity_ObjectToWorld.

(Fig. 016)

View-Space se refiere a la posición de un vértice de nuestro objeto en


relación a la vista de la cámara. Si deseamos transformar una coordenada
de espacio desde world-space a view-space podemos utilizar la matriz
UNITY_MATRIX_V.

https://learn.jettelly.com/es/curso/biblia-de-shader-en-unity/usb-capitulo-1/matrices-y-sistemas-de-coordenadas/ Page 4 of 6
1.1.6. Matrices y sistemas de coordenadas | Jettelly Learn 16/12/21, 10:37

(Fig. 017)

Finalmente clip-space, también conocido como projection-space, se


refiere a la posición de un vértice de nuestro objeto en relación al frustum
de la cámara, por lo tanto, el factor será afectado por el near clipping
plane, far clipping plane y field of view de nuestra cámara. Si deseamos
transformar una coordenada de espacio desde view-space a clip-space
podemos utilizar la matriz UNITY_MATRIX_P.

(Fig. 018)

https://learn.jettelly.com/es/curso/biblia-de-shader-en-unity/usb-capitulo-1/matrices-y-sistemas-de-coordenadas/ Page 5 of 6
1.1.6. Matrices y sistemas de coordenadas | Jettelly Learn 16/12/21, 10:37

En general, hemos hablado a nivel conceptual sobre las distintas


coordenadas de espacio, pero aún no hemos definido en sí a qué se
refieren las matrices de transformación.

Por ejemplo, la variable interna UNITY_MATRIX_MVP se refiere a la


multiplicación de tres matrices distintas. La letra M es igual a model
matrix, V es igual aview matrix y P es igual a projection matrix. Esta matriz
se utiliza principalmente para transformar los vértices de un objeto desde
object-space a clip-space. Recordemos que nuestro objeto poligonal ha
sido creado en un entorno “tridimensional” mientras que la pantalla de
nuestra computadora; en donde será proyectado, es “bidimensional”, por
lo tanto tendremos que transformar nuestro objeto desde un espacio a
otro.

Más adelante en este libro revisaremos estos conceptos en detalle


cuando utilicemos la función UnityObjectToClipPos, incluida en nuestro
shader, dentro del vertex shader stage.

¿De cuánta utilidad te ha parecido este contenido?

https://learn.jettelly.com/es/curso/biblia-de-shader-en-unity/usb-capitulo-1/matrices-y-sistemas-de-coordenadas/ Page 6 of 6

También podría gustarte