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