Новый свет в Зомботрон
Очередной забег разработки Зомботрона дался мне не легко. После возврата к работе над проектом я столкнулся с некоторыми техническими проблемами.
Сторонняя библиотека которую я использовал долгое время для 2D света в Unity — устарела и более не поддерживается. Хм, чего тут такого? Но, проблемы имели место быть и они накапливались.
Платформы совершенствуются, выходят новые версии мобильных устройств, меняется аппаратное API для GPU и те команды шейдеров что ранее работали хорошо — в новых версиях начинают работать иначе или не работать вовсе. Таким образом, я не мог переключится на новые версии Unity потому что освещение в игре ломалось или работало не правильно, да и на старой версии Unity тоже бесконечно оставаться нет возможности. В какой-то момент старая версия Unity перестает поддерживаться и на ней не возможно собрать новые версии игры. Google Play постоянно повышает минимальный уровень требуемого API для своих приложений, что рано или поздно исключает возможность собрать актуальную версию в магазины приложений на старых версиях Unity и необходимо обновлять движок...
Ой... Что это за поток технической информации!? Спросите вы... А это лишь очень краткий пересказ того, с чем повседневно приходится сталкиваться разработчикам игр.
Мне пришлось переделывать все освещение в игре чтобы отказаться от устаревшей библиотеки света и переключится на новый более простой аналог освещения в игре.
Я провел небольшое исследование. В новых версиях Unity с новым URP рендером наконец-то появился 2D свет! Звучит круто, но работает все еще не так хорошо как хотелось бы. Попытка перейти на новый рендер у меня не увенчалась успехом, так как игра сломалась во многих других местах — отвалились шейдеры для built-in рендера. Казалось бы починить их с новым Shader Graph не составит большого труда, но по факту официальная документация по Shader Graph и относительно свежие туториалы — уже устарели и не отражают реальной картины, а значит ремонт предстоит делать «методом тыка».
В общем, замерив производительность нового Unity 2D света и проведя эксперименты с фейковым светом, я решил отказаться от использования динамического света и сделать максимально простое и дешевое освещение. Да, игра потеряла немного в красочности, но не вооруженным глазом это совершенно не видно! А в качестве бонуса, производительность игры на Samsung Galaxy A10 выросла почти в два раза, с 35fps до 55fps.