lord-server / lord

Minetest Lord Of The Rings Game
https://lord-server.ru/
16 stars 18 forks source link

MapGen: speed up #1450

Open alek13 opened 2 months ago

alek13 commented 2 months ago

Замеры генерации показывают, что сам наш генератор отрабатывает очень быстро. И вся проблема начинается именно тогда, когда сгенерённый кусок отправляется в движок на сохранение (voxel_manipulator:write_to_map(data)). Именоо на это уходит подавляющее большишство времени.

Судя по всему, это происходит потому, что во время генерации на стороне Lua, в этот генерящийся чанк идут изменения на стороне C++, соответствено движку в момент сохранения приходится мерджить все эти кусочки и как-то резолвить конфликты, на что и уходит огромное количество времени.

Откуда изменения, если он только-только генериться ? Ребята из lott, сами подложили себе свинью (ну и нам заодно), но всё равно им спасибо за такой интересный прототип игры. Дело вот в чём: сам генератор внутри вызывает множество minetest.add_node() (например, при генерации деревьев), что уходит на сторону плюсов и изменяет чанк прямо во время генерации на стороне Lua.

Задача: Вычистить все подобнве обращения и использовать для записи только массивы, полученные от движка через voxel_manipulator:get_data(), voxel_manipulator:get_param2_data() или voxel_manipulator:get_light_data()

Blocked by:

Attention: !! low-priority !!