Создание среды MMO для 30 000 пользователей – Веб-клиент (на Unity)


В предыдущем посте мы упоминали, что благодаря бесплатным кредитам от облачной платформы, мы смогли создать виртуальный мир, способный вместить до 30 000 пользователей. Для деталей о серверной части обратитесь к моему предыдущему сообщению. В этой статье я сосредоточусь на проблемах, с которыми мы столкнулись в ходе этого процесса, и как мы их решали.

Как упоминалось в посте о сервере, эксперимент оказался неудачным. Однако, чтобы заинтересованные разработчики могли оценить результаты после реализации этих решений, мы продолжим поддерживать работу виртуального мира до 28-го числа (после окончания тестирования).

Далее я поделюсь проблемами, с которыми мы столкнулись, и нашими мыслями о будущем решении этих вопросов. Поскольку наша команда изначально специализировалась на 2D играх, нам было довольно непривычно работать с 3D разработкой, что привело к ряду начальных ошибок.

В ходе эксперимента мы столкнулись с следующими основными проблемами:

  • Некачественный дизайн карты привел к тому, что после некоторого времени работы системы в едином поле зрения оказывалось более 5000 персонажей.
     
  • Быстрое создание и удаление объектов, с которым не справлялась система сбора мусора.
     
  • Слишком много объектов на одном экране приводило к тому, что процессор не мог обработать все расчеты скелетной анимации.
     
  • Обработка ввода с клавиатуры через Unity Emscripten, которая блокировала срабатывание событий WebSocket.
     

Проблема 1: Некачественный дизайн карты Изначально мы планировали создать карту с значительными изменениями рельефа в простой среде, чтобы дать пользователям ощущение 3D пространства. Однако мы упустили из виду, что для роботов была разработана только простая логика, из-за чего со временем они начали сгруппироваться в каньонных зонах территории.

Кроме того, наши роботы использовали независимую симуляцию реальных соединений, что означало, что они не могли координировать свои действия или избегать друг друга. Наш сервер и клиент использовали 9-сеточный синхронизированный диапазон видимости. В этой версии мы зафиксировали более 5000 персонажей в едином поле зрения, что значительно превышало возможности отображения веб-платформы.

Сначала мы хотели сохранить статус-кво и достичь наилучшего результата, где сгруппировка все же могла происходить, но дисплей оставался функциональным. Мы начали внедрение LOD (уровень детализации), сокращение полигонов, оптимизацию скиннинга, динамическое изменение дистанции отображения в зависимости от производительности, корректировку анимации и т. д. Однако мы не учли, что возможности оптимизации WebGL ограничены по сравнению с другими платформами.

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

Будущие планы: Мы планируем в будущем внедрить GPU Skinning для снижения нагрузки на CPU. Это связано с тем, что с развитием ИИ мы наблюдаем значительное увеличение производительности на GPU в новых мобильных процессорах. Кроме того, мы планируем дальнейшее улучшение динамических настроек, объединяя решения на стороне сервера и клиента на основе отношений игроков и веса игроков в сцене. Это поможет определить, должны ли другие игроки быть отображены.

Таким образом, большинство игроков смогут наслаждаться игрой, не влияя на свой игровой опыт, решая проблему разных серверов для друзей в традиционных серверных технологиях и создавая естественный и гладкий опыт социального взаимодействия.

  • +8
  • M_O_N_N_A

Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.