Автор Тема: Создание одного предмета одежды из двух  (Прочитано 315 раз)

Оффлайн Elaine

  • Житель
Добрый день, уважаемые специалисты по Блендеру!

Прошу вашего совета, как лучше сделать из двух предметов одежды один. Оба предмета для DAZ Genesis 8 Female.

Исходные данные: Dress, от которого нужен верх, и Bodysuit, от которого нужен низ. Сначала всё ясно: совмещаем оба объекта, находим общую между ними область с наименьшим количеством различий в геометрии, обрезаем Dress снизу чуть ниже данной области и Bodysuit сверху чуть выше данной области.

И здесь пробема: поскольку полигональные сетки объектов разные, неизбежно возникает ситуация, при которой полигоны обоих предметов в области их пересечения отстоят друг от друга на разное расстояние. Вдобавок это усугубляется варварски кривым мешем платья, которое невозможно отрезать ровно, всегда получается ломаная линия, причём ломаная со всех сторон по-разному (на скриншоте №2 - уже после выравнивания вручную).

Были испробованы модификатор boolean, различные виды smooth, merge, выравнивание полигонов вручную, оставление небольшого пространства между обрезанными предметами одежды и сшивание их клавишей F, но ничто не принесло желаемого эффекта: после объединения предметов с помощью Ctrl+J и переноса их в DAZ Studio с последующим адаптацией к базовой модели с помощью Transfer Utility, неизбежно обнаруживается проблемный участок с искривлённой сеткой в области соединения объектов. Предварительная операция Remesh в Блендере также не устраняет эту проблему.

Единственным выходом видится применение модификатора Shrinkwrap, но беда в том, что он действует на весь объект, но не на его часть, пересекающуюся с другим объектом. Может быть существует способ применить этот модификатор лишь к части объекта, либо есть аналог этого модификатора для группы выделенных полигонов? Или необходимо использовать другой способ?




Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Привет! Я обычно такие вещи делаю простым инструментом Bridge Edge Loops
https://docs.blender.org/manual/ru/4.2/modeling/meshes/editing/edge/bridge_edge_loops.html?utm_source=blender-4.0.2#bpy-ops-mesh-bridge-edge-loops
То есть при наличии двух адекватных по количеству вершин колец на стыкуемых участках получается хорошее сшивание.
Для Кота

Оффлайн Elaine

  • Житель
sungreen,

Привет! Этот способ уже проверен, дело в том, что даже после ручного выравнивания линии отреза и приведения тамошних полигонов в похожий вид оба предмета находятся на разном расстоянии от базовой модели (платье - более свободное), в результате получается явно заметная "ступенька" из создаваемых при сшивании полигонов, то есть они располагаются по диагонали под большим углом, при этом их величина заметно больше чем у оригинальных полигонов (поскольку расстояние между предметами одежды по осям X и Z достаточно велико, и при этом на каждом участке окружности тела оно разное). При попытке изменять размер нижнего края бОльшего предмета одежды данный эффект распространяется также на остальные полигоны, попадающие в зону влияния инструмента Scale. К сожалению, в данном случае это не помогает.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Если есть цельное тело, то можно попробовать сначала натягивать полисетку на тело и далее уже соединять. То есть и верхняя и нижняя части могут быть натянуты на одно и тоже тело соответственно принять его форму и быть более менее соизмеримы в месте соединения https://docs.blender.org/manual/ru/4.2/modeling/modifiers/deform/shrinkwrap.html
Для Кота

Оффлайн Elaine

  • Житель
Цельное тело, разумеется, есть. И этот путь тоже был испробован. Сначала оба объекта были посажены на геометрию базового тела и приняли его форму, потом объединены, но в итоге это не помогло, потому что сама сетка платья сделана так, что отстоит от тела базовой модели на бОльшее расстояние, чем сетка купальника. В результате низ чётко садится на базовую модель, а верх всего лишь закрывает её фигуру, при этом фактически никуда не исчезает расстояние между их поверхностями, просто внешне это становится незаметно, поскольку тела под платьем не видно.

Более того, при попытке применить Shrinkwrap в целях плотной посадки платья на базовую фигуру, фигура либо "съедает" часть полигонов платью, либо - если выставить размер зазора - получаем тот же самый эффект разного расстояния между их поверхностями в различных областях.

Если интересно увидеть разницу между этими объектами, файл проекта доступен по ссылке:

https://mega.nz/file/xWIxwD6R#qp3fojdfKviBUvlc_Pa6BSstLCEAB0u-Z9q9HBS_rms

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Действительно инструменты Blender не дают сто процентного результата. Насколько понял, нужно проработать технологию, после которой ручная доработка была бы минимальной. Можно попробовать вместо Shrinkwrap  использовать физику ткани. Но также потребуются эксперименты. Если есть возможность выложи исходные меши для 3-4 кейсов, чтобы можно провести обобщение инструментов и уже предложить более практичное решение.
Для Кота

Оффлайн Elaine

  • Житель
Не знаю насколько это может быть эффективно. Физика ткани в Блендере напоминает мне Marvelous Designer, там ещё приходится усаживать получившуюся ткань по фигуре, автоматически она почему-то не принимает форму базового объекта. Хотя, казалось бы, чего проще для программы прочитать его сетку, прибавить условный 1см отступа и повторить базовую геометрию на создаваемом объекте.

Исходные меши базовой модели и обоих предметов одежды доступны по ссылке:

https://mega.nz/file/1CYWjJba#bxonNarue29UfThG07OHE5io8X6VSUPfjeYyW_uyVBQ

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Как много и как часто нужно такое делать? Если многократно и это представляется достаточно рутинным, то можно попробовать алгоритмизировать и автоматизировать скриптом. Только тогда нужно более детальное описание задачи.
Для Кота

Оффлайн Elaine

  • Житель
Наверное, не очень много и не очень часто. Просто именно этот конкретный случай явился камнем преткновения, слишком разные сетки у объединяемых объектов. Мне неоднократно вполне успешно удавались подобные операции с этим же низом, но другими объектами в качестве верхней части. Где-то можно было грамотно подобрать текстуру, скрывающую мелкие недостатки на границах объединённой геометрии, где-то не требовалось даже этого.

Детальное описание задачи - если сформулировать кратко, то это удаление ненужных частей двух первоначальных объектов выше (для объекта А) и ниже (для объекта B) заданной точки вертикальной оси Y и последующее объединение оставшихся частей двух объектов в единое целое любым возможным способом.

Как я вижу работу подобной процедуры: имеются два совмещённых в точке координат по умолчанию объекта "А" и "В" (достигается простым импортом из DAZ Studio в формате "wavefront obj" с параметрами по умолчанию). Пользователь указывает любую точку объединения (координату по вертикали), затем указывает объект "А" (будущий низ) и объект В (будущий верх). Остальные операции автоматически выполняет скрипт.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Я именно так и представлял себе алгоритм. Единственное нужен еще один параметр - ширина зоны сшивания S или задать этот участок диапазоном Y1 и Y2, а также алгоритм смешивания, например по кривой Безье.
Посмотрю, можно ли это реализовать через geometry nodes. Отпишусь в конце недели.
 
Для Кота

Оффлайн Elaine

  • Житель
Спасибо, если получится, то это будет действительно отличный скрипт, значительно расширяющий возможности программы!

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
А тебе в конечном итоге удалось соединить эти несоединяемые части?
Для Кота

Оффлайн Elaine

  • Житель
У меня плохо получилось, вроде бы новая одежда нормально работает, но видны искажения текстуры на конечном результате (картинка №4 в стартпосте).

А задачу решить всё-таки удалось, только не мне, а одному человеку, хорошо разбирающемуся в Блендере. Есть описание выполненных им операций и видео, можно посмотреть эту тему по ссылке:

https://render.ru/xen/threads/sozdanie-odnogo-predmeta-odezhdy-iz-dvux.185876/


Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Попробовал geomnode, сделал слайсер по плоскости и увидел, что в плоскости сечения у одного меша в виде кольца (это нормально), а у другого - виток спирали (то есть кольцо разорвано, и это не нормально). Как-то обход такой ситуации уже обговаривался?
Для Кота

Оффлайн Elaine

  • Житель
Да. По сути там многое зависит от места разреза. В частности, Павел берёт loop с верхней линии отреза нижнего предмета и используя Shrinkwrap, приделывает его к нижней линии отреза верхнего предмета. Таким образом, количество соединяемых полигонов и их форма становится одинаковым, дадее идёт простое сшивание Bridge Edge Loops с последующим сглаживанием получившихся полигонов (как я понимаю, Subdivision вновь созданной области - по вкусу).