Автор Тема: Game Engine. Управление частями модели руки. Риггинг.  (Прочитано 479 раз)

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

Оффлайн flakonov

  • Житель
Добрый день.
Прошу прощения, если ошибся с выбором категории.
Использую Blender 2.78c. Есть модель руки человека с суставами. Есть 8 физических контроллеров (трехосевой гироскоп и трехосевой акселерометр в одном флаконе) для углов поворота в 8 точках (5 на пальцах, один на тыльной стороне ладони, один на запястье, один на предплечье, прикладываю картинку размещения датчиков).
Блендер принимает данные с помощью Python'a через COM-порт в формате CSV.
Нужно сделать так, чтобы модель руки повторяла движения самого человека.
Как решал:
1) Риггинг. И последующее соединение с мешем модели руки.
2) Properties-Constraints-Add object constrant-Limit Rotation. Для мешей.
Оба варианта хорошо связывают модель, задают в нужную структуру в режиме Pose Mode. Но в этом режиме не запустить Blender Engine. Переводишь в Object Mode, запускаешь - и все не работает, ограничения углов поворота не работают. Пробовал и через контроллеры и через актуаторы тестовые движения задавать на простой поворот по одной оси для одного сустава.
Вопрос:
1) Как можно сохранить структуру модели, используя Game Logic?

Прикладываю свой экспериментальный файл с примитивным суставом. (это не для анимации).
Заранее спасибо

Оффлайн Samovar

  • Житель
  • Пятигорье
Я не вполне вкурил, что нужно... Но если надо BGE, то там работает только ограничитель Rigid Body Joint ( и он не работает вне движка BGE ) https://docs.blender.org/manual/en/dev/rigging/constraints/relationship/rigid_body_joint.html

Оффлайн flakonov

  • Житель
Я не вполне вкурил, что нужно...
Нужно сделать так, чтобы модель руки повторяла движения самого человека.

Человек надевает одежду с вшитыми датчиками, двигается, моделька в блендере повторяет.

Спасибо! Изучу и отпишусь

Оффлайн Samovar

  • Житель
  • Пятигорье
Оставлю ещё ссылку на одну статью:
http://www.render.ru/books/show_book.php?book_id=638
http://render.ru/book/701
 (я особо не вникал в проблему.., но трекер в Блендере есть...)

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... тебе на выходе нужна анимация или обязательно bge? ...
... если это у тебя работает в режиме Pose Mode, то можно попробовать просто "обновлять экран" в этом режиме ...
... во вложении есть пример с кодом обновления ...
... попробуй запустить этот год из окна текстового редактора Blender клавишами ...


... то есть суть - по таймеру считываешь новые значения углов, выставляешь их для костей, обновляешь экран ...

Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... некоторая модификация предыдущего скрипта ...
Для Кота

Оффлайн flakonov

  • Житель
Спасибо! Изучу и отпишусь
Уже лучше работает, но только в одной комбинации, когда ставлю Generic 6 DoF и ставлю ограничение угла, причем стоит выбрать Child Object и снова все не работает.

+если так связывать уже три объекта, то у центрального почему-то инерция появляется (30 вперед бежит, когда управлением двигаю, как остановлюсь - встает вровень). Центромасс у трех объектов в одном месте.

Оффлайн flakonov

  • Житель
Оставлю ещё ссылку на одну статью:
http://www.render.ru/books/show_book.php?book_id=638
http://render.ru/book/701
 (я особо не вникал в проблему.., но трекер в Блендере есть...)

изучу - отпишусь

... тебе на выходе нужна анимация или обязательно bge? ...
... если это у тебя работает в режиме Pose Mode, то можно попробовать просто "обновлять экран" в этом режиме ...
... во вложении есть пример с кодом обновления ...
... попробуй запустить этот год из окна текстового редактора Blender клавишами ...


... то есть суть - по таймеру считываешь новые значения углов, выставляешь их для костей, обновляешь экран ...


На самом деле мне не так принципиально как именно достичь цели.
Суть:
Человек надел костюм, двигает рукой, модель руки в блендере повторяет.
Чтобы демку можно было показать, что контроллер руки работает корректно. данные я настроил, чтобы шли, осталось сделать так, чтобы конечности не разлетались из-за внутренней логики блендера.
Изучу - отпишусь.

Оффлайн flakonov

  • Житель
Оставлю ещё ссылку на одну статью:
http://www.render.ru/books/show_book.php?book_id=638
http://render.ru/book/701
 (я особо не вникал в проблему.., но трекер в Блендере есть...)

Изучил, это интересно, но не совсем то, что я ищу. У меня конечная цель не в анимировании, а демонстрации работы   физического контроллера (8 гироскопов+акселерометров). А там с камерами.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
>> Чтобы демку можно было показать, что контроллер руки работает корректно. данные я настроил, чтобы шли, осталось сделать так, чтобы конечности не разлетались из-за внутренней логики блендера.

... покажи код обработки контроллеров ...
Для Кота

Оффлайн flakonov

  • Житель
... некоторая модификация предыдущего скрипта ...

Очень интересно и многообещающе выглядит, мне нужно пару дней чтобы понять всю глубину идеи (я серьезно).
Обязательно отпишусь как смогу осмыслить присланное.

Оффлайн flakonov

  • Житель
>> Чтобы демку можно было показать, что контроллер руки работает корректно. данные я настроил, чтобы шли, осталось сделать так, чтобы конечности не разлетались из-за внутренней логики блендера.

... покажи код обработки контроллеров ...
у меня для одного гироскопа пока есть.
каждый датчик показывает изменение угловой скорости относительно своего состояния покоя.
Если плечо идет вверх, а кисть останется в покое, тогда плечо в модели "улетит"

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
     
    sp = re.split('[^0-9.-]+', line2)
    # оставляем только цифпы, точки и тире, а все остальное - разделители
    x = 0.017*float(sp[1])/40.0 # переводим в цифры
    y = 0.017*float(sp[2])/40.0 # перевлдим из градусов в радианы 0.017 коэффициент
    z = 0.017*float(sp[3])/40.0# 2000 - GyroRange. 360 - общее число градусов
... можешь более подробно прокомментировать формат данных? ...
Для Кота

Оффлайн flakonov

  • Житель
     
    sp = re.split('[^0-9.-]+', line2)
    # оставляем только цифпы, точки и тире, а все остальное - разделители
    x = 0.017*float(sp[1])/40.0 # переводим в цифры
    y = 0.017*float(sp[2])/40.0 # перевлдим из градусов в радианы 0.017 коэффициент
    z = 0.017*float(sp[3])/40.0# 2000 - GyroRange. 360 - общее число градусов
... можешь более подробно прокомментировать формат данных? ...

микроконтроллер для одного гироскопа шлет данные раз в 50 мс в формате:
"gx, gy, gz\n"
re - очищает от всех символов и создаем массив из чисел
gx после этого находится в sp[1] и т.д.
сама формула чистой воды подгон, я поворачивал гироскоп и смотрел чтобы скорости с моделью совпадали. пытался обосновать, но не вышло.

GyroRange - это настройка на самом гироскопе, какой диапазон угловой скорости охватывать

re

Оффлайн sungreen

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

 

* По форуму

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

untitled1.jpg
Скачано: 4
Автор: Ksaan
ñïà58.1.jpg
Скачано: 6
Автор: feraeq
living-room.jpg
Скачано: 6
Автор: AnBor
Солнце и луна.JPG
Скачано: 15
Автор: Милый Ад
Volosy.jpg
Скачано: 20
Автор: Striver