Четверг, 28.11.2024, 06:54 Приветствую Вас Гость | RSS
Alpha Hole - MMOFPSS - онлайн космосим
Физика Unity3D - Страница 2 - Форум
Физика Unity3D
| |
09th | Дата: Среда, 18.02.2009, 18:54 | Сообщение # 16 |
Рядовой
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Ну например, после взрыва машину кидает в воздух по всем законам физики, только вот во время красивого полёта она вдруг неожиданно телепортируется в другое место, просто потому что сервер сообщил, что на самом деле он считает, что машина полетела по другой траектории.
|
|
| |
Venom | Дата: Среда, 18.02.2009, 21:00 | Сообщение # 17 |
Рядовой
Группа: Администраторы
Сообщений: 10
Статус: Offline
| Насколько я понимаю, выход из этой ситуации в том, чтобы юзать физичесий движок (свой или сторонний), у которого результаты будут почти полностью совпадать при рассчётах на разных компьютерах? Это позволяет считать физику и на клиенте (за счёт отсутствия большого разброса в результатах, момент синхронизации будет выглядеть более приятно, даже если и будет более редким) и на сервере (движок проще -> меньше вычислительных потребностей, чтобы обсчитать все объекты). Насколько я понимаю, разработчики Halo, посчитали приемлимыми такие лаги ? Или всё упирается в "узкий" канал, который не позволяет часто проводить синхронизацию ? Хотя, так или иначе помимо проблемы с высоким траффиком, при использовании движков вроде ODE, возникает ещё проблема, с требованиями к серверу, который в этом случае должен быть мега крутым, так что для ММО это действительно не самый удачный вариант ... А может кому-нибудь в голову придёт ноу-хау ? )
|
|
| |
09th | Дата: Четверг, 19.02.2009, 00:27 | Сообщение # 18 |
Рядовой
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Да. Нужно использовать движок/рассчёты с однозначно предсказуемым результатом, что позволит делать проверки сервером не слишком часто. Я считаю, что в нашем случае наиболее приемлимый вариант - это фейк, состоящий из пары-тройки формул, ведь у нас не гоночный симулятор. Примерно как-то так: Корабль имеет массу, угловую и линейную скорости. Считаем, что центр масс находится в геометрическом центре модели для упрощения рассчётов. Скорости постепенно затухают - считаем это компенсационной системой. Маршевые и маневровые двигатели добавляют линейную, либо угловую скорость по соответствующим осям на определённое значение в единицу времени (зависит от мощности движка и массы корабля) до получения определённого максимума по нужной оси. Попадание снаряда, либо иное физ воздействие просто добавляет вектора к соответствующим скоростям, которые считаются в зависимости от точки попадания снаряда и вектора вхождения. А вообще, скорее всего, это всё стоит считать на сервере. От клиента передавать только управляющую инфу из разряда включил маршевые двигатели, выключил, запустил ракету. С сервера принимать информацию о текущих скоростях, положении и ускорении. Х.з. чего там считали разработчики хало, я в их диз док не заглядывал ). Факт в том, что при работе по сети из-за задержек в передаче данных состояние физической системы на разных машинах во время поступления информации о воздействии будет разным, в результате чего реакция на это воздействие так же будет различаться. Поэтому, чем проще и предсказуемей система, тем проще будет компенсировать эти различия.
Сообщение отредактировал 09th - Четверг, 19.02.2009, 00:46 |
|
| |
BlackCat | Дата: Пятница, 20.02.2009, 18:23 | Сообщение # 19 |
Admin
Группа: Администраторы
Сообщений: 38
Статус: Offline
| Ну вы прям мои мысли читаете. Единственное уточнение - скорость снижается со временем крайне незначительно (сопротивление среды в межпланетном пространстве довольно мало, хотя и присутствует при скоростях выше 3-ей космической). И снижение это экспоненциальное. Т.е. чем выше скорость, тем больше снижение скорости. В принципе - можно и линейную функцию использовать, пользователь вряд ли заметит. По поводу применительности физики - если использовать реальную Ньютоновскую физику, то, думаю, сервер точно помрет уже на 50-ом клиенте, если не раньше. Да и играть в это никто не будет, кроме нескольких фанатов. Можете глянуть Orbiter. Штука прикольная, но не играбельная практически. Ибо пользователь жаждет двигаться по прямой, а не по орбитам... Это как минимум. Плюс компенсация маневров, точная дозация импульсов... По ходу полный Ньютон игру убьет. Поэтому нужно что-то более удобовариемой и достаточно быстро рассчитываемое.
|
|
| |
|
Copyright MyCorp © 2024 |
Сайт управляется системой uCoz |
|