Wheelcollider - как его использовать.
Добавлено: 23 мар 2016, 21:07
Думаю многие хотели бы сделать автомобиль в Unity и конечно юниты позаботились о том, что бы ц их пользователей это получилось, без разработки очередного велосипеда и добавили в стандартные возможности такую штуку от Nvideo как wheelcollider. Лично я считаю что это решение крайне мудрое, поскольку намного продуктивнее использовать плоды трудов других команд, чем тратить время и деньги на изобретение очередного велосипеда.И вот не так давно и у меня дошли таки у меня руки и до wheelcollider'а. Однако, то ли из за того что решение стороннее, то ли в силу вредности юнитов, они возможность добавили, а вот подробно объяснить как ей пользоваться, забыли (что достаточно необычно, поскольку подробность документации просто шикарна). Пользователи тоже как то не особо вникали в использование колесных коллайдеров и в основном повторяли уроки от самих юнитов. Все это безобразие породило другое безобразие - множественные любительские расширения для Unity, где пользователи пытались переплюнуть профессионалов. И все из за по сути отсутствия документации по wheelcollider. Эту непонятную ситуацию, я и попытаюсь просветить.
Итак, что мы все делаем, когда начинаем создавать автомобиль? Правильно, идем на http://docs.unity3d.com/Manual/class-WheelCollider.html и смотрим что это вообще такое. А там, поверхностная информация, типа эта штука есть и она работает. Конечно этого не достаточно, мы идем дальше и натыкаемся на это http://docs.unity3d.com/Manual/WheelCol ... orial.html. Уже намного, намного лучше думаем мы! И вроде даже это именно то что надо. Делаем все как там написано, копипастим скрипт и... И получается нечто, что как то непонятно движется и как то странно поворачивает. Наверное надо это нечто настроить - первая мысль. Идем на предыдущую страничку, смотрим параметры, крутим и о чудо, поведение нечто начинает становиться отдаленно похожей на поведение автомобиля. Собственно на этом все и заканчивается. Ибо как бы мы не крутили настройки, что бы мы не делали, но оно ни как не хочет вести себя так, как ведет себя нормальный автомобиль. И это (физику автомобиля), на секундочку, сделала одна из ведущих компаний мира, над этим работали десятки профессионалов в своей области! Невероятно? Точно, невероятно. Думаю не ошибусь, что 90% людей которые сталкивались в WheelCollider, плевали на него и делали свою физику и видит Бог, я бы тоже так поступил, если бы не моя дотошность в поиске причин неисправности.
Так вот, первый ключик к настройке сил трения, лежит тут (тынц) в виде графика. Это ключевой момент, который для человека мало знакомого с физикой поведения сил трения, мало о чем говорит. Более того! Даже если вы поищите подобную информацию, то вам либо придется пролистать институтский курс по поведению автомобиля на дороге либо выдаст информацию по системам ABS. Как ни странно, но именно системы ABS нам и помогут понять, что же за такой график представлен на страничке. Теперь идем сюда - тынц - и очень, очень внимательно читаем все изложенное, особенно если вы в первый раз столкнулись с этим. Возможно, придется перечитать все несколько раз, но оно того стоит.
Вернемся к графику. Этот график, представляет из себя ничто иное, как зависимость сил которые цепляют колесо за дорогу не давая ему скользить, к собственно самому скольжению. Вкратце, эта зависимость выглядит так — чем больше скользит колесо, тем выше оно сопротивляется этому скольжению до того момента, как не будет пройдена критическая точка (где ExtremumSlip - скольжение, ExtremumValue — силы сопротивления). После того как точка будет пройдена, колесо начинает срываться в юз и силы сопротивления постепенно падают к точке Асимтоты ((AsymptoteSlip, AsymptoteValue) ), благодаря чему и получается эффект юза. Соответственно что бы прекратить юзить, нужно снизить силы действующие на колесо, до той силы, которое шина оказывает на дорогу, сопротивляясь скольжению. Теперь становится ясно, что, что бы выйти из юза (либо из заноса), нужно либо снизить скорость, либо уменьшить угол поворота рулевого колеса, либо увеличить давление на колесо, что бы таким образом либо уменьшить силы которые действуют на колесо (сбросить газ, уменьшить угол), либо увеличить силы сопротивления скольжению шины и довести их до сил, которые действуют на колесо. Все в точности так, как и происходит в реальности.
Подведем итог по графику.
До этой точки, колесо не срывается в юз, после этой точки, срывается
ExtremumSlip — это и есть скольжение колеса. Чем выше это значение, тем больше шина сможет скользить по поверхности, без срывания на юз(т.е. к резкому снижению сил сопротивления). Я думаю что в реальности этот параметр можно наблюдать при движении автомобиля по наклонной поверхности. Колеса стоят прямо и автомобиль движется параллельно горке, но все равно немного «съезжает» в бок.
ExtremumValue — это силы, которые сопротивляются скольжению. Чем выше это значение, тем больше нужно приложить сил, что бы сорвать колесо на юз.
После прохождения критической точки, колеса срываются в юз со снижением сопротивления
AsymptoteSlip — это скольжение колеса, во время юза.
AsymptoteValue — это силы которые сопротивляются скольжению во время юза
Собственно ситуация с заносами, точно такая же. Небольшая книжица, где автор очень просто и в то же время очень подробно описывает физику автомобиля http://www.miata.net/sport/Physics/. Есть и русский вариант, но ее уже найдете сами.
Далее.
С настройками разобрались и вроде там все в порядке, теперь надо понять причину не понятного поведения автомобиля. На самом деле все оказалось до простоты банально — в примерах ни слова не указывается о том, что и поворачивать колеса на разные углы и иметь дифференциал, просто жизненно необходимо, т.е. физика обсчитывает каждое колесо в отдельности, а не как одно целое как может показаться изначально. Что получается из стандартного примера, который многие из нас часто брали за аксиому? Поворачиваем колеса на один и тот же угол, машина начинает поворачивать и... тут же срывается в занос передней осью. Ок, таки начали поворот, давим на газ и... один и тот же крутящий момент на колесах (предположим задних), не дает нам и без того плохо поворачивать, а вообще стремится выровнять автомобиль на прямолинейное движение. В итоге получаем то, что получаем. Занавес. (если не поняли о чем это и почему, но надо бы поднабраться знаний. Это само по себе полезно, поэтому тут я оставлю за собой право не разжевано то, что и так разжевано сотнями людей)
Во время тестов, я накидал тестовый проект для статики различных ситуаций, что бы можно было отследить поведение машины. Все предельно просто, элементы добавлялись по мере необходимости, поэтому рационального кода там нет.
Что бы исключить неверные расчеты для углов колес управления и не мучиться с дифференциалом, тестовый автомобиль двухколесный.
Вот сама тестовая машинка — тунц
Всем удачи в создании гонок)
Итак, что мы все делаем, когда начинаем создавать автомобиль? Правильно, идем на http://docs.unity3d.com/Manual/class-WheelCollider.html и смотрим что это вообще такое. А там, поверхностная информация, типа эта штука есть и она работает. Конечно этого не достаточно, мы идем дальше и натыкаемся на это http://docs.unity3d.com/Manual/WheelCol ... orial.html. Уже намного, намного лучше думаем мы! И вроде даже это именно то что надо. Делаем все как там написано, копипастим скрипт и... И получается нечто, что как то непонятно движется и как то странно поворачивает. Наверное надо это нечто настроить - первая мысль. Идем на предыдущую страничку, смотрим параметры, крутим и о чудо, поведение нечто начинает становиться отдаленно похожей на поведение автомобиля. Собственно на этом все и заканчивается. Ибо как бы мы не крутили настройки, что бы мы не делали, но оно ни как не хочет вести себя так, как ведет себя нормальный автомобиль. И это (физику автомобиля), на секундочку, сделала одна из ведущих компаний мира, над этим работали десятки профессионалов в своей области! Невероятно? Точно, невероятно. Думаю не ошибусь, что 90% людей которые сталкивались в WheelCollider, плевали на него и делали свою физику и видит Бог, я бы тоже так поступил, если бы не моя дотошность в поиске причин неисправности.
Так вот, первый ключик к настройке сил трения, лежит тут (тынц) в виде графика. Это ключевой момент, который для человека мало знакомого с физикой поведения сил трения, мало о чем говорит. Более того! Даже если вы поищите подобную информацию, то вам либо придется пролистать институтский курс по поведению автомобиля на дороге либо выдаст информацию по системам ABS. Как ни странно, но именно системы ABS нам и помогут понять, что же за такой график представлен на страничке. Теперь идем сюда - тынц - и очень, очень внимательно читаем все изложенное, особенно если вы в первый раз столкнулись с этим. Возможно, придется перечитать все несколько раз, но оно того стоит.
Вернемся к графику. Этот график, представляет из себя ничто иное, как зависимость сил которые цепляют колесо за дорогу не давая ему скользить, к собственно самому скольжению. Вкратце, эта зависимость выглядит так — чем больше скользит колесо, тем выше оно сопротивляется этому скольжению до того момента, как не будет пройдена критическая точка (где ExtremumSlip - скольжение, ExtremumValue — силы сопротивления). После того как точка будет пройдена, колесо начинает срываться в юз и силы сопротивления постепенно падают к точке Асимтоты ((AsymptoteSlip, AsymptoteValue) ), благодаря чему и получается эффект юза. Соответственно что бы прекратить юзить, нужно снизить силы действующие на колесо, до той силы, которое шина оказывает на дорогу, сопротивляясь скольжению. Теперь становится ясно, что, что бы выйти из юза (либо из заноса), нужно либо снизить скорость, либо уменьшить угол поворота рулевого колеса, либо увеличить давление на колесо, что бы таким образом либо уменьшить силы которые действуют на колесо (сбросить газ, уменьшить угол), либо увеличить силы сопротивления скольжению шины и довести их до сил, которые действуют на колесо. Все в точности так, как и происходит в реальности.
Подведем итог по графику.
До этой точки, колесо не срывается в юз, после этой точки, срывается
ExtremumSlip — это и есть скольжение колеса. Чем выше это значение, тем больше шина сможет скользить по поверхности, без срывания на юз(т.е. к резкому снижению сил сопротивления). Я думаю что в реальности этот параметр можно наблюдать при движении автомобиля по наклонной поверхности. Колеса стоят прямо и автомобиль движется параллельно горке, но все равно немного «съезжает» в бок.
ExtremumValue — это силы, которые сопротивляются скольжению. Чем выше это значение, тем больше нужно приложить сил, что бы сорвать колесо на юз.
После прохождения критической точки, колеса срываются в юз со снижением сопротивления
AsymptoteSlip — это скольжение колеса, во время юза.
AsymptoteValue — это силы которые сопротивляются скольжению во время юза
Собственно ситуация с заносами, точно такая же. Небольшая книжица, где автор очень просто и в то же время очень подробно описывает физику автомобиля http://www.miata.net/sport/Physics/. Есть и русский вариант, но ее уже найдете сами.
Далее.
С настройками разобрались и вроде там все в порядке, теперь надо понять причину не понятного поведения автомобиля. На самом деле все оказалось до простоты банально — в примерах ни слова не указывается о том, что и поворачивать колеса на разные углы и иметь дифференциал, просто жизненно необходимо, т.е. физика обсчитывает каждое колесо в отдельности, а не как одно целое как может показаться изначально. Что получается из стандартного примера, который многие из нас часто брали за аксиому? Поворачиваем колеса на один и тот же угол, машина начинает поворачивать и... тут же срывается в занос передней осью. Ок, таки начали поворот, давим на газ и... один и тот же крутящий момент на колесах (предположим задних), не дает нам и без того плохо поворачивать, а вообще стремится выровнять автомобиль на прямолинейное движение. В итоге получаем то, что получаем. Занавес. (если не поняли о чем это и почему, но надо бы поднабраться знаний. Это само по себе полезно, поэтому тут я оставлю за собой право не разжевано то, что и так разжевано сотнями людей)
Во время тестов, я накидал тестовый проект для статики различных ситуаций, что бы можно было отследить поведение машины. Все предельно просто, элементы добавлялись по мере необходимости, поэтому рационального кода там нет.
Что бы исключить неверные расчеты для углов колес управления и не мучиться с дифференциалом, тестовый автомобиль двухколесный.
Вот сама тестовая машинка — тунц
Всем удачи в создании гонок)