Tentando entender alguns conceitos básicos de 3D, no momento estou tentando descobrir como as texturas realmente funcionam. Eu sei que o mapeamento UV e UVW são técnicas que mapeiam Texturas 2D para Objetos 3D - a Wikipedia me disse isso. Pesquisei no google por explicações, mas só encontrei tutoriais que supunham que eu já sabia o que era.
Pelo meu entendimento, cada modelo 3D é feito de pontos, e vários pontos criam um rosto? Cada ponto ou face tem uma coordenada secundária que mapeia para a posição ax / y na Textura 2D? Ou como o desembrulhar manipula o modelo?
Além disso, o que o W no UVW realmente faz, o que ele oferece sobre o UV? Pelo que entendi, W mapeia para a coordenada Z, mas em que situação eu teria texturas diferentes para o mesmo X / Y e Z diferente, a parte Z não seria invisível? Ou estou entendendo completamente errado isso?
fonte
Respostas:
Sua compreensão está próxima. Cada modelo 3D é feito de vértices. Cada vértice geralmente define a localização de um ponto no espaço, um normal (usado em cálculos de iluminação) e uma ou mais coordenadas de textura. Eles geralmente são designados como u para a parte horizontal da textura e v para a vertical.
Quando um objeto é texturizado, essas coordenadas são usadas para procurar qual texel ou pixel plotar a partir da textura. Acho mais fácil pensar nelas como porcentagens ou proporções entre a borda esquerda da textura ( u = 0) e a borda direita da textura ( u = 1.0) e a partir da parte superior da textura ( v = 0) e da parte inferior dele ( v= 1,0). Eles são interpolados entre os vértices e pesquisados para cada pixel na tela que é renderizado. Eles podem ser maiores ou menores que esses intervalos e o estado de renderização definido quando o objeto é renderizado especifica o que acontece. As opções para isso são CLAMP e REPEAT. O aperto limita a coordenada a 0 ou 1, fazendo com que a textura fique manchada onde está fora do intervalo. Repetir faz com que a textura se repita quando estiver fora do intervalo; é efetivamente o mesmo que pegar apenas a parte decimal da coordenada e usá-la em seu lugar.
Antes de as coordenadas de textura serem aplicadas a um objeto, elas são multiplicadas por uma matriz de textura para aplicar alguma transformação a elas (como escala, translação ou rotação). Às vezes, esse efeito é animado em jogos para fazer parecer que algo está se movendo através de um objeto sem ter que mover o próprio objeto ... a textura está simplesmente rolando por ele. Quando a matriz textura é multiplicado pelas coordenadas de textura, produz 2 valores que são usados para procurar o texel a trama (vamos chamá-los é e t ). Eles são gerados automaticamente de u e v mesmo quando a matriz de textura não está definida; é o equivalente a multiplicar u e v por uma matriz de identidade.
É aqui que a coordenada w entra, embora não seja usada com tanta frequência. É um parâmetro extra para multiplicar a matriz de textura e geralmente é usado quando você deseja levar em consideração a perspectiva (como no Mapeamento de Sombra ). Funciona da mesma maneira que quando você transforma um local no espaço do objeto em espaço da tela por meio de uma matriz de projeção de visão de mundo. Por multiplicação da UVW com uma projecção transformar, que acabam com 2 coordenadas, os s e t que são então mapeados para uma textura 2D.
fonte
Considere um triângulo.
Cada canto tem uma coordenada UV. Você interpola entre eles para obter um conjunto de coordenadas UV para cada pixel. (Também há perspectiva em jogo aqui, mas vamos ignorar isso por enquanto).
Então, você obtém um texel da textura das coordenadas U e V. Ou seja, um pixel da coordenada da textura x, y - a mesma coisa, terminologia ligeiramente diferente, já que estamos falando de texturas.
Se sua textura for verdadeiramente tridimensional, você também precisará de uma terceira coordenada, W.
Uma maneira de visualizar isso é pensar em um bloco de madeira. Se você cortá-lo de alguma forma, verá que cada plano dentro do bloco contém uma textura 2d das sortes.
Texturas 3D são tão raras que você pode esquecê-las por enquanto.
fonte
Pense em origami.
Um mapa UV é como uma capa 2D achatada (sem embalagem) da sua malha 3D (concha).
Se você recortar o mapa e dobrá-lo ao longo das linhas de malha, o resultado seria o seu modelo 3d.
Os valores do ponto flutuante (U, V) variam de (0,0) a (1,1). O canto superior esquerdo do mapa de UV é (0,0) O canto inferior direito é (1,1)
Cada vértice em uma malha de polígonos (tris / quads) possui um valor (U, V) que informa ao representante qual parte do mapa usar.
No pipeline da GPU, os shaders de vértice calculam as projeções 2D de cada pixel nesses polígonos 3D e, em seguida, os shaders de fragmentos os colorem usando o mapa UV.
Isso não pode ser totalmente apreciado sem uma imagem como esta, que torna tudo óbvio:
Como os outros comentadores mencionados, o componente W é usado pelo renderizador para efeitos mais sofisticados, como o mapeamento de sombras, mas o mapa UV é a base para a compreensão.
Observe que um shader de vértice deve chamar um shader de fragmento pelo menos uma vez para cada pixel que precisa ser colorido. É por isso que as GPUs são processadores paralelos com dezenas de núcleos - o pipeline do shader é muito exigente.
Observe também que as GPUs integradas à CPU são projetadas para dispositivos móveis e estão limitadas a menos de um décimo do número de núcleos que o de GPUs externas de geração semelhante. Isso devido a restrições de energia e refrigeração móveis. A lei de Moore parece ter diminuído a velocidade, mas o desempenho ainda está melhorando (com o estranho derretimento aqui e ali ..)
O mapeamento de UV bilhões de pixels a mais de 240 quadros por segundo pode causar uma verdadeira bagunça!
fonte
Um mapa uv mapeia um ponto (x, y, z) na malha para um ponto (u, v) na imagem da textura. Como uma imagem mapeia (u, v) para uma cor, os dois mapas podem ser encadeados, produzindo um mapa do espaço da malha para o espaço da cor.
fonte