DEV DIARY №10 - ВИЗУАЛ РАСКОПОК, РЕФАКТОРИНГ И ОПТИМИЗАЦИЯ ОВЕРМАЙНДА

06 Янв 2021
Автор: Oleg Simukov


Визуал раскопок

Грунт на подземном уровне занимает >80% процентов игрового экрана, так что он должен круто выглядеть.

Оптимизация этого элемента игры, как занимающего весь экран, тоже критически важна.

Таким образом требования к визуалу раскопок:

  • Оптимизация
  • Детализированность
  • Отсутствие ограничений на размер уровня
  • Отображение процесса раскопки (разрушаемость)
  • Удобное редактирования (желательно инструментами 3Д пакетов) и процесса раскопки, и невыкопанного состояния.

Были определены три подхода:

Воксели

  • Есть возможность оптимизировать
  • Неплохая детализация (хотя визуал достаточно «мультяшный»)
  • Практически без ограничений на размер мира
  • Отлично разрушаются
  • Нельзя редактировать извне
  • Процедурный меш
  • Оптимизация хорошая, но в руках программиста полный контроль, чтобы сделать ее отличной
  • Высокая детализация
  • Нет ограничений по размеру
  • Код разрушения писать руками или вставлять разрушаемый квадрат другого рода
  • Можно как редактировать как угодно и откуда угодно

Инстансы

  • Высокая оптимизация
  • Высокая детализация, но заметен шов и элементы сами по себе квадратные
  • Нет ограничений на количество
  • Для разрушения нужен шейдер или вставлять кусок другого рода, но шов никуда не денется
  • Можно редактировать модель, и если написать шейдер — редактировать и другие параметры

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

Рефакторинг

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

Мы приняли решение четко описать задачи каждого узла и последовательно переписать их в чистовой проект.

Четкая картина всей системы в целом и понимание узлов в частности открыли нам путь к оптимизации вычислений, многие из которых мы смогли и вовсе исключить из алгоритмов.

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

В двух словах от Олега:

Все что мы написали криво и неоптимизированно, мы с ясной картиной переписываем в чистовик и грязные куски отваливаются.

Оптимизация овермайнда

Градиент на полу давал информацию о профессии, которая более актуальна в этой клеточке (например копать, или носить), но дальше требовались вычисления, какую именно работу выбрать (какую именно клетку ехать пилить).

Если бы бот, глядя под ноги, сразу мог узнать куда ему ехать, это бы радикально упростило расчеты. Идея существовала давно.

В ходе рефакторинга овермайнда мы решили упростить систему рисования градиента, но увеличить количество слоев.

Полученная прозрачность позволила нам ввести так же механизмы для оптимизации расчетов: «незначительные» изменения приоритетов мы можем не отражать на градиенте сразу и это радикально увеличивает производительность.

Мы сделали овермайнд чище, производительнее и устранили систему выбора задач — рассадник большого количества багов.

Комментарии

Сообщения не найдены

Написать комментарий

Recent posts