Mapeado de Textura

De Codepixel

Contenido

[editar] General

La idea es que, dado un punto, o dirección, en el espacio 3D, podamos generar una coordenada de proyección 2D. Con esta coordenada, podremos leer el valor de una textura.

[editar] Planar

La versión más sencilla es transformar un punto x,y,z en u,v usando directamente. Antes debemos tranformar x,y,z a espacio de la textura (con esto podremos rotar y modificar la proyección)

[editar] Esférica

Para comenzar podemos leer el artículo de wolfram mathworld sobre coordenadas esféricas.

Esta versión tiene unas características especiales :

  • Para que todas las proyecciones sean similares, x,y,z está en una base de coordenadas right=1,0,0 up =0,1,0 y forward =0,0,-1 . De este modo, si miramos a 0,0,-1 , veremos el centro del mapa (u=0.5 , v = 0.5 )
  • Es imporante recordar que las texturas tienen que tener un ratio 2:1 para cubrir toda esfera.
  • A la hora de calcular la v, tenemos que tener presente donde está el origen u,v de la textura. Si miramos "arriba" , el ángulo será 0 y por tanto, v = 0. Si nuestro origen de textura , el 0,0 es la parte superior de la imágen (lo más lógico desde el punto de vista de la memoria y el almacenamiento), eso representa el "polo norte". Si tenemos el origen 0,0 en la parte inferior de la textura (lo cual, matemáticamente es lo más lógico) , tenemos que "invertir" el eje UP para que v=0 sea el "polo norte".
  • Esta proyección está pensada para mapas de entorno. Nosotros estamos "dentro" de la esfera, y la textura está mirando para nosotros. Si usamos la proyección normal, veremos la textura hacia afuera. El "truco" está en cambiar el orden de los valores de la tangente, y negar uno de ellos, para hacer "mirror", y que la textura mire hacia nosotros.
  • Recuerda que atan2(y,x) devuelve un valor entre -π .. π . Para pasarlo a 0..2π , se puede sumar 2π si el valor es negativo. Sumaremos π al ángulo para que el centro esté en 0.5 .. 0.5


u = \frac {atan2(x,-z) + \pi}{2\pi}
v = \frac {acos(-y)}{\pi}

[editar] Light Probe

Hay dos tipos, el mapa angular y el "mirror ball". A simple vista, son prácticamente iguales, pero el mapa angular tiene más información en la parte exterior de la esfera.

Para los mapas angulares, usaremos esta fórmula:


r = \frac{acos (- z)}{2\pi \sqrt{x^2 + y^2}}
u = \frac{1}{2} + ( r * x )
v = \frac{1}{2} + ( r * y )

El punto x,y,z está en una base de coordenadas right=1,0,0 up =0,1,0 y forward =0,0,-1

Herramientas personales