Суббота, 27.04.2024, 03:47
Приветствую Вас Гость | RSS

Alpha Hole - MMOFPSS - онлайн космосим

Физика Unity3D - Форум

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: BlackCat  
Форум » Обсуждение игры AlphaHole » Обсуждение движка игры » Физика Unity3D (Особенности и плюшки физики Unity3D)
Физика Unity3D
BlackCatДата: Четверг, 11.12.2008, 00:13 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 38
Репутация: 1
Статус: Offline
Здесь будем обсуждать все что связано с физикой движка Panda3D.
 
BlackCatДата: Четверг, 11.12.2008, 00:14 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 38
Репутация: 1
Статус: Offline
Первое, что тут надо знать - физика базируется на физическом движке ODE. Он не плох, не хорош. Он средний и достаточно быстрый. Хотя и довольно старый.
 
09thДата: Понедельник, 09.02.2009, 19:22 | Сообщение # 3
Рядовой
Группа: Проверенные
Сообщений: 15
Репутация: 0
Статус: Offline
Ммм.. внесу свои пять копеек - настоятельно не рекоммендую юзать физику уровня внешнего движка для сетевой игры - будут большие проблемы с синхронизацией, и даже если их удасться решить, то ценой генерации приличного количества внешнего трафика, коротый повлечёт за собой лаги. Так что не имея очень веских оснований для использования физики, лучше этого не делать.
ИМХО, достаточно фейковой самописной физики, которую легко контролировать.
 
BlackCatДата: Четверг, 12.02.2009, 01:10 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 38
Репутация: 1
Статус: Offline
Надо будет подумать. Предполагается в общем итоге обсчет простейшей физики - на сервере. А вот уже красявости и точности - в клиенте.
 
09thДата: Четверг, 12.02.2009, 05:34 | Сообщение # 5
Рядовой
Группа: Проверенные
Сообщений: 15
Репутация: 0
Статус: Offline
Хорошо, поставим вопрос по-другому - для чего планируется использовать физику? Желательно по пунктам )
 
BlackCatДата: Пятница, 13.02.2009, 15:54 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 38
Репутация: 1
Статус: Offline
В первую очередь для контроля столкновений.

Но вообще есть у меня дурацкая задумка. Т.е. далеко не факт, что ее стоит реализовывать. Но в общем итоге - стрельбу производить реальными снарядами: т.е. берётся два или четыре полигона, им присваивается масса и скорость. А дальше согласно третьему закону Ньютона рассчитывается сила воздействия снаряда на объект. Конечно это может создать слишком большую нагрузку на сервер и на клиент. Если так, то тогда по-старинке - рассчёт попадания и отрисовка красивого патикла.

В будущем - немного физики для обсчёта посадок на планеты и луны. Но это уж совсем в будущем. smile

 
VenomДата: Суббота, 14.02.2009, 19:03 | Сообщение # 7
Рядовой
Группа: Администраторы
Сообщений: 10
Репутация: 0
Статус: Offline
Не всё так просто с реализацией своего физического движка.
Рассмотрим, например, ситуацию когда объект массой m1 сталкивается с объектом массой m2. У них есть точка столкновения ( или в более сложном случае - несколько точек ). От движка требуется здесь выдача соответственных данных, в частном случае - обноовления угловых и линейных скоростей объектов и т.п. Это не такая уж тривиальная вещь (во всяком случае - это солидный кусок работы котрый требует соответствующих опыта и знаний).

Про поблемы синхронизации ничего сказать не могу, потому что о них ничего не знаю ), но могу предложить только обсуждение здесь и, в итоге, выбор соответствущей стратегии (свой движок vs PandaODE)

 
VenomДата: Суббота, 14.02.2009, 19:11 | Сообщение # 8
Рядовой
Группа: Администраторы
Сообщений: 10
Репутация: 0
Статус: Offline
Теперь попробую сформулировать основные требования к физическому движку в случае с Alpha Hole.

  • 1) Обноружение столкновений с "логической точки зрения".
    Под этим я понимаю реакцию логической части объектов на столкновения, например: взрыв ракеты при столкновении с другим объектом, стыковка корабля - станции при их соприкосновении в соответствующих точках и т.п.

  • 2) Обнаружение столкновений с физической точки зрения. Это то, о чём я писал в предыдущем посте ( т.е. моделиррвание Ньютоновской физики в части реакций на столкновений)

    В принципе, оба типа обнаружениня столкновения можно объединить. Основное их отличие в реакции на событие столкновения

  • 3) Моделирование Ньютоновской физики по части воздействия сил на объекты, их масс и т.п.
    Это что-то вроде обработки следующей ситуации: У нас есть корабль с массой m с движком, котрый обеспечивает тягу с силой F1. Есть у нас ещё поворотные движки, со своей тягой F2 и т.п. Необходимо найти линейную и угловые скорости, при этом учитывая положение двигателей относительно корабля

Я думаю что реализация всей этой кухни штука достаточно сложная, так что PandaODE достаточно неплохой выбор, IMHO
 
VenomДата: Суббота, 14.02.2009, 19:30 | Сообщение # 9
Рядовой
Группа: Администраторы
Сообщений: 10
Репутация: 0
Статус: 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.

Жду комментариев smile

 
BlackCatДата: Воскресенье, 15.02.2009, 00:40 | Сообщение # 10
Admin
Группа: Администраторы
Сообщений: 38
Репутация: 1
Статус: Offline
А если враппер дописать? Вроде ж исходники открытые.
 
VenomДата: Воскресенье, 15.02.2009, 17:17 | Сообщение # 11
Рядовой
Группа: Администраторы
Сообщений: 10
Репутация: 0
Статус: Offline
Это наверное проще, чем ковырятся в исходниках Panda3d, но всё же требует большой систематической работы. Только представь себе, что надо каждую функцию переработать, что бы она возвращала нужное значение и т.п.
Но даже не это главная проблема, как мне кажется, ведь в принципе можно написать свой враппер над теми частями PythonODE, которые нам нужны. Единственной задачей этого враппера будет трансляция типов PythonODE в типы Panda3d. Но тут возникает (наверное) проблема потери производительности. Всё же лучше, IMHO, производить подобные преобразования на уровне С или C++ кода. где у нас есть указатели и прочие штуки... Здесь то мы опять возвращаемся к тому от чего пришли.
Хотя, если я не прав, и особых потерь в производительности не будет, то это очень хорошая идея.
 
09thДата: Среда, 18.02.2009, 12:51 | Сообщение # 12
Рядовой
Группа: Проверенные
Сообщений: 15
Репутация: 0
Статус: 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
Репутация: 1
Статус: Offline
Естественно, что предполагается наличие "компенсаторов", но все равно прицел предполагается сбивать после выстрела. smile Причем будет скилл, который уменьшает "уход" прицела. Причем скорее всего скилы будут для каждого вида оружия свои, чтобы жизнь малиной не казалась. smile В принципе это можно реализовать совершенно без применения физики. Так же как и инерцию. Так же как и полет снарядов. Т.е. чисто случайная величина умноженная на коэффициент точности оружия и умноженная на уровень скила. Ну что-то типа такого.
А для компенсации расхождений применяется старый добрый ассемблеровский метод - дроби все десятичные, считаются с одинаковой точностью без округления. И передавать только сверочно-компенсационные коэффициенты.
 
09thДата: Среда, 18.02.2009, 15:06 | Сообщение # 14
Рядовой
Группа: Проверенные
Сообщений: 15
Репутация: 0
Статус: Offline
Это всё реализуется без использования физики. Зачем стрелять из пушки по воробьям, особенно если эта пушка может оторвать руки владельцу?

Ага, ты собираешься переписать ODE? ))))

Для прекращения споров - попробуйте локально создать две одинаковые физические системы ODE и синхронизировать их с минимальной передачей информации между ними и компенсацией глюков, если это получится и не отобьёт охоту, то респект вам и вечная уважуха

 
VenomДата: Среда, 18.02.2009, 18:22 | Сообщение # 15
Рядовой
Группа: Администраторы
Сообщений: 10
Репутация: 0
Статус: Offline
2 09th
Хм... Доходчивое объяснение, пробовать реализовать синхронизацию, во всяком случае, желание отбило smile
Надо "переварить". А что такого творится в Хало по сети ? ( будет хороший пример )
 
Форум » Обсуждение игры AlphaHole » Обсуждение движка игры » Физика Unity3D (Особенности и плюшки физики Unity3D)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright MyCorp © 2024
Сайт управляется системой uCoz