¿Qué es exactamente el mapeo UV y UVW?

26

Tratando de entender algunos conceptos básicos en 3D, en este momento estoy tratando de descubrir cómo funcionan realmente las texturas. Sé que el mapeo UV y UVW son técnicas que mapean texturas 2D a objetos 3D - Wikipedia me lo dijo. Busqué en Google las explicaciones, pero solo encontré tutoriales que suponían que ya sabía lo que era.

Según tengo entendido, cada modelo 3D está hecho de puntos, y varios puntos crean una cara. ¿Cada punto o cara tiene una coordenada secundaria que se asigna a la posición ax / y en la textura 2D? ¿O cómo manipula la desenvoltura el modelo?

Además, ¿qué hace realmente el W en UVW, qué ofrece sobre UV? Según tengo entendido, W se asigna a la coordenada Z, pero en qué situación tendría diferentes texturas para la misma X / Y y diferente Z, ¿no sería invisible la parte Z? ¿O estoy completamente malentendido esto?

Michael Stum
fuente
1
haga dos preguntas por separado
Noob Game Developer
1
Odio a los tipos como @NoobGameDeveloper, todos los demás están respondiendo la pregunta y todo lo que están haciendo es tratar de descubrir cosas que están mal con la pregunta. Vamos, que hagan preguntas, no digo que nadie deba seguir las reglas, pero estas preguntas como esta están completamente bien publicadas aquí.
Daniyal Azram

Respuestas:

23

Tu comprensión está cerca. Cada modelo 3D está hecho de vértices. Cada vértice generalmente define la ubicación de un punto en el espacio, una normal (utilizada en los cálculos de iluminación) y 1 o más coordenadas de textura. Generalmente se designan como u para la parte horizontal de la textura yv para la vertical.

Cuando se texturiza un objeto, estas coordenadas se utilizan para buscar qué texel o píxel se trazará desde la textura. Me resulta más fácil pensar en ellos como porcentajes o proporciones entre el borde izquierdo de la textura ( u = 0) y el borde derecho de la textura ( u = 1.0) y desde la parte superior de la textura ( v = 0) y la parte inferior de ella ( v= 1.0). Se interpolan entre los vértices y se buscan para cada píxel en pantalla que se representa. Pueden ser mayores o menores que estos rangos y el estado de representación que se establece cuando se representa el objeto especifica lo que sucede. Las opciones para esto son CLAMP y REPEAT. La sujeción limita la coordenada a 0 o 1, lo que hace que la textura se manche donde está fuera del rango. Repetir hace que la textura se repita cuando está fuera del rango; es efectivamente lo mismo que tomar solo la parte decimal de la coordenada y usarla en su lugar.

Antes de que las coordenadas de textura se apliquen a un objeto, se multiplican por una matriz de textura para aplicarles alguna transformación (como escala, traslación o rotación). Este efecto a veces se anima en los juegos para que parezca que algo se mueve a través de un objeto sin tener que mover el objeto en sí mismo ... la textura simplemente se desplaza sobre él. Cuando la matriz de textura se multiplica por las coordenadas de textura, produce 2 valores que se utilizan para buscar el Texel a la parcela (permite llamarlos s y t ). Estos se generan automáticamente a partir de u y v incluso cuando la matriz de textura no está configurada; es el equivalente de multiplicar u y v por una matriz de identidad.

Aquí es donde entra la coordenada w , aunque no se usa con tanta frecuencia. Es un parámetro adicional para multiplicar la matriz de textura y generalmente se usa cuando desea tener en cuenta la perspectiva (como en el mapeo de sombras ). Funciona igual que cuando transforma una ubicación en el espacio de objetos a espacio de pantalla a través de una matriz de proyección de vista mundial. Multiplicando el UVW con una proyección a transformar, se termina con 2 coordenadas, las s y t que luego son transformadas a una textura 2D.

Joel Baker
fuente
Vale la pena mencionar que OpenGL trata v0 como la parte inferior y v1.0 como la parte superior. Eso me costó mucho tiempo en el pasado cuando no podía encontrar el error cuando mis texturas se veían raras.
tkausl
8

Considera un triángulo.

Cada esquina tiene una coordenada UV. Interpola entre estos para obtener un conjunto de coordenadas UV para cada píxel. (También hay una perspectiva en juego aquí, pero ignoremos eso por el momento).

Luego, obtienes un texel de la textura de las coordenadas U y V. Es decir, un píxel de la coordenada de textura x, y - lo mismo, terminología ligeramente diferente ya que estamos hablando de texturas.

Si su textura es verdaderamente tridimensional, también necesitará una tercera coordenada, W.

Una forma de visualizar esto es pensar en un bloque de madera. Si lo corta de alguna manera, verá que cada plano dentro del bloque contiene una especie de textura 2D.

Las texturas en 3D son tan raras que puede olvidarse de ellas por el momento.

Jari Komppa
fuente
¿Raro? ¿Para qué se usan? ¿Puedes mostrar algún ejemplo en el contexto de los títulos AAA?
Quazi Irfan
No, porque generalmente no se usan nunca. Siempre hay una forma más barata de hacer lo mismo. Piense en los artículos picados en wii sports plus; puede romper los elementos de la forma que desee y ver los "elementos internos". Podrían haber desperdiciado grandes cantidades de memoria al hacerles texturas en 3D (suponiendo que el hardware incluso lo soporte), pero en cambio es mucho más barato simular eso con un par de texturas 2D.
Jari Komppa
Entonces, ¿no son exclusivos? ¿O esta no es una característica muy necesaria para cualquier cosa conocida que haga el motor del juego?
Quazi Irfan
No entiendo lo que quieres decir. Sin embargo, las texturas 3D pueden ser útiles en otros usos que no sean simplemente texturas; Si algunos datos que necesita un sombreador se mapean convenientemente en una matriz 3D, sería un uso. Pero como textura "normal", generalmente son solo un desperdicio de memoria.
Jari Komppa
Una aplicación de una textura 3D es el mapeo de distancia, aunque, como dice Jari, son muy poco comunes en un juego debido a su complejidad. [enlace] http.developer.nvidia.com/GPUGems2/gpugems2_chapter08.html
Jackalope
7

Piensa en origami.

Un mapa UV es como una piel 2D aplanada (sin envolver) de su malla 3D (caparazón).

Si tuviera que recortar el mapa y doblarlo a lo largo de las líneas de malla, el resultado sería su modelo 3D.

Los valores de punto flotante (U, V) varían de (0,0) a (1,1) La esquina superior izquierda del mapa UV es (0,0) La esquina inferior derecha es (1,1)

Cada vértice en una malla de polígonos (tris / quads) tiene un valor (U, V) que le indica al renderizador qué parte del mapa debe usar.

En la tubería de GPU, los sombreadores de vértices calculan las proyecciones 2D de cada píxel en estos polígonos 3D, y luego los sombreadores de fragmentos los colorean usando el mapa UV.

Esto no se puede apreciar completamente sin una imagen como esta que lo haga todo obvio:

Malla UV

Como los otros comentaristas mencionaron, el renderizador utiliza el componente W para efectos más sofisticados como el mapeo de sombras, pero el mapa UV es la base para la comprensión.

Tenga en cuenta que un sombreador de vértices debe llamar a un sombreador de fragmentos al menos una vez por cada píxel que necesita colorearse. Es por eso que las GPU son procesadores paralelos con docenas de núcleos: la tubería del sombreador es muy exigente.

Tenga en cuenta también que las GPU integradas en la CPU están diseñadas para dispositivos móviles y están limitadas a menos de una décima parte del número de núcleos que las GPU externas de generación similar. Esto debido a la energía móvil y las limitaciones de enfriamiento. La Ley de Moore parece haberse ralentizado, pero el rendimiento sigue mejorando (con la extraña fusión aquí y allá ...)

¡El mapeo UV de miles de millones de píxeles a más de 240 fotogramas por segundo puede causar un verdadero desastre!

Dominic Cerisano
fuente
0

Un mapa uv asigna un punto (x, y, z) en la malla a un punto (u, v) en la imagen de textura. Como una imagen se asigna (u, v) a un color, los dos mapas se pueden encadenar, produciendo un mapa desde el espacio de malla al espacio de color.

         uv map       color map
 (x,y,z)   ->   (u,v)    ->     color
 mesh           Texture
 space          space
golopot
fuente