En mi proyecto, estoy creando un sistema para deformar una malla (vestimenta) altamente detallada para que 'se ajuste' a una malla convexa. Para hacer esto, uso mapas de profundidad del artículo y el 'casco' para determinar en qué punto del espacio mundial se produce la desviación y la extensión.
Simplemente transformar todos los vértices ocluidos a las profundidades definidas por el 'casco' es bastante efectivo y tiene un buen rendimiento, pero sufre el problema de no preservar las características de la malla y requiere un sacrificio exhaustivo para evitar falsos positivos.
En cambio, me gustaría generar a partir del mapa de desviación de profundidad un conjunto de 'deformadores' simples que 'empujarán' * todos los vértices de la malla deformada hacia afuera (en el espacio mundial). De esta forma, se conservan todas las características de la malla y no hay necesidad de tener heurísticas complejas para eliminar vértices inapropiados.
Sin embargo, no estoy seguro de cómo generar este conjunto deformador. Me estoy imaginando algo así como un algoritmo que intenta hacer coincidir una superficie esférica con cada parche de desviaciones contiguas dentro de un cierto rango, pero no sé por dónde empezar a hacer esto.
¿Alguien puede sugerir un filtro o algoritmo adecuado para generar deformadores? ¿O para decirlo de otra manera "comprimiendo" un mapa de profundidad?
(* Empuje porque se ajusta a un humanoide 'abultado' convexo, por lo que es probable que las transformaciones sean 'esféricas' desde el punto de vista de la superficie).
Editar: Aquí hay una imagen / diagrama correctamente sugerido que ilustra lo que estoy tratando de lograr.
Además, debo decir que desde que se publicó esta pregunta, trabajé mucho más en este problema, y aunque nunca resolví cómo obtener los deformadores, finalmente decidí que los mapas de profundidad para esto no eran adecuados como:
- Si la malla deformada no está completa, es posible obtener texels en el mapa que están destinados al otro lado de la malla convexa (porque no están oscurecidos por los que están más cerca de la cámara en el lado correcto).
- La eficiencia no fue tan alta como esperaba debido al hecho de que se necesitaban 6 mapas por deformación.
No es que no se puedan resolver, pero la otra solución, que incluía pruebas de colisión en núcleos que se ejecutan en la GPU, dio como resultado resultados de mayor calidad y fue mucho más simple, aunque puede que no sea tan rápido.
Sin embargo, todavía creo que este problema de preguntas es interesante y estaría interesado en cualquier respuesta, ya que estoy seguro de que hay situaciones en las que sería preferible.