Автор Тема: Работа с Track To и Contraint-ами для создания параметрических заготовок  (Прочитано 273 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Avis

  • Житель
  • Гибридный инженер
Здравствуйте, подскажите кто-нибудь..
1. Порядок расчета Contstraint-ов:
Есть две Empty, от первой ко второй назначен Track To, на второй по отношению к первой назначен Copy Rotation по всем осям с целью поворота общей оси (для п.2, ниже). Проблема в том что при обычном подходе вычисляется только Track To, но без поворота осей вообще (включая поворот первой пустышки, который при наличии только Track To происходит вслед за смещаемой пустышкой по-умолчанию). C Dumped Track та же история. Если после завершения сдвига подвигать обе пустышки (достаточно пригрозить нажатием G), то работает, но двигать надо сперва исходную - она довернётся, завершая Track, а потом вторую - она отработает Copy Rotation. Вопрос: Как их подружить, чтобы поворот осуществлялся одновременно с Track To? Можно набором других Constraint-ов, но с сохранением функционала Track To
2. Какие Contstaint-ы использовать?
Далее между этими двумя пустышками нужно разместить третью, которая всегда будет на одной оси между первыми двумя, тоже будет копировать поворот и будет иметь возможность смещаться вдоль оси между первой и второй, сохраняя положение(не пропорцию) при продолжении смещения второй пустышки. Потом пропорция между этого смещения пойдёт в переменную Driver-а. Есть ли варианты кроме непосредственного использования матрицы поворота?


P.S. Если это поможет, то целевая задача - параметрическая конструкция с управляющими костями под разные поршни, штуковины типа шпильки с грузом или буртика на цилиндре, которая привязывается к любой удобной сущности (мешам, vertex-группам, shape-keys, Scale/Location - что будет удобнее). Крайние пустышки - точки креплений/торцы/опоры, центральная - положение некоторого самостоятельного элемента, который может быть смещен вдоль оси объекта.

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
>> Если это поможет, то целевая задача - параметрическая конструкция
... кинематическую схему можешь показать? ...

Оффлайн Avis

  • Житель
  • Гибридный инженер
Без проблем: Два шарнира и цилиндрическая пара между ними. Второе изображение пример того что в итоге хочу сделать(на примере поршня). Красные зоны - области для привязки крайних пустышек(E1,E2), между ними зеленая зона, которая сдвигается средней пустышкой(E3) вдоль оси.

P.S. Написал указание угла исходной пустышки (E1) через драйвер, который считает арктангенс отношения координат E2 - работает на лету, никаких остановок. Выставление третьей пустышки по координатам середины вектора E1E2 с копирование поворота тоже в порядке, но тогда, положение E3, конечно, не регулируется - она всегда четко посередине между E1 и E2.
« Последнее редактирование: 28 Август 2018, 15:39:45 от Avis »

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
... попробуй разорвать схему ограничений дополнительной пустышкой (файл с примером во вложении) ...
... ещё можно костями попробовать или если для анимации, то Rigid Body https://docs.blender.org/manual/en/dev/physics/rigid_body/index.html ...

Оффлайн Avis

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

Кости тоже проверил в первых рядах - у них оказался такой же порядок расчеты на Constraint-ах. Работает корректно только если кости принадлежат одной арматуре (но от этого куча других проблем). Если кости разнести по разным объектам арматуры, то симптомы такие же - надо "пугать" E1 и E2 клавишей G - тогда поворот досчитывается. Но у костей есть IK и возможно это решение. Буду пробовать.

На данный момент сделал традиционно через пересчет углов Z и Y для E1 с учётом взаимного смещения (бонусом стала свободная координата Х для независимого поворота всех пустышек в группе). В кватернионы не полез пока, ограничился Эйлеровскими, но тут уже ограничение из-за области определения арктангенса. Как только координата X для E2 становится меньше координаты Х для E1, то нужно инвертировать и доворачивать на pi, а выражения драйверов не поддерживают условия. Думал как исхитриться через "левую" переменную, но пока не додумался. Если знаете, то тыкните пальцем.

Остался пока вопрос по Е3. Рабочее, но кривое: на E3 висит Custom Property, отвечающее за пропорцию деления вектора и координаты точки этого деления пишутся в координаты E3. Двигать руками пустышку нельзя, правда, но она смещается в разумных пределах.
Так же придумал аналогичным образом разместить NurbsPath из двух точек с orgin-ом четко в центре и направить по нему пустышку, но не врубился как. Path - вообще хорошая тема, это своего рода естественный ограничитель хода E3, не требующее дополнительных драйверов, но как к нему привязать что-то и заставить двигаться только вдоль него я не знаю пока.

Файлик в приложении, если нужен.


Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
... можно попробовать сделать поход в векторную алгебру, описать мат модель и скриптом достаточно эффективно крутить сложные модели, но отчасти снизить визуальное редактирование ...
... сейчас предлагаю паллиативное решение с автопугом ограничений ...
... в файле во вложении E1 и E2 имеют циклическую зависимость, для обновления которой нужно было применить дополнительное действие ("пугать" клавишей G), теперь за тебя это будет делать скрипт автоматом (правда пугать он будет все ограничения) ...
... открой файл и запусти скрипт Run Script или Alt+P после этого двигай E1 или E2 ...
... E3 привязана к середине (E1-E2)/2 через два ограничения Child of (с силой влияния 0.5) и Copy Rotation  ...

ps перед тем как двигать E1 или E2 обязательно запусти скрипт ...
ps2 для того чтобы не запускать скрипт каждый раз, установи дополнение (второй файл во вложении) ...

Оффлайн Avis

  • Житель
  • Гибридный инженер
>>E1 и E2 имеют циклическую зависимость..это будет делать скрипт автоматом
Точно! Вот оно, спасибо. Я думал прикрутить bpy.ops.transform.translate с нулями на все конструкции в сцене, но так явно изящнее. НО.. не без недостатка. Независимое вращение пустышек вокруг полученной общей оси в таком случае невозможно - они должны копировать повороты по всем трём осям, чтобы правильно поймать общую ось (видимо так же из-за порядка расчета вращения). То же самое касается привязываемых к пустышкам мешей - чтобы цилиндр правильно поймал ось, нужны все три координаты углов, но тогда его нельзя свободно крутить.

Так что >> поход в векторную алгебру... буду продолжать, а пока попытаю Armature. Потенциально она даже более гибкая во всех отношениях.


Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
>> поход в векторную алгебру... буду продолжать
... ура! мы идём в поход! http://blender-3d.ru/forum/index.php/topic,326.msg4308.html#msg4308 ...
... сможешь описать мат модель? возможно тебе будет проще не растаскивать логику по отдельным драйверам и ограничениям, а просто в одной мат модели изложить всё ...
... потом попробуем её транслировать в скрипт на python ...

Оффлайн Avis

  • Житель
  • Гибридный инженер
Мат.модель уже есть в теоретической механике. У меня то как раз проблемы состыковать это дело с настройками Blender-а.
Но я тогда, пожалуй, замахнусь на более глобальную задачу, чтобы всех зайцев сразу. Конструкция выше это на самом деле костыль, один из многих. Глобально же я изобретаю велосипед в виде механических сопряжений из CAD (откуда я притащил свои лапы) с некоторыми изменениями и упрощениями.
Там есть набор базовых отношений объектов, которые можно выразить через конструкции из заголовка темы:
  • Совпадение
  • Параллельность
  • Перпендикулярность
  • Касательность
  • Концентричность
  • Расстояние между ..
  • Угол между ..
С их помощью строятся более интересные вещи:
  • Линейная муфта
  • Заданное расстояние и заданный интервал смещения
  • Заданный угол поворота и заданный интервал поворота
  • Кулачковый механизм - Copy Rotation и Copy Translation вместе
  • Редуктор (отношение для Copy Rotation)
  • Кулисный механизм/кривошип
  • Передача винт-гайка/шестерня-рейка - переход от Rotation к Translate через коэффициент

Идея: Убрать конкретные тела/объекты и обобщить сопряжения до базовых принципов перемещения, раздраконить на достаточно универсальный модуль/модули, собирать схемой, а потом уже привязывать объекты к этому каркасу или каркас к объекту, если надо. Типа.. конструктор направляющей и вспомогательной геометрии, который вообще не зависит от формы и даже наличия объектов (мало ли что я там изображу). Так по темам в гугле все делают это через риггинг сразу ориентируясь на меши, но мне конкретно надоело уже повторять одно и то же с мелкими изменениями для каждой новой модели. 8).

Переброска в скрипт тоже в мыслях есть. Хотя бы на уровне кнопки "Добавить в сцену эту штуку". Таскать *.blend с нужными кусками моделей тоже надоело. Текстовики удобнее.

Собственно.. о риггах. Схема на костях вполне рабочая оказалась. IK + блокировка осей + Custom Shape на кости для управления.
« Последнее редактирование: 31 Август 2018, 13:44:28 от Avis »

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
... ты хочешь сделать анимацию велосипеда с физическими ограничениями, посмотри Rigid Body https://docs.blender.org/manual/en/dev/physics/rigid_body/index.html ...

 

* По форуму

* Последние вложения

2018-11-19_002509.png
Скачано: 6
Автор: oleg126

Скачано: 8
Автор: snakeru54

Скачано: 8
Автор: snakeru54
Chuvak.gif
Скачано: 18
Автор: Striver
_007.png
Скачано: 22
Автор: snakeru54