Render.ru

Танк работающий на МЕЛу...

R-r-r

Мастер
Рейтинг
136
#1
Вам надоели вопросы типа - "А куда жать?", "А че оно не это самое...?" ?!
МИМ задаст Вам вопросов посерьезнее, ибо их есть у меня! =)

И так:

Задача - автоматизировать анимацию танковых траков.(гусениц и колес.)
Подзадачи:
1) Поставить в зависемость от перемещения танка вращение колес и гусениц независемо от направления движения
оного с учетем проделываемого расстояния. (доп. По возможности и с учетем рельефа местности)
(т.е. сколько танк проехал настолько и колесо должно провернуться)
2) Поставить в зависемость от вращения танка относительно вертикальной оси - вращение гусениц и колес.
(тут проблема например в том, что при повороте одна гусеница вообще должна работать задом наперед.
А если это маневр на быстром ходу, то слегка притормаживать)

Возможные методы решения.
Честно признаюсь, что мозги скрипят - громко, но путного ничего выдать немогут... =)

Реальная твердотельная динамика отпадает сразу и практически полностью.
Слишком уж сложная физическая модель и слишком большая нужна точность просчетов.
Неговоря уж о том, что просто сложно будет замоделить все тютелька в тютельку, чтоб РАБОТАЛО.
(если несогласны предлагайте варианты, с учетом ограниченных машинных ресурсов, конечно...)

Дривен-кеи и сложное группирование с Parrentом.

Повробовал...
Ну на то чтобы при перемещении танка по оси Y вращалось колесо меня хватило.
Навесил дривен и все завращалось. Но вот если танк поедет наискось, то тут
уже возникают БООЛЬШИЕ проблемы. Пробовал путем привязывания танка к кубику
добиться того, чтобы танк в локальных координатах ездил только по оси Y.
А поворот бы осуществлялся за счет вращения родительского кубика.
Ну и сами понимаете, танк то уехал, а кубик остался и при попытке его повернуть
танк просто мотает по всей сцене...
Может рецепт то и неплохой, просто я чего то недогоняю.

Скриптинг и высшая математика. =)

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

Вооот...

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

З.ы. Если непонятно о чем это я вот разъяснительная диаграмма.
http://www.vladprazdnik.ru/fotos/pic/Diagramma.jpg
 
#2
... я думаю здесь тебе поможет только Злыдень ...
... задай этот вопрос на реалтайме ...
 
#4
Привет, MIM

Если нужно практическое применение решения этой задачи -
Я бы создал кривую, по которой ездил бы танк, создал бы
ноду curveInfo, запустил бы танк, а вот колеса синхронизировал бы примерно
следующим экспрешшном:

float $path=curveInfo1.arcLength*motionPath1.uValue;
float $rad=koleso.radius;
koleso.rotateZ=$path*180/$rad/3.14159;

Это для колеса, не зависящего от поворота, то есть оно будет крутится в соответствии со скоростью движения по кривой. Если нужно сделать притормаживания одной из гусениц, я бы пошел по одному из двух путей.
1) для каждого из боковых рядов колес offset-ом создал бы кривую, с которой бы "считывался" поворот колеса этой стороны. Получится некая рассогласованность в момент поворота. Но возможно это как раз то,
что надо. Надо проверять.
2) С помощью pointOnCurveInfo считывал бы кривизну и центр кривизны пути в текущей точке и соответственно изменял коэффициент вращения колес.(естественно предварительно его надо ввести в вышеуказанный экспрешшн)

А гусеницы привязать к вращающимся колесам думаю не так и сложно.
Опять-таки кривая, motionPath для сегментов гусеницы, а скорость изменения параметра uValue этих сегментов , берется в простом случае от uValue общего движения танка, в более точном-от скорости вращения колеса.

Преимущество использования кривой в качестве пути - очевидно:
создавая кривую любой сложности, с холмами, резкими поворотами,
ты можешь забыть о многих 3-х мерных проблемах, двигаясь по сути в одномерном пространстве - uValue.

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

удачи
Алексей Гусев
 

R-r-r

Мастер
Рейтинг
136
#5
Спасибо большое Алексей за ответ и почву для дальнейших изысканий.
Конечно тут еще будет над чем поэксперементировать.
Но сразу могу сказать следующее.
Все это затевается с одной целью - максимально упростить и автоматизировать процесс анимации, а кривая не самый удобный способ управления, тем более танком.
Танку характерно "рваное" движение.

>Преимущество использования кривой в качестве пути - очевидно:
>создавая кривую любой сложности, с холмами, резкими поворотами,
>ты можешь забыть о многих 3-х мерных проблемах, двигаясь по сути в >одномерном пространстве - uValue.
Да конечно, это просто.
Но кривая слишком ограничивает свободу действия.
Кривая идеально подходит для анимации летательных аппаратов,
поскольку им как раз харрактерно плавное-криволинейное-неперывное движение.
А сценарий движения танка может выглядеть например так:

1. Сдать назад при выезде из ангара.
2. Развернуться на месте на 180 градусов
3. Совершить маневр для выезда на дорогу.
4. Несколько минут двигаться по прямой
5. Выполнить резкий поворот и занять боевую позицию на холме
6. Выполнить атаку и задним ходом спрятаться за холм
7. Движением назад сменить позицию
8. Вновь взобраться на холм и произвести стрельбу
и.т.д....
Не думаю что кривая тут способна облегчить жизнь.

И мне бы хотелось ограничиться всего только буквально тремя кейабельными параметрами - X, Y и угол вращения.

> есть еще маленькая задачка-чтобы при съездах и подъемах танк не проникал в землю

А вот на этот счет у меня есть идеи.
Можно волочить по земле за констраинт (на веревочке) ригид боди примерно повторяющий форму гусениц. За счет\трения скольжения думаю он будет довольно точно передавать харрактер движений танка на пересеченной местности. А поправку на вращение колес можно делать исходя из положения этого ригид-боди в пространстве.
Но тут как-то нужно будет получать глобальные координаты и угол вращения объекта.
Может ты знаешь способ?
Кстати если для этого есть средства то тут открывается море возможностей по вложенному группированию и привязке одних параметров к другим.
Т.е. можно будет например сгруппировать танк и внутри группы выполнять только движение по оси X а вращением группы выполнять разворот.
Ну или что-то в этом духе...
 
#6
Да MIM задача конечно не из легких.....

Если решишь то можно прямо щас Зурабу Церетели тебе памятник заказывать , чтобы на поклонной горе поставить....

У меня уже БМП без гусениц в "гараже" пол года пылиться...

Вообщем успехов тебе в достойном и грамотном решении этой проблемы!!!!!
 
#7
MIM - вопрос такой - как именно будет использоваться мультипликация с танком?
Или же решение проблемы только потому интересна - потому что есть проблема?
 

R-r-r

Мастер
Рейтинг
136
#8
Признаюсь - это проблема ради проблемы.
Но это не значит что её решение не имеет практического применения.
Если все получится удачно я возможно даже попробую навесить своему танку некий AI. А потом создам ему врагов иии... %)

В общем главная цель - развитие.
В частности более тесное знакомство с MEL.

А примерный сценарий поведения я описал в одном из своих постов выше.
 
#9
Уважаемый Злыдень ! Ну откликнитесь же наконец ! Ну вот же она задача вполне достойная того, чтобы применить Ваши скрытые возможности. Или опять не совсем достойная ? И Вы нам опять гордо ничего не расскажете. Эх ! Пойду снова MUM почитаю.
 
#11
Nado Ispolizovati Character Setup!

Mozhet termin Character Setup nevernij (ne pomnju kak on nazivaetsja)(no esti tam takoj redaktor v menu Window)

1 -Delaesh Rolik Povorota na 180 v XY , YZ, XZ ploskostjah
2 -Delaesh Rolik Povorota na 180 S proskalizovanijem gusenici v XZ ploskosti
3 -Vsje ostalinije roliki Tvoja linejnaja animacija

Vot i 4-re kubika (ne schitaja podkubikov v nih Dlja Animacii koljos i gusenic) s kotorimi ti budesh rabotati v Charakter Setup i smozhesh sdelati Lubuju animaciju.

Esli nado chtobi I krutilsja i dvigalsja po prjamoj to Skladivaesh Eti roliki
Posmotri Character setup tam vsjo ocheni udobno i ponjatno dazhe vremja zamedliti mozhno ka v Matrix:)) regulirovati skorosti Animacii(v dannom sluchae skorosti povorota) i mnogo vsego i rabotati udohbno

A skripti mozhno ispolizovati dlja sozdanija animacii koljos i gusenic tanka Dlja rolika povorota na 180 (Da i bez nix mozhno dazhe bistreje tak budet).
Dlja Dvizhenija po prjamoj Mozhno dazhe bez skriptov a imenno prosto postaviv dva kljucha KEY1 i KEY2 i skladivaja roliki v Character setup takim obrazom:
Timeline:
Our_ROLIK | Our_ROLIC + Our_ROLIC | Our_ROLIC+Our_ROLIC+Our_ROLIC ....

Povoroti Analogichno Toliko Dlja Koljos Raznije Znachenija RotateXYZ budut v Key1 i v Key2 eksperementalino podobrati Bistreje Chem Script Pisati

A tak Vsjo Tozhe samoe
 

R-r-r

Мастер
Рейтинг
136
#12
Блин, Влад!
Как же я сам недодумался!?
Ладно попредержу восторги, сначала попробую.

А называется это дело Трах Эдитор (Trax Editor)...

Похоже я снова не с того конца взялся и майку снова недооценил... =)
 
#14
Я частично решал эту задачу. Написал скрипт который генерит из одного трака и сплайна "гусиницу " Все работал красиво. Танк двигался по прямой. Положение каждого трака расчитывалось по экспрешену в зависимости от смещения коивой. Мой скрипт генерил экспрешены, т.к писать их ручками для скажем 80 траков - сумашествие. Был гемор с нормалью. Траки флипались в различных местах кривой в зависимости от направления выпуклости.Решил тупо и громоздко. Тот же скрипт создавал Nurbs ленту по кривой и констрэйнтил по поверхности и нормали. Дешево, но сердито)).
Резюме:
Плюсы:
1. Анимируешь кривую с любой скоростью движения - остальное автоматом.
2. Можно анимировать форму кривой - иллюзия натяжения и опадания гусиниц.
3. Легкость создания гусиницы из single трака и кривой.(был трабл. у некоторых танков гус. состоят из двух типов траков - пришлось модифицировать скрипт)

Минусы, точнее недоделки:

1. Неподдерживается произвольное движение - корректно только по прямой и с раскачкой вперед-назад, т.е по кочкам))

2. Не делал завязку с колесами. Муторно точно расчитать чтоб зубья попадали куда надо. Несложно подогнать вручную.

Была идея написать на Си плагин. Там все тупо - сплошная математика, но забил - не было необходимости, да и эта тема API не знакома.
 

R-r-r

Мастер
Рейтинг
136
#15
Уфф... чего-то ты перемудрил.

Вот более изящное решение

http://www.cgfocus.com/ArticleDetails.cfm?ArticleID=118

Тутор правда под LW, но это не суть важно...

Но у меня проблема несколько иного рода.
Не замоделить физически точное поведение гучениц.
А синхронизовать их с учетом движения танка и максимально упростить его (танка)управление.
 
#16
http://geudro.narod.ru/tank/

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