Четверг, 28.11.2024, 06:53 Приветствую Вас Гость | RSS
Alpha Hole - MMOFPSS - онлайн космосим
Физика Unity3D - Форум
Физика Unity3D
| |
BlackCat | Дата: Четверг, 11.12.2008, 00:13 | Сообщение # 1 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| Здесь будем обсуждать все что связано с физикой движка Panda3D.
|
|
| |
BlackCat | Дата: Четверг, 11.12.2008, 00:14 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| Первое, что тут надо знать - физика базируется на физическом движке ODE. Он не плох, не хорош. Он средний и достаточно быстрый. Хотя и довольно старый.
|
|
| |
09th | Дата: Понедельник, 09.02.2009, 19:22 | Сообщение # 3 |
Рядовой
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Ммм.. внесу свои пять копеек - настоятельно не рекоммендую юзать физику уровня внешнего движка для сетевой игры - будут большие проблемы с синхронизацией, и даже если их удасться решить, то ценой генерации приличного количества внешнего трафика, коротый повлечёт за собой лаги. Так что не имея очень веских оснований для использования физики, лучше этого не делать. ИМХО, достаточно фейковой самописной физики, которую легко контролировать.
|
|
| |
BlackCat | Дата: Четверг, 12.02.2009, 01:10 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| Надо будет подумать. Предполагается в общем итоге обсчет простейшей физики - на сервере. А вот уже красявости и точности - в клиенте.
|
|
| |
09th | Дата: Четверг, 12.02.2009, 05:34 | Сообщение # 5 |
Рядовой
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Хорошо, поставим вопрос по-другому - для чего планируется использовать физику? Желательно по пунктам )
|
|
| |
BlackCat | Дата: Пятница, 13.02.2009, 15:54 | Сообщение # 6 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| В первую очередь для контроля столкновений. Но вообще есть у меня дурацкая задумка. Т.е. далеко не факт, что ее стоит реализовывать. Но в общем итоге - стрельбу производить реальными снарядами: т.е. берётся два или четыре полигона, им присваивается масса и скорость. А дальше согласно третьему закону Ньютона рассчитывается сила воздействия снаряда на объект. Конечно это может создать слишком большую нагрузку на сервер и на клиент. Если так, то тогда по-старинке - рассчёт попадания и отрисовка красивого патикла. В будущем - немного физики для обсчёта посадок на планеты и луны. Но это уж совсем в будущем.
|
|
| |
Venom | Дата: Суббота, 14.02.2009, 19:03 | Сообщение # 7 |
Рядовой
Группа: Администраторы
Сообщений: 10
Статус: Offline
| Не всё так просто с реализацией своего физического движка. Рассмотрим, например, ситуацию когда объект массой m1 сталкивается с объектом массой m2. У них есть точка столкновения ( или в более сложном случае - несколько точек ). От движка требуется здесь выдача соответственных данных, в частном случае - обноовления угловых и линейных скоростей объектов и т.п. Это не такая уж тривиальная вещь (во всяком случае - это солидный кусок работы котрый требует соответствующих опыта и знаний). Про поблемы синхронизации ничего сказать не могу, потому что о них ничего не знаю ), но могу предложить только обсуждение здесь и, в итоге, выбор соответствущей стратегии (свой движок vs PandaODE)
|
|
| |
Venom | Дата: Суббота, 14.02.2009, 19:11 | Сообщение # 8 |
Рядовой
Группа: Администраторы
Сообщений: 10
Статус: Offline
| Теперь попробую сформулировать основные требования к физическому движку в случае с Alpha Hole. Я думаю что реализация всей этой кухни штука достаточно сложная, так что PandaODE достаточно неплохой выбор, IMHO
|
|
| |
Venom | Дата: Суббота, 14.02.2009, 19:30 | Сообщение # 9 |
Рядовой
Группа: Администраторы
Сообщений: 10
Статус: Offline
| Вот моё видение возможностей использования готовых физических движков. В частности того, что связано с ODE. - 1) Есть ODE - он написан на C.
- 2) Eсть PandaODE - это Python binding для ODE, созданный разработчиками Panda3d. Он представляет собой написанный на C++ враппер для С кода с последующими binding'ами C++ код --- Python. Он работает в терминах Panda3d примитивных типов, т.е., например, векторы, матрицы и т.п. совпадает как у Panda3d так и у PandaODE ( что понятно, т.к. PandaODE по сути часть Panda3d). Это большой плюс, это понятно.
Но есть и минус у PandaODE. Не вдаваясь в подробности, скажу, что, в соответствии с классификацией в предыдущем посте, есть тут трудности с реализацией столкновений с логической точки зрения. А именнно: мы не можем задавать свои callback'и на столкновение двух тел, потому что, по какой-то причине, разработчики не стали предоставлять в Python коде вызов, позволяющий изменить callback, который есть в C++. Соответственно, приходится пользоваться стандартным callback'ом, работа которого заключается в обнаружении столкновений с физической точки зрения, и только. Чтобы получить функциональность, позволяющюю изменять callback, необходимо то ли перекомпилировать Panda3d, то ли как-то перербатывать её Python код. Кароч там дебри сплошные (мот вы и разберётесь, у меня терпения не хватило ). - 3) Есть ещё PythonODE - это полнофункциональный враппер для ODE. Проблема в нём в несоответствии примитивных типов в нём и Panda3d. На склоько я помню в PyhtonODE вектор - это просто tuple (x, y, z) и т.п. Если браться за этот вариант, то придётся хитрить с конвертированиями и т.п. что не есть хорошо (. Зато он обладает всеми возможностями родного C ODE.
Жду комментариев
|
|
| |
BlackCat | Дата: Воскресенье, 15.02.2009, 00:40 | Сообщение # 10 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| А если враппер дописать? Вроде ж исходники открытые.
|
|
| |
Venom | Дата: Воскресенье, 15.02.2009, 17:17 | Сообщение # 11 |
Рядовой
Группа: Администраторы
Сообщений: 10
Статус: Offline
| Это наверное проще, чем ковырятся в исходниках Panda3d, но всё же требует большой систематической работы. Только представь себе, что надо каждую функцию переработать, что бы она возвращала нужное значение и т.п. Но даже не это главная проблема, как мне кажется, ведь в принципе можно написать свой враппер над теми частями PythonODE, которые нам нужны. Единственной задачей этого враппера будет трансляция типов PythonODE в типы Panda3d. Но тут возникает (наверное) проблема потери производительности. Всё же лучше, IMHO, производить подобные преобразования на уровне С или C++ кода. где у нас есть указатели и прочие штуки... Здесь то мы опять возвращаемся к тому от чего пришли. Хотя, если я не прав, и особых потерь в производительности не будет, то это очень хорошая идея.
|
|
| |
09th | Дата: Среда, 18.02.2009, 12:51 | Сообщение # 12 |
Рядовой
Группа: Проверенные
Сообщений: 15
Статус: Offline
| 1. Аж на ура встроенными методами панды 2,3. Если это реализовывать с точки зрения правильной физики, то играть станет невозможно. В космосе нет сопротивления атмосферы и фактически можно свести на нет влияние гравитации. От попадания, а тем более нескольких корабль начнёт хаотически носить и крутить. Коли уж мы моделируем будущее, то наверняка изобрели бы компенсаторы и автопилоты для таких случаев - что б вернуть полёт на заданную траекторию. + у панды есть примитивная встроенная физика позволяющая задавать линейную и угловую скорости, однако даже её не стоит использовать. ------------------------------------ Поясняю проблемы с синхронизацией: Если обрабатывать всю физику только на сервере, то для более-менее крупного мира потребуется суперкомпьютер. Если обрабатывать физику у клиентов, то проведите простой эксперимент - сделайте сцену с 10 падающими на плоскость кубиками, 10 цилиндрами, и 10 шарами и запустите её несколько раз с одинаковыми параметрами (но желательно на разных компах) - несмотря на одинаковые параметры результат окажется разным. Это происходит из-за погрешностей в симуляции. Для компенсации этих погрешностей даже на одной машине приходится использовать пачку ухищрений. А теперь представьте какой трафик придётся генерировать чтоб синхронизировать все объекты? Для каждого тела - положение, ориентация, угловая и линейная скорости, аккумулятор сил, состояние соединений. Добавлено (18.02.2009, 12:51) --------------------------------------------- Да и вообще постоянное принудительное задание состояния системы вызовет нестабильность и выглядеть это будет страшно глючно - для примера попробуйте поиграть в Halo на медленном соединении
Сообщение отредактировал 09th - Среда, 18.02.2009, 12:48 |
|
| |
BlackCat | Дата: Среда, 18.02.2009, 13:38 | Сообщение # 13 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| Естественно, что предполагается наличие "компенсаторов", но все равно прицел предполагается сбивать после выстрела. Причем будет скилл, который уменьшает "уход" прицела. Причем скорее всего скилы будут для каждого вида оружия свои, чтобы жизнь малиной не казалась. В принципе это можно реализовать совершенно без применения физики. Так же как и инерцию. Так же как и полет снарядов. Т.е. чисто случайная величина умноженная на коэффициент точности оружия и умноженная на уровень скила. Ну что-то типа такого. А для компенсации расхождений применяется старый добрый ассемблеровский метод - дроби все десятичные, считаются с одинаковой точностью без округления. И передавать только сверочно-компенсационные коэффициенты.
|
|
| |
09th | Дата: Среда, 18.02.2009, 15:06 | Сообщение # 14 |
Рядовой
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Это всё реализуется без использования физики. Зачем стрелять из пушки по воробьям, особенно если эта пушка может оторвать руки владельцу? Ага, ты собираешься переписать ODE? )))) Для прекращения споров - попробуйте локально создать две одинаковые физические системы ODE и синхронизировать их с минимальной передачей информации между ними и компенсацией глюков, если это получится и не отобьёт охоту, то респект вам и вечная уважуха
|
|
| |
Venom | Дата: Среда, 18.02.2009, 18:22 | Сообщение # 15 |
Рядовой
Группа: Администраторы
Сообщений: 10
Статус: Offline
| 2 09th Хм... Доходчивое объяснение, пробовать реализовать синхронизацию, во всяком случае, желание отбило Надо "переварить". А что такого творится в Хало по сети ? ( будет хороший пример )
|
|
| |
|
Copyright MyCorp © 2024 |
Сайт управляется системой uCoz |
|