Форум программистов, компьютерный форум, киберфорум
Наши страницы
Игровые движки
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
1

Анимация и физический движок

15.09.2015, 14:40. Просмотров 1482. Ответов 28
Метки нет (Все метки)

Здравствуйте

Хотя к OpenGL это не имеет никакого отношения, но думается именно здесь большинство людей которым это будет интересно.

Есть какая-то анимация, созданная извне и без всякой физики. Пример: летит бабочка, машет крылышками (бяк-бяк-бяк-бяк) и, покружившись, садится на цветок. Через неск кадров складывает крылышки.

Чего хотелось бы: уметь делать такую анимацию автоматом/пулеметом для напр 100 (или 1000) бабочек и (обязательное требование) с учетом collision detection. Назначить каждой бабочке свой цветок - не вопрос, причем число цветков не обязано совпадать. Но вот все остальное - в полном тумане. Ясно что если хотим collision - нужен движок физики. Есть такой (Bullet), и есть опыт его использования. И тут много проблем. Конечно можно сделать бабочку "rigid body", но крылышками она уже просто так не замашет - body движется под действием сил (а не "как хочу"). Подлетая к цветку она должна сесть на него задницей и как-то держаться. А как? (идей пока нет). Ну и "облетать препятствия" - еще круче.

Один из первых ответов (что я ожидаю) типа "а ты возьми отот готовый движок...". Хорошо бы, но здесь вход и выход свои, т.е. нет никаких планов делать игру, задача дать пользователю возможность создавать интересные анимации. Др словами рассчитать полет всех 100 бабочек на каждом кадре (получить матрицы трансформа для тела бабочки, а если потребуется - то и для крылышек, ножек и усиков).

Не исключено что "хотелка" великовата - ну помечтать иногда тоже не вредно

С уважением
Игорь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2015, 14:40
Ответы с готовыми решениями:

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

Движок на С++
Есть ли хороший движок на С++ для начинающих! Пусть 2d или 3D! Но главное на...

2д Движок
Наконец-то закончил одно дельце))) Могу взяться за то что хотел.За написание...

C++ 3D игровой движок
Добрый день. Подскажите пожалуйста трёхмерный игровой движок, который можно...

Игровой движок
Всем привет! У меня к вам вопрос: Я прочитал про Ogre3D, и понял, что это...

28
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
15.09.2015, 16:23 2
По поводу модели бабочки. Вы умеете моделировать в 3D редакторах? Скорее всего - нет. Поэтому нужно будет найти через поисковик Free версию с анимацией: butterfly 3d model fbx

Приложение лучше делать на Unity. С нуля вы, скорее всего, не сделаете. Если и сделаете на DX или OGL, то только через 4-5 лет (говорят DX изучается быстрее, чем OGL). Не дойдёт до бабочек. А с Unity (если хорошо взяться), то за неделю научитесь. Очень простой движок. Полно туториалов по любому поводу. Самое то.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
15.09.2015, 18:02  [ТС] 3
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Приложение лучше делать на Unity.
Так вопрос не стоит, см. что нужно получить на выходе.

"Бабочка(и)" - просто пример. Задача не та или иная конкретная сцена, а в общем виде: "размножить" имеющуюся анимацию, обязательно с collision detection. А откуда возьмется исходная для размножения - не переживайте, найдется.
0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
15.09.2015, 18:51 4
Цитата Сообщение от Igor3D Посмотреть сообщение
а в общем виде: "размножить" имеющуюся анимацию
Где будете создавать анимацию? Это можно сделать в 3DsMax, Maya - у которых есть студенческая лицензия. Можно в бесплатном Blender. Потом экспортировать, например, в FBX файл. Далее, импортировать в Unity. Создать один префаб. Настроить анимацию в Mecanim, написать скрипт включения анимации при определённых условиях и размножить объект с анимацией из скрипта. Коллайдеры будут на объекте. Они тоже создаются в 3D редакторах.

Цитата Сообщение от Igor3D Посмотреть сообщение
но крылышками она уже просто так не замашет - body движется под действием сил (а не "как хочу")
Не под действием сил, а как вы создадите анимацию, например, в 3DsMax:
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
16.09.2015, 11:00  [ТС] 5
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Не под действием сил, а как вы создадите анимацию, например, в 3DsMax:
Вы исходите из предположения что все будет скармливаться движку Union, а он уж займется и физикой, и скриптами и всем остальным. Это не тот случай, не то что я предложил обсудить.

Спасибо за ссылки, я понимаю что эта технология эффективна и (заслуженно) популярна. Но это работа дизайнера, программисту здесь делать нечего. Речь о гораздо более узкой задаче, на создание аналога Union никто не претендует Плохо или хорошо, но есть движок Bullet а Uinion нету - таковы рамки задачи которые. нельзя изменить, это часть гораздо большего проекта.

Заставить бабочку махать крыльями в Bullet можно, но для этого надо немало постараться: создать constraint (крепление крылышек к телу) и прикладывать вращающую силу к каждому крылу. Ну это относительно несложно если задано аналитически (напр какое-то число взмахов в секунду) - но как это выдрать из анимации? Др словами как рассчитать силы которые имели бы тот же эффект что и заданная анимация?
0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
16.09.2015, 12:02 6
Цитата Сообщение от Igor3D Посмотреть сообщение
Но это работа дизайнера, программисту здесь делать нечего.
Как раз таки зная API Unity программист может написать алгоритмы манипурирования объектами как угодно. Работа дизайнера-моделиста - создать 3D модель, он же или аниматор - создаст анимации, далее экспортирует в FBX файл. Потом уже вступает в работу программист, который импоритрует модель и пишет игровые алгоритмы, настраивает физику и т.д.

Цитата Сообщение от Igor3D Посмотреть сообщение
Плохо или хорошо, но есть движок Bullet а Uinion нету
Нам есть физический движок не хуже - PhysX от NVIDIA. Почитайте про Unity в вики.

Цитата Сообщение от Igor3D Посмотреть сообщение
но как это выдрать из анимации? Др словами как рассчитать силы которые имели бы тот же эффект что и заданная анимация?
Самый быстрый и логичный способ - это создать анимации в 3D редакторах, либо обвешивают, к примеру, человека датчиками и записывают разные анимации. Врядли, конечно, на бабочку можно нацепить датчики, но определённо намного выгоднее создать анимацию, например, в 3DsMax, Blender и т.д. А программист уже на скриптах опишет, при каких условиях запускается, та или иная анимация.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
16.09.2015, 14:01  [ТС] 7
По поводу смены движка и создания анимации - мне нечего добавить к тому что я уже сказал в предыдущем посте.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Потом уже вступает в работу программист, который импоритрует модель и пишет игровые алгоритмы, настраивает физику и т.д.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А программист уже на скриптах опишет, при каких условиях запускается, та или иная анимация.
Хорошо, допустим я программист вступивший в работу. Я имею модель той же бабочки и ее "эталонную" анимацию. Нужно создать 100 таких бабочек одну за одной, для каждой известны только ее начальное и конечное положения. Разумеется с исходной анимацией они не совпадают.

Ваши (или наши) действия?
0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
16.09.2015, 16:51 8
Цитата Сообщение от Igor3D Посмотреть сообщение
Нужно создать 100 таких бабочек одну за одной, для каждой известны только ее начальное и конечное положения. Разумеется с исходной анимацией они не совпадают.
Я не понимаю, что за "начальное и конечное положения"?

Для бабочки предлагаю такие анимации для начала записать:
  • Fly.anim - бабочка в полёте машет крыльями
  • Idle.anim - бабочки сидит, плавно открывая и закрывая крылья, шевелит усиками
  • Eat.anim - бабочка ест пыльцу

Бабочки машут крыльями одинаково. Можно для разнообразия сделать 10 бабочек, которые немного по-разному себя ведут. Из скрипта в их можно сделать по 100 штук в цикле из нескольких префабов. Для каждого вида бабочки свой префаб.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
17.09.2015, 10:08  [ТС] 9
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я не понимаю, что за "начальное и конечное положения"?
Пример

Дано: есть комната, в ней сидят 3 бабочки: одна на полу, другая на стене, третья на потолке. На столе ваза с 3 цветками. Требуется: по команде извне все 3 снимаются с места, и. покружившись, садятся каждая на свой цветок.

Для одной из бабочек заготовлена анимация, ее можно просто включить. Но что делать для остальных двух?
0
snake32
1653 / 1105 / 194
Регистрация: 26.02.2009
Сообщений: 4,102
Записей в блоге: 5
17.09.2015, 10:27 10
Igor3D, я не понимаю зачем двигать крыльями через физ движёк? Достаточно тупой анимации. С точки зрения физ.движка бабочка будет сферой. То есть разные представления одного объекта для разных движков: для физики - сфера для графики красивый анимированный мэш с текстурами.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я не понимаю, что за "начальное и конечное положения"?
В рандомном месте( вне видимого экрана ) появляется бабочка( имеет начальное положение ). В момент генерации этой бабочки становится известно к какому цветку она полетит( конечное положение ).
Igor3Dу нужно сгенерить траекторию. Но не скучную прямую. Так как существует много бабочек одновременно то возможно они в каких-то местах траектории пересекутся. Нужно изменить прямую так чтобы бабочки не пролетали сквозь друг друга, но достигли конечной цели - цветка.
Ну-ка! Скриптик для Юнити в студию! Там же всё так просто и быстро!
0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
17.09.2015, 10:54 11
Как раз основное время уйдёт на написание алгоритма генерации траекторий. Если бы у меня был такой алгоритм, который генерировал бы массив точек для каждой бабочки - Waypoints, то на Unity не составило труда сделать приложение. Нужно было бы снять галочку "Use Gravity". И написать скрипт, который бы при достижении Waypoint менял бы вектор скорости GetComponent<Rigidbody>().velocity на вектор, который бы указывал на следующий Waypoint.
0
snake32
1653 / 1105 / 194
Регистрация: 26.02.2009
Сообщений: 4,102
Записей в блоге: 5
17.09.2015, 11:03 12
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если бы у меня был такой алгоритм
Так у Igor3Dа тоже нет такого алгоритма. Собственно в этом и вопрос темы. Осталось дело за малым - хотя бы словесно описать этот алгоритм.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
17.09.2015, 11:29  [ТС] 13
Цитата Сообщение от snake32 Посмотреть сообщение
Так у Igor3Dа тоже нет такого алгоритма. Собственно в этом и вопрос темы.
ДА, совершенно верно.

Цитата Сообщение от snake32 Посмотреть сообщение
В рандомном месте( вне видимого экрана ) появляется бабочка( имеет начальное положение ). В момент генерации этой бабочки становится известно к какому цветку она полетит( конечное положение ).
Да, да, именно так

Цитата Сообщение от snake32 Посмотреть сообщение
Igor3D, я не понимаю зачем двигать крыльями через физ движёк? Достаточно тупой анимации. С точки зрения физ.движка бабочка будет сферой. То есть разные представления одного объекта для разных движков: для физики - сфера для графики красивый анимированный мэш с текстурами.
Согласен, для бабочки это удачное решение. Но в общем случае конверсия из анимации в силы нужна (см ниже)

Цитата Сообщение от snake32 Посмотреть сообщение
Igor3Dу нужно сгенерить траекторию. Но не скучную прямую. Так как существует много бабочек одновременно то возможно они в каких-то местах траектории пересекутся. Нужно изменить прямую так чтобы бабочки не пролетали сквозь друг друга, но достигли конечной цели - цветка.
Не пролетали сквозь друг друга - это еще цветочки. Они могут пересекать др объекты в сцене (те же стены). Да, Bullet это отработает, но вероятный рез-т = бабочка тычется и тычется в сцену (как ночные мотыльки).

А главное - делать директорию самому, руками, все с нуля - выглядит совершенно бесперспективно. Вырисовывается тонна ручек управления - тяжеловесно но малоэффективно. Напрашивается поюзать заготовленную анимацию - но как? Она же сразу заклинит с физикой

Цитата Сообщение от snake32 Посмотреть сообщение
Ну-ка! Скриптик для Юнити в студию! Там же всё так просто и быстро!
Присоединяюсь к запросу
0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
17.09.2015, 13:27 14
Цитата Сообщение от Igor3D Посмотреть сообщение
Присоединяюсь к запросу
Почему этот алгоритм я должен писать? Я говорил, как вы можете съэкономить время и облегчить работу, что на Unity лучше делать, потому что все техничекие детали можно на него возложить: настройка анимации хлопаться крыльями, физика столкновений и т.д., а 3D модель найти в интернете (или сделать самому), импортировать в Unity и можно прямо в нём записать анимации махания крыльями с помощью Mecanim. Действительно, можно сферического коллайдера вполне хватит. А алгоритм генерации WayPoint'ов пишите, ищите или заказывайте сами. Алгоритм должен выплёвывать массивы Waypoint'ов для каждой бабочки перед каждый запуском.

Я вместо бабочки сделал кубик (который потом можно заменить на модель), а WayPoint'ы расставил вручную очень неровно, поэтому так движется отрывисто и неровно. Можно сделать много WayPoint'ов, тогда движения будут плавными.

https://lh3.googleusercontent.com/7G...6tI=w1342-h503

В скрипт получился очень простой:

Fly.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using System.Collections;
 
public class Fly : MonoBehaviour
{
    public Transform[] wayPoints;
 
    public float speed = 3f;
 
    private int current = 0;
    
    void FixedUpdate ()
    {
        if (wayPoints.Length == 0)
        {
            return;
        }
 
        Vector3 pos = Vector3.MoveTowards(transform.position, wayPoints[current].position, speed);
        GetComponent<Rigidbody>().MovePosition(pos);
 
        if (wayPoints[current].position == transform.position)
        {
            current = (current + 1) % wayPoints.Length;
        }
    }
}
0
Миниатюры
Анимация и физический движок  
Вложения
Тип файла: rar Butterflies_v1.0.0 (Source).rar (933.9 Кб, 5 просмотров)
Тип файла: rar Butterflies_v1.0.0 (Win_x86).rar (8.10 Мб, 5 просмотров)
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
17.09.2015, 13:44  [ТС] 15
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я говорил, как вы можете съэкономить время и облегчить работу, что на Unity лучше делать, потому что все техничекие детали можно на него возложить: настройка анимации хлопаться крыльями, физика столкновений и т.д., а 3D модель найти в интернете (или сделать самому), импортировать в Unity и можно прямо в нём записать анимации махания крыльями с помощью Mecanim.
Спасибо что потратили на меня время, но вопрос/тема именно алгоритм "множественной анимации" (а не связанные с ней вещи)

Не по теме:


Да, Ваня, Unity Вас никак не изменило :)

0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
17.09.2015, 13:57 16
Мы немного о разных вещах. Анимация - это когда она машет крыльями. Полёт бабочек - это не анимация, а поиск траекторий, которые будут задаваться в виде массивов точек.

но крылышками она уже просто так не замашет - body движется под действием сил (а не "как хочу")
Махание крыльев к физике не имеет никакого отношения.

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
Да, Ваня, Unity Вас никак не изменило
Igors c Qt! А я догадался. Всё теже вопросы по 3D цель которых усложнить и запутать :)

0
snake32
1653 / 1105 / 194
Регистрация: 26.02.2009
Сообщений: 4,102
Записей в блоге: 5
17.09.2015, 15:01 17
Цитата Сообщение от 8Observer8 Посмотреть сообщение
В скрипт получился очень простой:
Зря качал.
Это очень ОЧЕНЬ далеко от того что нужно!
Не уже ли так сложно это понять?
0
8Observer8
2269 / 1436 / 227
Регистрация: 05.10.2013
Сообщений: 4,412
Записей в блоге: 56
17.09.2015, 15:09 18
Цитата Сообщение от snake32 Посмотреть сообщение
Это очень ОЧЕНЬ далеко от того что нужно!
А что нужно? Махать крыльями с помощью Bullet?
0
snake32
1653 / 1105 / 194
Регистрация: 26.02.2009
Сообщений: 4,102
Записей в блоге: 5
17.09.2015, 15:46 19
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А что нужно?
Добавь ещё 10 а лучше 40 красных кубиков(типо бабочки) задай им траектории в ограниченном объёме. И ты увидишь что некоторые из них(траектории) пересекаются. Но надо без пересечений.

Скажешь: ДА, но я ж могу изменить траекторию, пока проектирую их в юнити. Это просто!
Я: А если их 100500? Все 100500 траекторий будешь моделировать руками? Это ведь просто!

Теперь понятна задача?
1
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
17.09.2015, 16:24  [ТС] 20
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А что нужно? Махать крыльями с помощью Bullet?
Не исключено. Это если бабочки заведомо далековато друг от друга - тогда устроит и грубая аппроксимация сферой. А если близко (напр 2 на 1 цветке) придется и collision крыльев считать.

Цитата Сообщение от snake32 Посмотреть сообщение
Я: А если их 100500? Все 100500 траекторий будешь моделировать руками?
Только 10 - уже геморрой капитальный. Поэтому-то дизайнер и хочет иметь такой тул

Возвращаясь к теме: собственно для создания "какого-то" пути (чисто в движке) у меня и сейчас средства имеются. Надо как-то "промодулировать" этот путь анимацией. (Грубый) пример: путь задает ось на который намотана спираль, а по ней уже летит бабочка. В роли спирали - анимация. Но при всем этом "облет препятствий" - мама дорогая, ни одной идеи нет.

Когда-то слышал словечко "flocking" - надо копать теорию

Не по теме:

Цитата Сообщение от snake32 Посмотреть сообщение
Не уже ли так сложно это понять?
Да все он прекрасно понимает, вот только жилки разработчика нет - все ищет где полегче.

0
17.09.2015, 16:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2015, 16:24

Браузерный 3D движок
Посоветуйте хороший браузерный 3D движок. Модераторы, можно как то исправить...

2d движок на с++ ПОМОГИТЕ
Помогите пожалуйста программисты,появилось желание сделать 2D игру создав при...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru