Страница 1 из 1

Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 27 сен 2019, 20:17
IvanCPDev
Доброго времени суток.
Я новичок. Делаю мультиплеер с открытым миром.

Столкнулся с довольно неприятной проблемой. Карта довольно большая, выходит за 10000 координаты. Только вот все меши после 10000 координаты начинают как-то дрожать, дергаться. Тоже самое с спрайтами. Объясните почему так и как решить данную проблему? Буду очень благодарен. ;)

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 27 сен 2019, 20:27
waruiyume
Проблема сусолилась несчётное количество раз. Фундаментально её решить нельзя, но есть несколько костылей, которые по большей части сводятся к передвиганию мира, когда игрок далеко от центра системы координат.

https://yandex.ru/search/?text=site%3Au ... 0333172817

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 27 сен 2019, 20:39
IvanCPDev
Только как это реализовать под мультиплеер? Ведь это все надо синхронизировать.

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 27 сен 2019, 21:01
Jarico
IvanCPDev писал(а):Только как это реализовать под мультиплеер? Ведь это все надо синхронизировать.


Смотря какая игра и для скольки игроков мультиплеер

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 27 сен 2019, 21:11
waruiyume
Пусть сетевая абстракция живёт в несмещённом пространстве и работает с double, а клиентская просто прибавляет или вычитает смещёние при переходе в сетевое пространство и обратно.

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 28 сен 2019, 11:08
IvanCPDev
А что если весь мир, включая игроков засунуть в пустой game object, брать координаты игрока и изменять координаты пустышки на такие же но только с отрицательным значением. Таким образом глобальные координаты игрока остаются на нуле и это не мешает игровому процессу. А вот синхронизацию для перемещения "пустышки" можно не добавлять.

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 28 сен 2019, 15:53
Woolf
IvanCPDev писал(а):А что если весь мир, включая игроков засунуть в пустой game object, брать координаты игрока и изменять координаты пустышки на такие же но только с отрицательным значением. Таким образом глобальные координаты игрока остаются на нуле и это не мешает игровому процессу. А вот синхронизацию для перемещения "пустышки" можно не добавлять.


Теперь дрожать будет уже весь мир ) Не обманете вы математику..

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 28 сен 2019, 17:31
IvanCPDev
Woolf писал(а):Теперь дрожать будет уже весь мир ) Не обманете вы математику..


Ну, не думаю что от слишком отдаленных объектов будет заметно хоть какое-то дрожание. А отдельные объекты максимум будут в километре от зоны видимости игрока, на таких расстояниях дрожаний быть не должно.

Re: Дрожат меши и спрайты на дальних координатах

СообщениеДобавлено: 28 сен 2019, 20:43
Woolf
IvanCPDev писал(а):
Woolf писал(а):Теперь дрожать будет уже весь мир ) Не обманете вы математику..


Ну, не думаю что от слишком отдаленных объектов будет заметно хоть какое-то дрожание. А отдельные объекты максимум будут в километре от зоны видимости игрока, на таких расстояниях дрожаний быть не должно.


Начало падения точности float разное на разных платформах, но, приблизительно, начинается где-то на 10000+
Вот на основании это и надо делать игровые локации, оптимизируя геймплей так, чтобы не было столь удаленных объектов от камеры.
Ставить камеру в центр и ограничить дальность её видимости - имхо, наилучшее решение. Так все делают.
Если речь о космосе, то планеты, большие звезды рисовать прямо на скайбоксе или же разместить их недалеко от комеры и прорисовывать без буфера глубины, чтобы они всегда были на заднем фоне. Также, в космосе, хорошо помогает уменьшение масштабности, к примеру, ваш корабль километровой длины, а по факту - один юнит, соответственно и скорость его будет не 1000м/с а 1юнит/с..
Но если вам надо симулятор реального космического пространства, тогда обсчитывать все движения в double, и приводить каждый кадр в пространство камеры, с видимыми угловыми размерам и так далее. Хотя, для межзвездных пространств, и double не хватит ))