O que seria um bom filtro para criar 'deformadores magnéticos' a partir de um mapa de profundidade?

10

No meu projeto, estou criando um sistema para deformar uma malha altamente detalhada (vestuário) para que ela "se encaixe" em uma malha convexa. Para fazer isso, uso mapas de profundidade do item e do 'casco' para determinar em que ponto do espaço mundial o desvio ocorre e a extensão.

A simples transformação de todos os vértices ocluídos nas profundidades definidas pelo 'casco' é bastante eficaz e tem um bom desempenho, mas sofre o problema de não preservar os recursos da malha e requer seleção extensiva para evitar falsos positivos.

Em vez disso, gostaria de gerar a partir do mapa de desvio de profundidade um conjunto de 'deformadores' simples que 'empurrarão' * todos os vértices da malha deformada para fora (no espaço do mundo). Dessa forma, todos os recursos da malha são preservados e não há necessidade de heurísticas complexas para selecionar vértices inadequados.

No entanto, não sei como gerar esse conjunto de deformadores. Estou imaginando algo como um algoritmo que tenta corresponder uma superfície esférica a cada pedaço de desvios contíguos dentro de um determinado intervalo, mas não sei por onde começar a fazer isso.

Alguém pode sugerir um filtro ou algoritmo adequado para gerar deformadores? Ou, de outra forma, 'compactando' um mapa de profundidade?

(* Empurre porque é adequado para um humanóide convexo 'bulgy' para que as transformações sejam 'esféricas' do ponto de vista da superfície.)

Edit: Aqui está uma imagem / diagrama corretamente sugerido que ilustra o que estou tentando alcançar.

Além disso, devo dizer que, desde que essa pergunta foi publicada, trabalhei muito mais nesse problema e, embora nunca tenha resolvido como obter os deformadores, acabei decidindo que os mapas de profundidade para isso eram inadequados, como:

  1. Se a malha deformada não está completa, é possível obter texels no mapa que estão significou para estar no outro lado do convexo mesh (porque eles não são obscurecidos por aqueles mais perto da câmera no lado correto).
  2. A eficiência não foi tão alta quanto eu esperava, devido ao fato de 6 mapas serem necessários por deformação.

Não que eles fossem insolúveis, mas a outra solução, que envolveu testes de colisão em kernels em execução na GPU, resultou em resultados de maior qualidade e foi muito mais simples, mesmo que não seja tão rápido.

Ainda acho que esse problema de perguntas é interessante e estaria interessado em qualquer resposta, pois tenho certeza de que há situações em que isso seria preferido.

insira a descrição da imagem aqui

sebf
fonte
Você poderia inserir uma imagem ou desenho do efeito que deseja obter? Seria mais fácil entender o seu problema.
limpe
Para destacar um comentário feito abaixo, uma figura ou desenho pode ajudar bastante. Existem várias maneiras de simular como a roupa envolve partes do corpo e talvez sua ideia de “deformadores” seja apenas uma das várias que podem ser aplicadas.
Sam Hocevar
o que há de errado em mover toda a forma?
Ali1S232
Gajoo, imagine se a forma envolvida em torno da malha, movê-la em uma direção fizesse com que ela cruzasse ainda mais a forma do outro lado - embora, de fato, seja isso que os deformadores estejam fazendo, apenas pequenos pedaços de cada vez.
sebf 02/01
SamHocevar, essa pergunta era apenas para encaixar - você tem uma malha um pouco menor que o caractere que ela se encaixa, portanto, a malha é ajustada de acordo. A implementação do campo de profundidade foi escolhida por razões de desempenho, os deformadores foram escolhidos por causa disso abordam a capacidade de preservação de recursos.
sebf 02/01

Respostas:

2

Você tem um mapa de profundidade, que eu assumo é simplesmente a distância entre a malha convexa A e a malha deformada neutra B, e você tem normais de superfície da malha A.

O que você está perdendo são os pesos (ou agrupamentos) de como cada vert na malha B afeta seus vizinhos. Por exemplo, quando a vert central é movida, ela também deve arrastar ao longo dos verts vizinhos em alguma quantidade (porcentagem) se eles estiverem no mesmo grupo.

Se um grupo de verts se afeta 100%, todos acabam sendo empurrados pela maior distância do seu mapa de profundidade, como se fossem todos parte de uma estrutura de aço flexível que se move como uma unidade, fixada em 50% dessa estrutura pode agir mais como folhas grossas de borracha e 10% como filme plástico apropriado para cada forma, porque cada vert quase não afeta seu vizinho (que é o que você tem agora.

Obviamente, há alguma mistura e fusão de valores acontecendo. Como o Gajoo disse, "o que há de errado em mudar toda a forma?"

Patrick Hughes
fonte