Реализация "растягивания" мышкой 3d модели в 3d редакторе
Пишу небольшой редактор 3d моделек, который поддерживает стандартные функции (перемещение 3d модели, регулирование размера, загрузка текстуры).
Представим себе ситуацию: человек загрузил, к примеру, модель черепа, плюс текстура лица. Ему теперь хочется, скажем, немного вытянуть подбородок. Я хочу сделать так, чтобы можно было выбрать подбородок мышкой и начать его "вытягивать". При этом текстура должна нормально сидеть на черепе, чтобы всё красиво смотрелось. Как вообще реализовать данную функцию? Под этим имею в виду, как можно выбрать точку на модели, за нее "потянуть" mesh с текстурой и чтобы эта текстура не съезжала? То есть в целом, как такую технологию реализовать, очень желательно стандартными алгоритмами без привлечения ai.
Ответы (1 шт):
AI тут вообще не причем (по крайней мере на ближайшие лет 5).
Полезно подумать о граничных случаях. Вот вы потянули подбородок и вытянули его на 100 метров. Текстура точно не должна съезжать? А как должна себя повести?
Небольшие растяжения обычно просто морфами делают (см. morph target), и при небольших растяжениях текстуры еще не сильно заметно тянутся.
Если вы уверены, что подбородок будет всегда в определенном месте, то можете попробовать процедерно это место вытягивать (например, сферу с радиусом Н и плавным снижением силы в зависимости от расстояния от центра).
Или же потребовать, чтобы у моделей была как-то размечена область подбородка (например, картой весов). Тогда это будет по сути скелетная анимация, где вытягивание подбородка - это вытягивание кости подбородка.
Чтобы затяжки текстуры были не так заметны - посмотрите в сторону detail map (микротекстур). Также в целом может быть интересен подход в процедурными текстурами (вместо или вместе с UV), но тут уже сильно от модели зависит.