Оптимизация игр в Unity 5
Покупка
Издательство:
ДМК Пресс
Автор:
Дикинсон Крис
Перевод:
Рагимов Р. Н.
Год издания: 2017
Кол-во страниц: 306
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-432-8
Артикул: 712475.01.99
Доступ онлайн
В корзину
Ничто так не отпугивает игроков, как сбои при выполнении игры. Задержки при вводе, медленное отображение, физические нестыковки, подергивание, замирание и неожиданное аварийное завершение превращают игру в кошмар, и разработчики игр должны сделать все, чтобы этого никогда не происходило! Из этой книги вы узнаете, как выявлять и исследовать узкие места во всех основных компонентах движка Uoty3D. В каждом конкретном случае описываются способы идентификации проблем, порядок выявления их причин и ряд возможных решений. Издание адресовано разработчикам игр среднего и продвинутого уровня, имеющим опыт работы с Unity и языком С# и желающим повысить производительность своих приложений.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Крис Дикинсон Оптимизация игр в Unity 5
Chris Dickinson Unity 5 Game Optimization MASTER PERFORMANCE OPTIMIZATION FOR UNITY3D APPLICATIONS WITH TIPS AND TECHNIQUES THAT COVER EVERY ASPECT OF UNITY3D ENGINE BIRMINGHAM – MUMBAI
Крис Дикинсон Оптимизация игр в Unity 5 СОВЕТЫ И МЕТОДЫ ОПТИМИЗАЦИИ ПРИЛОЖЕНИЙ, ОХВАТЫВАЮЩИЕ ВСЕ АСПЕКТЫ РАБОТЫ С ДВИЖКОМ UNITY3D Москва, 2017
УДК 004.4'2Unity3D ББК 32.972 Д44 Дикинсон К. Д44 Оптимизация игр в Unity 5: пер. с англ. Рагимова Р. Н. – М.: ДМК Пресс, 2017. – 306 с.: ил. ISBN 978-5-97060-432-8 Ничто так не отпугивает игроков, как сбои при выполнении игры. Задержки при вводе, медленное отображение, физические нестыковки, подергивание, замирание инеожиданное аварийное завершение превращают игру в кошмар, иразработчики игр должны сделать все, чтобы этого никогда не происходило! Из этой книги вы узнаете, как выявлять и исследовать узкие места во всех основных компонентах движка Unty3D. В каждом конкретном случае описываются способы идентификации проблем, порядок выявления их причин и ряд возможных решений. Издание адресовано разработчикам игр среднего и продвинутого уровня, имеющим опыт работы с Unity и языком C# и желающим повысить производительность своих приложений. УДК 004.4'2Unity3D ББК 32.972 Copyright © Packt Publishing 2015. First published in the English language under the title “Unity 5 Game Optimization” – (9781785884580). Все права защищены. Любая часть этой книги не может быть воспроиз ведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но по скольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-78588-458-0 (анг.) © 2016 Packt Publishing ISBN 978-5-97060-432-8 (рус.) © Оформление, перевод, ДМК Пресс, 2017
Содержание Об авторе ................................................................. 9 Благодарности .........................................................10 О технических рецензентах ....................................... 11 Предисловие ...........................................................13 Глава 1. Выявление проблем с производительностью .....19 Профилировщик Unity Profiler ....................................................................................20 Запуск профилировщика ...........................................................................................21 Окно профилировщика ..............................................................................................25 Методы анализа производительности ........................................................................32 Проверка присутствия сценария ...........................................................................33 Проверка количества сценариев .............................................................................34 Сведение к минимуму изменений в текущем коде ...........................................35 Сведение к минимуму внутренних помех ...........................................................35 Сведение к минимуму внешних помех .................................................................37 Выборочное профилирование сегментов кода ........................................................37 Управление профилировщиком из сценариев ...................................................38 Нестандартное профилирование использования центрального процессора .......................................................................................................................40 Сохранение и загрузка данных профилировщика .................................................44 Сохранение данных профилировщика .................................................................45 Загрузка данных профилировщика .......................................................................48 Заключительные соображения о профилировании и анализе ...........................52 Освоение профилировщика......................................................................................52 Уменьшение шума ........................................................................................................53 Сосредоточение внимания на проблеме ...............................................................54 Итоги ......................................................................................................................................54 Глава 2. Приемы разработки сценариев .......................56 Кэширование ссылок на компоненты .........................................................................56 Самый быстрый метод получения ссылок на компоненты .................................58 Удаление пустых объявлений обратных вызовов ...................................................61 Не используйте методов Find() и SendMessage() ..................................................63 Статические классы .....................................................................................................65 Компоненты-одиночки ...............................................................................................67 Сохранение ссылок на существующие объекты ................................................71 Глобальная система обмена сообщениями ..........................................................74 Отключение неиспользуемых сценариев и объектов ............................................85 Отключение невидимых объектов .........................................................................85 Отключение отдаленных объектов ........................................................................86
Содержание Замена расстояния квадратом расстояния ...............................................................87 Избегайте извлечения строковых свойств объектов игры ..................................89 Метод Update, сопрограммы и метод InvokeRepeating ........................................91 Кэширование изменений компонента Transform ....................................................97 Ускорение проверки отсутствия ссылки на игровой объект ..............................98 Итоги ......................................................................................................................................99 Глава 3. Преимущества пакетной обработки ...............100 Вызовы системы визуализации ..................................................................................101 Материалы и шейдеры ...................................................................................................103 Динамическая пакетная обработка ............................................................................107 Атрибуты вершин .......................................................................................................108 Однородное масштабирование ..............................................................................109 Краткие выводы о динамической пакетной обработке .................................110 Статическая пакетная обработка ................................................................................111 Флаг Static ....................................................................................................................111 Требования к памяти .................................................................................................112 Ссылки на материалы ...............................................................................................113 Особенности использования статической пакетной обработки ................113 Краткие выводы о статической пакетной обработке .....................................115 Итоги ....................................................................................................................................116 Глава 4. Привнесение искусства ................................117 Аудио ....................................................................................................................................118 Загрузка аудиофайлов ..............................................................................................118 Форматы кодирования и уровни качества ........................................................121 Улучшение производительности аудио ..............................................................123 Файлы текстур ..................................................................................................................128 Форматы сжатия .........................................................................................................129 Улучшение производительности обработки текстур .....................................131 Файлы мешей и анимаций ............................................................................................141 Уменьшение количества полигонов .....................................................................141 Импорт/расчет только необходимого .................................................................143 Встраиваемые анимации ..........................................................................................143 Оптимизация мешей движком Unity ..................................................................144 Объединение мешей ..................................................................................................145 Итоги ....................................................................................................................................145 Глава 5. Разгон физического движка ..........................147 Внутреннее устройство физического движка ........................................................148 Физические движки и время ..................................................................................148 Статические и динамические коллайдеры ........................................................152 Обнаружение столкновений ...................................................................................153 Виды коллайдеров ......................................................................................................154 Матрица столкновений ............................................................................................155 Активное и неактивное состояния компонента Rigidbody ..........................156 Отбрасывание лучей и объектов ...........................................................................157 Оптимизация производительности физической системы ................................157 Настройка сцены ........................................................................................................157
Содержание 7 Правильное использование статических коллайдеров .................................160 Оптимизация матрицы столкновений ................................................................161 Предпочтение дискретного обнаружения столкновений .............................162 Изменение частоты фиксированных обновлений ..........................................163 Настройка максимально допустимой длительности .....................................165 Уменьшение отбрасывания лучей и ограничение проверяемого объема .....165 Избегайте сложных меш-коллайдеров ...............................................................167 Избегайте сложных физических компонентов ................................................170 Пусть физические объекты поспят ......................................................................170 Изменение количества итераций ..........................................................................172 Оптимизация тряпичных кукол ............................................................................173 Когда следует использовать физическую систему .........................................175 О возможности перехода на Unity 5 ....................................................................176 Итоги ....................................................................................................................................177 Глава 6. Динамическая графика ................................178 Профилирование проблем отображения .................................................................179 Профилирование графического процессора .....................................................181 Отладка кадров ............................................................................................................184 Поиск методом перебора ..........................................................................................185 Основная нагрузка приходится на центральный процессор .......................185 Узкие места на этапе предварительной обработки...............................................189 Уровень детализации.................................................................................................189 Отключение скининга графическим процессором .........................................191 Уменьшение тесселяции ..........................................................................................192 Узкие места на этапе окончательной обработки ...................................................192 Скорость заполнения ................................................................................................192 Пропускная способность памяти ..........................................................................206 Ограничения видеопамяти ......................................................................................210 Освещение и затенение ..................................................................................................212 Непосредственное отображение............................................................................213 Отложенное затенение .............................................................................................214 Обработка освещения в вершинном шейдере (устаревший способ) .......214 Обработка теней в реальном времени .................................................................215 Оптимизация освещения .........................................................................................215 Оптимизация графики для мобильных устройств...............................................217 Минимизация обращений к системе визуализации ......................................218 Минимизация количества материалов ...............................................................218 Уменьшение размеров текстур и количества материалов ............................218 Квадратные текстуры с размером стороны, кратной степени числа 2 ....219 Использование в шейдерах форматов с минимально допустимой точностью..................................................................................................................................219 Избегайте альфа-тестирования .............................................................................219 Итоги ....................................................................................................................................219 Глава 7. Мастерство управления памятью ...................221 Платформа Mono .............................................................................................................222 Процесс компиляции ................................................................................................224
Содержание Оптимизация использования памяти .......................................................................226 Области памяти Unity ..............................................................................................227 Значения и ссылки .....................................................................................................236 Важность порядка размещения данных .............................................................249 Прикладной программный интерфейс Unity ...................................................250 Циклы foreach ..............................................................................................................251 Сопрограммы ...............................................................................................................252 Замыкания ....................................................................................................................252 Функции в библиотеке .NET ..................................................................................253 Временные рабочие буферы ...................................................................................254 Пулы объектов .............................................................................................................254 Пулы шаблонных объектов ..........................................................................................257 Компоненты пула .......................................................................................................260 Система пулов шаблонных объектов ..................................................................263 Пулы шаблонных объектов .....................................................................................267 Активация объектов ..................................................................................................268 Предварительное создание экземпляров ...........................................................269 Деактивация объектов ..............................................................................................270 Тестирование пула шаблонных объектов ...........................................................271 Организация пулов шаблонных объектов и загрузка сцены ......................272 Итоговые замечения об организации пулов шаблонных объектов ..........273 Дальнейшее развитие Mono и Unity .........................................................................274 Итоги ....................................................................................................................................276 Глава 8. Тактические советы и подсказки ....................278 Подсказки по клавишам быстрого доступа в редакторе ....................................279 Игровые объекты ........................................................................................................279 Представление сцены ................................................................................................279 Массивы .........................................................................................................................280 Интерфейс .....................................................................................................................280 Прочее.............................................................................................................................281 Советы, касающиеся интерфейса редактора ..........................................................281 Общие .............................................................................................................................281 Представление инспектора .....................................................................................284 Представление проекта ............................................................................................286 Представление иерархии .........................................................................................287 Представления сцены и игры .................................................................................288 Режим воспроизведения ..........................................................................................289 Советы для сценариев ....................................................................................................290 Общие .............................................................................................................................290 Атрибуты .......................................................................................................................291 Регистрация ..................................................................................................................293 Полезные ссылки ........................................................................................................293 Советы по настройке редактора и меню ..................................................................294 Советы, не касающиеся Unity напрямую ...............................................................296 Другие советы ..............................................................................................................297 Итоги ....................................................................................................................................298 Предметный указатель ............................................300
Об авторе Крис Дикинсон (Chris Dickinson) вырос в Англии, увлекается естественными науками, математикой и компьютерными играми. Получив в 2005 году степень магистра в области физики и электроники, сразу же переехал в Калифорнию, чтобы заниматься научными исследованиями в самом сердце Кремниевой долины. Затем, разочаровавшись в своем выборе, переключился на работу в области разработки программного обеспечения. За последнее десятилетие он многого достиг, сделал карьеру в области разработки программного обеспечения, стал ведущим разработчиком. Крис в основном занимался программным обеспечением для автоматизации и создавал инструменты для внутреннего тестирования в процессе разработки, но страсть к видеоиграм не потерял. В 2010 году он занялся изучением секретов разработки игр и трехмерной графики и получил степень бакалавра в области разработки игр и программного моделирования. Написал учебник о применении физических законов в играх (Learning Game Physics with Bullet Physics and OpenGL, издана в Packt Publishing). В настоящее время продолжает разрабатывать программное обеспечение, свободное время посвящая работе над независимыми игровыми проектами, использующими Unity 3D.
Благодарности Всего за 5 лет я сумел усвоить огромный объем знаний. Сделать это было бы невозможно без постоянной поддержки коллег, преподавателей, друзей и семьи. Спасибо моим коллегам по работе, что с пониманием отнеслись к моему перидическому отсутствию, пока я обучался разработке игр в колледже. А также спасибо моим преподавателям за то, что смогли оперативно донести до меня самое основное и помогли так много узнать о разработке игр за такое короткое время. Спасибо друзьям, которые всегда были и остаются постоянным источником вдохновения, за их интерес к моей работе. Спасибо моей семье за предоставленную возможность получить так много знаний, ощущений и любви за такое короткое время. И конечно, спасибо моей прекрасной жене и лучшему другу Джейми, окружающей меня заботой и поддержкой и помогающей мне творить.
О технических рецензентах Клиффорд Чампион (Clifford Champion) обладает обширным, многолетним опытом разработки программного обеспечения, полученным во время работы над 3D-играми, интернет-приложениями и программами искусственного интеллекта. Имеет ученые степени в области математики и информатики, присвоенные в Калифорнийском университете в Сан-Диего и в Калифорнийском университете в ЛосАнджелесе. В прошлом Клиффорд работал в компании Havok (ныне часть Microsoft), занимающейся разработкой игровых технологий, и в известной дизайн-студии PlainJoe Studios. В настоящее время возглавляет группу разработки программного обеспечения в компании zSpace (zspace.com), специализирующейся на 3D-приложениях виртуальной реальности для учебных заведений и промышленности. Клиффорда можно найти в Twitter (@duckmaestro), и он готов вести дискуссии на любые темы. Доктор Себастьян Т. Кёниг (Dr. Sebastian T. Koenig) получил степень доктора наук в области систем «человек–машина» в университете Кентербери, Новая Зеландия, за разработку основы системы виртуальной реальности для индивидуализированной когнитивной реабилитации. Имеет диплом психолога в области клинической нейропсихологии и реабилитации с применением систем виртуальной реальности, полученный в университете Регенсбурга, Германия. Является основателем и генеральным директором Katana Simulations, где курирует проектирование, разработку и проведение когнитивной экспертизы систем моделирования для профессиональной подготовки. Его профессиональный опыт включает более 10 лет клинической работы в сфере когнитивной реабилитации и более 8 лет в области исследования, разработки и тестирования пользователями виртуальной реальности. Он часто выступает на международных конференциях и приглашается в качестве рецензента научных публикаций в области реабилитации, когнитивной психологии, нейропсихологии, программной инженерии, разработки игр, исследований восприятия пользователями игр и виртуальной реальности.
О технических рецензентах Разработал ряд прикладных программ для когнитивной оценки и профессиональной подготовки. За работу над задачей виртуальной памяти в 2011 году был удостоен престижной премии Laval Virtual в категории медицины и здравоохранения. Другими его достижениями являются: приложение виртуальной реальности для оценки восприятия, разработанное в сотрудничестве с Фондом Кесслера (Нью-Джерси, США), и запатентованное приложение для моторной и когнитивной подготовки JewelMine/Mystic Isle, основанное на Microsoft Kinect и созданное в Калифорнийском институте креативных технологий (Калифорния, США). Поддерживает веб-сайт www.virtualgamelab.com, где представлены результаты его исследований и проекты разработки программного обеспечения. Сайт также содержит исчерпывающий список учебных материалов, посвященных игровому движку Unity.
Предисловие Привлекательность – чрезвычайно важный компонент любой игры. Она определяется не только сценарием игры и игровым процессом, но также гладкостью графики, надежностью соединения с многопользовательскими серверами, скоростью реакции на действия пользователя и даже величиной конечного файла приложения, что важно при распространении из хранилищ или из облака. Барьер включения в разработку игр был значительно снижен благодаря появлению недорогих и качественных инструментов, таких как Unity. Однако требования к конечному продукту, предъявляемые игроками, растут с каждым днем. Следует иметь в виду, что все аспекты игры могут и будут тщательно изучены как игроками, так и критиками. Цели оптимизации производительности тесно связаны с восприятием игры пользователями. Плохо оптимизированная игра, как правило, имеет низкую частоту кадров, зависает, сбоит, реагирует на действия пользователя с опозданием, долго загружается, ведет себя непоследовательно и дергано во время выполнения, работа физического движка часто нарушается и даже имеет чрезмерно высокое энергопотребление (что крайне важно в эпоху мобильных устройств). Наличие хотя бы одной из этих проблем должно приводить в ужас разработчиков, поскольку авторы обзоров склонны делать упор на отрицательных качествах, оставляя в стороне положительные. Высокая производительность обеспечивается оптимальным использованием всех имеющихся ресурсов, включая ресурсы центрального процессора, такие как частота процессора и объем оперативной памяти, ресурсы графического процессора, такие как объем видеопамяти и ее пропускная способность, и т. д. Поэтому основной задачей оптимизации является такое распределение ресурсов, которое обеспечит эффективное их использование и выполнение высокоприоритетных задач в первую очередь. Даже небольшие, кратковременные задержки и потери производительности снижают привлекательность игры, ухудшают погружение в нее и ограничивают потенциал разработчиков. Важно также выбрать момент, когда следует остановиться и прекратить заниматься улучшением производительности. В идеальном мире, где время и ресурсы ничем не ограничены, всегда найдется еще один способ достичь более удачного, быстрого и простого решения.
Предисловие Но в реальном мире должен существовать момент в процессе разработки, когда следует заявить, что продукт достиг приемлемого качества. Если этого не сделать, дальнейшие усилия принесут мало пользы или вообще не дадут ощутимых результатов. Лучший способ выбрать момент прекращения работ над улучшением производительности – ответить на вопрос: «А пользователь это заметит?» Если ответ на этот вопрос – нет, дальнейшая оптимизация не стоит затраченных на нее усилий. Существует старая поговорка, относящаяся к разработке программного обеспечения: Преждевременная оптимизация – корень всех зол. Под преждевременной оптимизацией понимается переработка и рефакторинг кода для повышения производительности, когда нет твердой уверенности в необходимости этих действий, например при полном отсутствии проблем с производительностью (отвечаем на вопрос о заметности для пользователя) или при наличии предположений, что проблема производительности вызвана определенной областью, но нет доказательств, что так и есть на самом деле. Такие ошибки обходятся разработчикам удручающе большим количеством рабочих часов, потраченных впустую. Цель этой книги – дать вам инструменты, знания и навыки, необходимые для выявления и исправления проблем производительности, независимо от их причин. Подобные проблемы могут вызывать компоненты оборудования, такие как центральный процессор, графический процессор или оперативная память; подсистемы программного обеспечения, такие как подсистема физики, визуализации или же сам движок Unity. Кроме того, чем больше ресурсов удастся сэкономить, тем больше можно будет сделать с помощью движка Unity на одном и том же оборудовании, что позволит реализовать более интересный и динамичный процесс игры. А это даст вашей игре больше шансов на успех и позволит ей выделиться из массы других, представленных на рынке, куда ежедневно выбрасываются новые, высококачественные игры. О чем рассказывается в этой книге Глава 1 «Выявление проблем с производительностью» посвящена знакомству с профилировщиком Unity Profiler и методами профилирования приложений, выявлению узких мест с точки зрения производительности и анализу основных причин их возникновения.
Доступ онлайн
В корзину