Проблема взаимодействия двух Rigidbody

Физика в Unity

Проблема взаимодействия двух Rigidbody

Сообщение Serge 05 янв 2010, 08:09

Увидел интересный, на мой взгляд, пример физики сделанный на Blender, решил сделать подобное на Unity, в итоге не получилось. Но меня терзают смутные сомнения, что сделать все-же можно, вот только не могу сообразить как. Решил обратиться к сообществу за советом, возможно ли сделать, чтобы эти вертушки взаимодействовали друг с другом? И если возможно подскажите направление, в котором нужно работать.

Как выглядит сцена можно посмотреть здесь http://serge163.narod.ru/Vertushka.html
Последний раз редактировалось Serge 11 янв 2010, 17:23, всего редактировалось 1 раз.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Проблема взаимодействия двух Rigidbody

Сообщение Paul Siberdt 05 янв 2010, 17:28

В документации движка есть раздел про compound colliders, там рассказано, как из примитивных кусочков собрать сложную по форме жесткую ригидбодю ;)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Проблема взаимодействия двух Rigidbody

Сообщение Serge 09 янв 2010, 21:52

Спасибо за совет, получилось, но мне пока не все нравится. Если внимательно посмотреть, то иногда видно как вертушки вздрагивают. Хочу, если возможно, избавиться от данного нюанса.

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://serge163.narod.ru/unitydemo/vertush.unity3d&w=600&h=450&t=true&preview=1' height='"+(450+30)+"' width='600' frameborder='0' scrolling='no'></iframe>"); </script>
Последний раз редактировалось Serge 11 янв 2010, 18:59, всего редактировалось 1 раз.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Проблема взаимодействия двух Rigidbody

Сообщение Paul Siberdt 09 янв 2010, 23:01

А каким констрейном прикреплено колесо к стенке?
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Проблема взаимодействия двух Rigidbody

Сообщение Serge 10 янв 2010, 07:52

Оно к стенке не крепиться, согласно образцу, весит в воздухе. Точнее в воздухе ось (цилиндр + Capsule Collider) , не ней труба (Mesh Collider + Rigidbody), на трубе дочерние лопасти (куб + Box Collider). По началу труба с лопастями слетала с оси, добавил к ней Configurable Joint, ограничил движения по XMotion, YMotion, ZMotion, Angular XMotion, Angular ZMotion. Добился вот такого результата.
Параметры выставлял методом проб и ошибок. Документация скуповата и переводится плоховато :) .
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Проблема взаимодействия двух Rigidbody

Сообщение Paul Siberdt 10 янв 2010, 10:37

Думаю, Configurable лучше заменить на ось.... у оси гораздо жестче фиксируются лишние "направления"... эх.. лучше самому попробовать, конечно, чем предлагать непроверенные решения :)

... такс... вот.. собрал... hinge joint тож дергается...

Вообщем, что можно сделать и почему:

Физика обновляется не покадрово, она считается по собственным апдейтам. Даже если видюха выдает 2К ФПС, физика апдейтится, скажем, раз в 10 секунд. (частоту можно выставить в настройках времени проекта, но сильно не увлекайтесь).

Почему объект дергается? Потому что между физическими апдейтами, внутри которых Юня поймет, что объект жестко привязан и обработает констрейн, ригидбодю успевает унести и отобразить этот "унос" в паре десятков кадров рендера.

В Вашем случае поправить ситуацию очень просто: надо запретить колесам двигаться в каждом кадре рендера.
Для этого запоминаем на старте их позицию и потом в каждом апдейте фиксируем ее:

Код: Выделить всё
var myPosition : Vector3;
function Start ()    {   myPosition = transform.position;      }
function Update ()    {   transform.position = myPosition;      }


Во вложении - пак с тестом. Пост несколько раз дописывался, затирать начало не буду, дабы видно было развитие :D
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Проблема взаимодействия двух Rigidbody

Сообщение Serge 10 янв 2010, 12:00

Спасибо, посмотрю, попробую.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Проблема взаимодействия двух Rigidbody

Сообщение Zaicheg 10 янв 2010, 12:39

Paul Siberdt писал(а):Почему объект дергается? Потому что между физическими апдейтами, внутри которых Юня поймет, что объект жестко привязан и обработает констрейн, ригидбодю успевает унести и отобразить этот "унос" в паре десятков кадров рендера.

Так, интересно.
То есть, физическое явление "объект жестко привязан и обработает констрейн" обрабатывается в соответствии с шагом FixedUpdate, а физическое явление "ригибодю унесло" обрабатывается с другой частотой. Непонятно.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Проблема взаимодействия двух Rigidbody

Сообщение Paul Siberdt 10 янв 2010, 13:44

По всей видимости, ригидбодя получает импульс, а контстрейн обрабатывается уже на следующем фикседе и только в следующем фикседе понимает, что его бодю унесло, куда не подобает.
ИМХО коллижены и обмены энергиями между жесткими телами стоят в высшем приоритете, чем просчеты дампингов, ограничения, пружины, софтбади, флюиды и прочие плюшки.
И вот этот самый следующий фиксед добавляет лаг констрейнам и прочему.

О, завтра ж на работу, спрошу наших программеров, что с Фызыксом сидят. :p

Если есть официальное объяснение - пожалуйста, рады послушать :D ... я лишь опирался на тесты.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Проблема взаимодействия двух Rigidbody

Сообщение Serge 10 янв 2010, 20:16

Я посмотрел Ваш пример. Попробовал применить в своем hinge joint, результат не изменился. А вот Ваш код мне помог, дергаться перестало.
Если Вас не затруднит, спросите у своих программеров, как Вы собирались, очень интересно. Спасибо за помощь.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Проблема взаимодействия двух Rigidbody

Сообщение JenyaHW 10 янв 2010, 20:56

Прикольно (есть предложение по увеличению веса шестерен, и увеличению сопротивлению воздуха при повороте) мне кажется станет плавнее и красивее, поэкспериментируйте с этим. ;)
Магазин 3Д моделей. vscor.com/3Dmodels.php
JenyaHW
UNITрон
 
Сообщения: 243
Зарегистрирован: 18 июл 2009, 18:17

Re: Проблема взаимодействия двух Rigidbody

Сообщение JenyaHW 10 янв 2010, 21:00

и еще можно усложнить конструкцию добавив ось как целиндр а втулку как трубу или бублик и при этом убрать жоинт оси и добавить жоинт привязки к плоскости (это уберет вздрагивание при ударах)... (но - это уже не актуально у вас и так хорошо работает...)
Магазин 3Д моделей. vscor.com/3Dmodels.php
JenyaHW
UNITрон
 
Сообщения: 243
Зарегистрирован: 18 июл 2009, 18:17

Re: Проблема взаимодействия двух Rigidbody

Сообщение JenyaHW 11 янв 2010, 10:57

Тоже заинтересовался... (вот что получилось) (можно еще усовершенствовать... но интерес погас...)

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://www.vscor.com/images/fiz.unity3d&w=600&h=400&t=true&preview=1' height='"+(400+30)+"' width='600' frameborder='0' scrolling='no'></iframe>"); </script>
Последний раз редактировалось JenyaHW 11 янв 2010, 11:07, всего редактировалось 1 раз.
Магазин 3Д моделей. vscor.com/3Dmodels.php
JenyaHW
UNITрон
 
Сообщения: 243
Зарегистрирован: 18 июл 2009, 18:17

Re: Проблема взаимодействия двух Rigidbody

Сообщение Neodrop 11 янв 2010, 11:03

Вот это горохолущильный агрет! Мне понравилось ;0)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Проблема взаимодействия двух Rigidbody

Сообщение Paul Siberdt 11 янв 2010, 12:33

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

Но программеры тоже удивились, что просчет связей запаздывает... с другой стороны, это может быть сделано намеренно, поскольку еще в Новодексе было много примеров скелетов на фиксед констрейнах (насекомых, роботов и так далее). Эти самые скелеты вели себя, не как жесткая сборная ригидбодя, а как эдакий приятный упругий каркас, потягивать и надавливать на него было удовольственно :) .

Ну и предложение создать физическую ось вместо ее эмуляции констрейном еще естесственнее побеждает проблему :D
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

След.

Вернуться в PhysX

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1