Добавлен , опубликован

25.05.2014

день пропущен в связи с выборами

26.05.2014 - 28.05.2014

пропущены из-за высокой загрузки на работе

29.05.2014

  • реализован прототип выгрузки фрагментов карты на диск

Заметки

Прототип дико тормозит и засирает диск, но работает. Было бы странно ожидать чего-то другого от практически нативной сериализации, хранения каждого фрагмента отдельным файлом и принудительной выгрузки фрагментов сразу за границей камеры.
На очереди оптимизация работы с диском и интеллектуальная выгрузка фрагментов карты по приоритетам.
Что касается оптимизации работы с диском - в первую очередь это собирание в один большой файл множества фрагментов карты, сжатие данных и хитроумные алгоритмы поиска нужных фрагментов.
Чуть подробнее про выгрузку фрагментов карты там
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
24
10 лет назад
0
Надеюсь мне простят этот небольшой абуз, призванный противодействовать исчезновению ресурса из ленты в никуда после ухода с первой страницы.
0
10
10 лет назад
Отредактирован ZLOI_DED
0
Ну ты блин даёшь... Столько заморачиваться над этим... ты же игру сделать не успеешь. Делай чанки больше, клади их в один файл через байтовую запись команд (т.е. вначале хедер, чтобы идентифицировать карту, потом - команда (1byte) и параметры). Не бери в голову все эти свои приоритеты - ни к чему хорошему это не приведёт. Вот храни в памяти список id или координат сохранённых чанков (чтобы каждый раз не загружать). Вот ты загрузил чанк в память, как только игрок из него вышел - проверяй его на наличие в этом списке и если его там нет - добавляй туда и на диск. Соответственно, те что за n-чанков - просто удаляй из памяти, а когда оно потребуется (а требоваться оно должно не при появлении в границе обзора, а за n-чанков до этого) - загружай с диска, но не удаляй. Вот и всё.
1
24
10 лет назад
1
ZLOI_DED, не переживай, большая часть концепций и алгоритмов уже продуманы и часть даже расписана на бумаге. Просто все делается шаг за шагом и постепенно улучшается - вчера был прототип, едва справляющийся со своими функциями, а дальше его модули будут постепенно заменяться на нормальные.
Делать чанки больше нельзя по нескольким причинам, в первую очередь это связано с особенностями передачи данных на GPU, но не только. Вместо этого в один файл будет записываться много чанков - в начале таблица смещений, по которой можно найти нужный чанк, а дальше сами чанки. Для начала сойдет, а потом надо будет заменить на еще более интересную штуку, слегка похожую на виртуальную файловую систему.
А вот хранить список сохраненных чанков это уже немного лишнее - карта ведь бесконечная и список этот будет расширяться до бесконечности - есть смысл хранить только список загруженных чанков и флаг наличия в них изменений чтобы не выгружать на диск чанки, которые не изменились в сравнении с сохраненной версией.
Что касается создания радиуса вокруг игрока, в котором хранятся загруженные чанки это мало чем принципиально отличается от видимых камерой чанков, если только не заниматься загрузкой-выгрузкой в отдельном потоке - тогда действительно имеет смысл хранить буфер чанков вокруг области видимости чтобы не тормозить передвижение камеры на время загрузки новых чанков.
Ну и напоследок - зачем нужна приоритезированная выгрузка чанков? Ради возможности иметь работающие машины или еще что-то, требующее наличия загруженного чанка на большом расстоянии от игрока. Например, представь себе вагонетку, которая ездит по рельсам и перевозит грузы. Если выгружать все, что слишком далеко от игрока, то вагонетка уткнется в край и просто остановится до тех пор, пока не будут загружены чанки дальше, а если в наличии будет интеллектуальная система выгрузки чанков, то для вагонетки будут загружаться чанки по пути ее следования и если вагонеток по этому пути будет ездить много и часто, то система не будет пытаться выгрузить эти чанки без крайней необходимости. Аналогично для любых других действий, происходящих на границе загруженной области - принудительная выгрузка всего, что находится вне области приведет к загрузке-выгрузке активных чанков на границе каждый такт до тех пор, пока не закончится процесс, требующий загрузки дополнительных чанков или не выгрузятся все чанки, связанные с этим процессом (тогда процесс будет заморожен и возобновится после загрузки).
0
33
10 лет назад
Отредактирован Кет
0
Ну и напоследок - зачем нужна приоритезированная выгрузка чанков? Ради возможности иметь работающие машины или еще что-то, требующее наличия загруженного чанка на большом расстоянии от игрока. Например, представь себе вагонетку, которая ездит по рельсам и перевозит грузы. Если выгружать все, что слишком далеко от игрока, то вагонетка уткнется в край и просто остановится до тех пор, пока не будут загружены чанки дальше, а если в наличии будет интеллектуальная система выгрузки чанков, то для вагонетки будут загружаться чанки по пути ее следования и если вагонеток по этому пути будет ездить много и часто, то система не будет пытаться выгрузить эти чанки без крайней необходимости.
Да, я вот в Майнкрафте как-то делал электрички — обнаружил, что там эта система работает плохо. На определённом расстоянии механизмы начинали рассинхронизироваться.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.