O mapeamento UV gera para alguns pontos do modelo 3D vários pontos na projeção 2D?

8

Suponha que meu modelo 3D seja uma pirâmide de base retangular e que eu numero quatro cantos da base com 1, 2, 3, 4 e forneço 5 ao ponto superior. Se eu projetar essa pirâmide em um objeto em forma de estrela 2D, todos os quatro pontos externos da estrela não seriam associados ao ponto número 5 no modelo 3D?

Imagem desenhada à mão de uma pirâmide de base quadrada e sua rede 2D em forma de estrela

Abdul Al Hazred
fonte
Parece que você acha que "projetar esta pirâmide em um objeto em forma de estrela 2D" é uma operação definida. Não é, até você fazer isso.
Jessy
2
Para mapear UV dessa maneira, você deve pensar em (5) como quatro vértices diferentes que possuem as mesmas coordenadas XYZ.
Russell Borogove

Respostas:

10

Da maneira como geralmente é definido, todo vértice de uma malha corresponde a uma coordenada UV, e deve haver exatamente uma dessas coordenadas por vértice, porque é assim que um renderizador busca texels. Portanto, é impossível ter várias coordenadas UV para um único vértice, a menos que você tenha várias parametrizações para sua malha.

No entanto, as malhas geralmente são divididas durante as parametrizações e os mesmos vértices podem terminar em vários locais, como no seu exemplo. Na maioria das vezes, esses vértices são simplesmente replicados durante o carregamento / renderização, de modo que o mapeamento de vértice para uv permanece 1 para 1 ou muitos para 1. Portanto, um renderizador provavelmente interpretará seu exemplo da seguinte forma (a v5 é dividida em 4):

insira a descrição da imagem aqui

ap_
fonte
4

Eu só preciso adicionar um pouco à resposta de ap_.
Claro que você pode ter vários UV para um vértice, isso é chamado de camadas UV. É assim que os mecanismos exibem mapas de luz e mapas de albedo ao mesmo tempo, desde o advento dos mapas de luz. (motor de terremoto em 1996, talvez?)
Você pode ter mais camadas UV, se quiser fazer uma multi-extensão como terrenos, mapas de luz, albedo grande, detalhe de albedo, mapa normal ...

Infelizmente, o rasterizador nunca escolheu uma camada UV, dependendo do primitivo que está renderizando. Esse renderizador pode ser feito com um buffer de índice suplementar (primitivo ao buffer de mapeamento de camada UV), mas nenhuma placa gráfica e nenhuma API gráfica suporta isso. Esta é uma violação desnecessária ao KISS de qualquer maneira.

Portanto, o que se faria neste caso é separar o ápice da pirâmide em 4 vértices distintos durante o tempo de design. De qualquer forma, a primeira razão para isso, não é o desembrulhamento UV, mas principalmente a definição normal. Se você deseja arestas nítidas, precisa quebrar o sombreamento; portanto, é necessário ter diferentes normais, pois elas também, como UV, geralmente são definidas de 1 a 1 no fluxo de vértices.

Sugestão final, talvez você realmente não queira usar esse desembrulhamento, prefiro sugerir o seguinte:

insira a descrição da imagem aqui

Dessa forma, você tem continuidade perfeita para filtragem e olha nas bordas e no ápice.

v.oddou
fonte