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:
- 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).
- 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.