волк выступает в цирке

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

Я немного улучшил свой импровизированный бенчмарк, теперь он отдельно тестирует все интерфейсные сущности и все эффекты постпроцессинга. Как я и думал, интерфейс на производительность не влияет. О чём я не думал, так это о том, что постпроцессинг тоже мало влияет на производительность: из всех эффектов только bloom давал заметную нагрузку, но и она была не так велика (прирост всего в 3-4 кадра, в отличии от освещения, которое давало 9).

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

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

Решил вместо источника освещения сделать полупрозрачную круглую плоскость, имитирующую свет от фонаря на земле.

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

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

И что бы вы думали? Делаю билд с новой системой замены освещения, скидываю на телефон, проверяю производительность - производительность упала ещё сильнее, чем была до этого. Это что, все мои утренние труды отправляются на мусорку?

Ещё немного покрутил параметры, удалил лишнее, сбилдил снова - нет, всё таки прирост производительности есть. Но не очень большой: где-то 4 кадра, в сумме 16-18 при высоких настройках графики и 20-24 при низких. Ну и помимо этого, игра жрёт 2% батареи в минуту. Это конечно мало для комфортной игры, но больше я даже и не знаю, что ещё можно оптимизировать.

Буду делать рендеринг в пониженном разрешении. Ради справедливости позволю игроку включать/отключать его в настройках. А ещё переносить ВСЁ из Update в корутины, даже то, что по-хорошему необходимо оставить в Update.

Вообще конечно снова глубоко позавидовал разработчикам игр для ПК - насколько же им проще и интереснее, наверное, делать игры. Сами посудите: у ПК почти что неограниченные мощности (по крайней мере, для инди-игр), так что вам подойдут любые ассеты, любые эффекты, можно вообще ни о чём не думать и ничего не оптимизировать (ну точнее, оптимизировать конечно надо, но в рамках очевидного).

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

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

Я в целом больше не удивлён, почему в сторах смартфонов одни простейшие головоломки и гиперказуалки. Если бы я только знал, сколько крови выпьет мне игра, я бы в жизни за такую задачу не взялся. Но откуда мне было знать?

2222