В моем проекте я создаю систему для деформации высокодетализированной сетки (одежды), чтобы она «вписывалась» в выпуклую сетку. Для этого я использую карты глубины предмета и «корпуса», чтобы определить, в какой точке мирового пространства происходит отклонение и степень.
Простое преобразование всех окклюзированных вершин в глубины, как это определено в «оболочке», является довольно эффективным и имеет хорошую производительность, но оно сталкивается с проблемой не сохранения особенностей сетки и требует обширного отбраковки, чтобы избежать ложноположительных результатов.
Вместо этого я хотел бы сгенерировать из карты отклонения глубины набор простых «деформаторов», которые «вытолкнут» * все вершины деформированной сетки наружу (в мировом пространстве). Таким образом, все особенности сетки сохраняются, и нет необходимости иметь сложную эвристику для отбраковки неподходящих вершин.
Однако я не уверен, как создать этот набор деформеров. Я представляю что-то вроде алгоритма, который пытается сопоставить сферическую поверхность каждому участку непрерывных отклонений в определенном диапазоне, но не знаю, с чего начать.
Кто-нибудь может предложить подходящий фильтр или алгоритм генерации деформеров? Или, другими словами, «сжатие» карты глубины?
(* Толчок, потому что его прилегание к выпуклому «выпуклому» гуманоиду, так что трансформации, вероятно, будут «сферическими» от POV поверхности.)
Изменить: Вот изображение / схема, правильно предложенная, которая иллюстрирует то, что я пытаюсь достичь.
Кроме того, я должен сказать, что поскольку этот вопрос был опубликован, я много работал над этой проблемой, и хотя я так и не решил, как получить деформаторы, я в итоге решил, что карты глубины для этого не подходят, так как:
- Если деформированная сетка не завершена, на карте можно получить тексели, которые должны быть на другой стороне выпуклой сетки (потому что они не скрыты теми, кто ближе к камере на правильной стороне).
- Эффективность была не такой высокой, как я надеялся, из-за того, что для деформации требовалось 6 карт.
Не то чтобы они были неразрешимыми, но другое решение, которое включало тестирование коллизий в ядрах, работающих на графическом процессоре, привело к получению более качественных результатов и было намного проще, хотя и не так быстро.
Я все еще думаю, что эта проблема вопросов интересна и будет заинтересована любыми ответами, поскольку я уверен, что есть ситуации, где это было бы предпочтительно.