HTML5 воксельная игра с низкой производительностью для длинных циклов, таких как создание блоков и освещение - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над игрой с использованием Three.js (https://voxelplace.com/)

В настоящее время все выполняется в одном потоке, и я просто делю работу на небольшие пакеты, чтобы пользовательский интерфейс мог обновляться между функциями. Использование цикла while и setTimeout.

Производительность на Chrome довольно хорошая, но на Firefox она очень низкая. Функции (то есть создание освещения для блока) занимают более 16 мс, поэтому пользовательский интерфейс не может обновляться вовремя. И это на высоком конце ПК.

Я бы хотел улучшить производительность Firefox и, в конечном итоге, сделать это на мобильных устройствах.

Насколько я знаю, у меня есть 2 варианта:

  • разделен на веб-работников

  • разделение функций на более мелкие пакеты, чтобы пользовательский интерфейс мог обновляться медленнее машины / браузеры. То есть используйте цикл while и setTimeout, чтобы разрешить обновления пользовательского интерфейса между построением освещения одного блока

Полагаю, я мог бы также уменьшить размер чанка, но я уже на 16x16x16. Может быть, я также просто использую неэффективный код, и если я исправлю это, производительность будет лучше?

Я играл с веб-работниками, но я немного озадачен тем, как справляться с определенными вещами. Например, если я хочу построить освещение для 1 фрагмента, мне нужна информация об освещении и воксели из этого фрагмента и всех соседних фрагментов. Должен ли я копировать все это веб-работнику для каждого куска каждый раз, когда я хочу создать освещение? Это не похоже на отличное решение.

У меня нет кода для обмена, но карта исходного кода включена, поэтому вы можете прочитать весь код, если кому-то интересно.

Буду признателен за любые идеи.

...