Подведу итог по работе со сценами.
Для начала нужно убрать всё, что не требуется.
Поскольку проект собирается под WebGL, каждый лишний объект в сцене превращается в прямую потерю ресурсов. Браузер и без того ограничен, поэтому первый шаг - очистить сцену от всего, что не участвует в игровом процессе.
Когда сцена стала минимальной, я двинулся по пунктам, которые дают наибольший выигрыш
Mesh Combine
Мелкие меши объединил в один большой. Количество draw calls упало сразу, и батчинг заработал заметно лучше. Для эффективной работы я придерживался правила: 1 материал - 1 сабмешь = 1 батч.
Атласы текстур
Все мелкие изображения сложил в один большой атлас. Количество материалов сократилось, переключений шейдера стало меньше, кадры стали выдаваться ровнее.
LOD’ы
Для объектов, которые находятся вдали от камеры, добавил радиус видимости. Рядом видна полная геометрия, вдали - нечего - экономия полигонов ощутима.
Occlusion Culling
Теперь объект не рисуется, если за стеной или за поворотом трассы. На извилистых участках трассы прирост производительности оказался наиболее заметным.
Статика
Часть окружения пометил как статическую которую не попала под комбайн. Движок заранее просчитывает для неё оптимизированные данные, и GPU тратит меньше времени на каждый кадр.
Тени
В заключении отключил все тени. В будущем либо сделаю их упрощенными либо разделю на разный пайплайн графики.
Полученный результат не претендует на идеал, но для WebGL-версии на текущем этапе - вполне достаточный запас производительности. Можно переходить к следующим задачам, не боясь вылезти за лимиты браузера 🚀
#game #optimization
Post #47
127
- ❤ 3
- 🔥 1