Pull to refresh

Comments 27

Видел репост вашей новости вчера в ВК-группе Unity. Красивая игра получилась. Долго ли пришлось всё делать в одиночку?
с конца февраля по середину марта отпуск был?)) (активность резко выросла)
Спасибо за статью. Очень интересно и полезно (по крайней мере, для меня).
По поводу оптимизации согласен с автором: оптимизацию производительности действительно лучше выполнять на последнем прототипе. Просто следующий прототип может сильно отличатся от предыдущего и проводить оптимизацию производительности каждый раз – большая потеря времени. Но что если определённая оптимизация позволит ускорить процесс создания самого прототипа?
А в целом, автор молодец! У меня вот не получается работа с Unity. Видимо, без команды энтузиастов не обойтись.
Спасибо! Конечно, разумная и целесообразная оптимизация всегда будет полезной.
Не даром Кнут сказал: «Преждевременная оптимизация — корень всех бед!».
Очень часто начинающие программисты страдают перфекционизмом (тот редкий случай, когда это больше плохо, чем хорошо). Это и побуждает тратить просто огромные усилия на оптимизации, забивая на прогресс и простоту. Я лично больше года себя тренировал, чтобы только отказаться от побуждений вроде «чета тормозит, вот щя я тут подпилю и будет нормально!». Лучше это время потратить на исправление багов и прогресс разработки.
Первым делом надо запустить Profiler. К сожалению, данная функция есть только в pro-версии юнити.
А в какой версии Unity вы делаете / делали проект?
Начинал в 4.6, затем был довольно простой перенос в 5-ку. Сейчас последняя версия 5.3, это обоснованное требование издателя.
Начиная с 5й версии Unity для использования профайлера не требуется pro версия.
Мне ещё интересно — вы подписку оформляете или one-time покупку лицензии? Какой вариант по вашему мнению наиболее удобный в плане затрат / других параметров?
Да, я про это забыл. Обновлю текст, спасибо! Оптимизацией занимался на 4-й версии, была лицензия с работы. Тип зависит от проекта. По моему мнению для большинства инди-проектов вполне хватает бесплатной лицензии. Кроме того, часто финальной сборкой занимается издатель.
Можно, данный метод хорош для статического окружения. Но в данной ситуации это оказалось неприменимым, я не нашел способ запечь тень от одного объекта в префабе.
А в чём вы делали 3D-модели? Блендер, да и 3D Max, я думаю, могут рендерить объект с тенью, не рендеря при этом фон.
Все модели делал в Unity из примитивов и использовал материалы для раскраски. Увы, редакторы пока не освоил.
Все модели делал в Unity из примитивов и использовал материалы для раскраски.

Забавно. А как же тогда получались более сложные формы — корона, звёзды, покерная фишка? Неужели в Юнити есть редактор?
А 3D-программу какую-нибудь советую освоить, это довольно просто, а возможности открываются гораздо шире.
Это пара импортированных ассетов с более сложными примитивами. +есть ассет для редактирования мешей.
Итог — увеличение скорости на 20% при появлении незначительных артефактов (при наложении и наслоении теней)

А что за артефакты появились? Вы говорите про то, что участки, где одна тень наложилась на другую, становятся ещё темнее?
Да, наложение теней друг на друга. И еще наложение тени-картинки на объемный объект (в моем случае на автомобили и другие здания).
а какая формула смешивания используется при наложении теней?
Никакой, каждая тень дампилась в PNG с полупрозрачностью.
Давно хотел сделать ситибилдер+кликер. Но идея ничего не стоит как говорится) Удачи с проектом!

Интересно было бы глянуть код кодогенератора!

ЗЫ В закладках нашел еще одну статью(eng) про оптимизацию для мобилок.
Спасибо! Код низкоуровневый и запутанный, проще алгоритм рассказать. По сути передается лишь одно число — код команды. Это 5 бит. Остальные биты — рандомный payload + хэш этого payload и команды. Таким образом сделана защита от модификации кода и повторной генерации одинаковых кодов. Длина кода 30 бит, что проецируется на пятизначный код с усеченным алфавитом (цифры и заглавные буквы без O и I).
Далее последовательность симметрично шифруется индексом получателя, чтобы только он мог дешифровать код. Дополнительно используется текущая дата как ключ, чтобы у кодов был срок действия. С этим все немного сложнее, но суть в том, чтобы вчерашний код нельзя было расшифровать завтра.
При всем этом механизм нельзя назвать безопасным, хотя безопасность может быть выше с увеличением длины кода. В игре есть таймауты и лимиты на случай перебора. Кроме того, на механизм завязаны лишь незначительные транзакции (можно отправлять мало ресурсов), которые бессмысленны при большом прогрессе в игре.
За статью благодарствую!
Во вторых, суммарное количество вершин в общем не должно превышать 900


А вам нужно все таки лучше изучить как работает батчинг и какие у него ограничения. А так же в чем разница между Dynamic Batching и Static batching.

Указанные вами данные относятся к Vertex Data и относятся к Dynamic batchin (которые включают в себя не только Mesh Vertex, а и UV Vertex(а также UV2, UV3, UV4 и сколько их есть), Vertex Color Data, Skin и прочее что присутствует в модели). В реале же стоит рассчитывать на не более 300 вершин меша.

Статический же батчинг ограничен 2 в 16 степени (65536). На сколько мне известно это хардварное ограничение.

К тому же за счет того что статически батчинг ломает VBO — все комбайны становятся уникальными — то это раздувает размер билда до невообразимых высот. Используйте Static batching utility (описание найдете в script reference).
Хотя я с мобильными платформами не работал. Могу и ошибаться по поводу ограничений батчинга.
Ведь делать прототипы моделей в Unity гораздо удобнее, чем изучать моделирование. Если конечно, у вас в команде, нет моделлера, как у меня. У меня вообще никого не было).

Ccылка
на самом деле эту модельку можно еще как минимум оптимизировать в 1.5-2 раза (без потери качества) (зная маленькие азы 3д редактора, того же блендера).
Статистика показывала около 600 draw call (после работы автобатчинга) и 100.000 треугольников. Для сравнения — на текущий момент для сферической игры в вакууме рекомендуется иметь до 100 draw call и до 30.000 треугольников.

Я эту информацию 3 года назад слышал, сейчас слабые девайсы спокойно и 80к треугольников обработают)
К примеру возьмем самый дешевый телефон, основные параметры смотрим, до 60$, Android 4.0 + (меньше смысла нету, уже 4.0 вырезают с маркетов)
Вот к примеру этот, видеопроцессор Mali 400 (mp2) согласно открытым источникам Видеопроцессор на обычной рабочей частоте (275mhz) может обрабатывать 23млн треугольников в секунду. 23 000 000/30 = 766 666 треугольников в кадре (при частоте 30 кадров в секунду), турбо частота разгоняет до 400mhz (там еще больше будет обрабатывать в секунду). Конечно числа эти сугубо теоретические, есть много других факторов влияющие на производительность. но даже если брать в расчет что в полевых условиях цифры будут в 2-3 раза меньше, и брать расчет на бюджетные девайсы 3летней давности. думаю лимит в 80к-100к (по части треугольников) самое то. Лично запускал на бюджетном девайсе с Mali 400 (mp1) 70к спокойно тянуло, основная нагрузка была из за реалтайм теней-освещения, а так же шейдеров.
p.s Извиняюсь за оффтоп выше) путаю перенос строк и отправку текста на хабре)
Статья очень интересная и несомненно полезная получилась, особенно про опыт с издателем и оптимизацию кода. Вообщем благодарю за статью.
Sign up to leave a comment.

Articles