Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Оптимизация игр в Unity 5

Покупка
Артикул: 712475.01.99
Доступ онлайн
699 ₽
В корзину
Ничто так не отпугивает игроков, как сбои при выполнении игры. Задержки при вводе, медленное отображение, физические нестыковки, подергивание, замирание и неожиданное аварийное завершение превращают игру в кошмар, и разработчики игр должны сделать все, чтобы этого никогда не происходило! Из этой книги вы узнаете, как выявлять и исследовать узкие места во всех основных компонентах движка Uoty3D. В каждом конкретном случае описываются способы идентификации проблем, порядок выявления их причин и ряд возможных решений. Издание адресовано разработчикам игр среднего и продвинутого уровня, имеющим опыт работы с Unity и языком С# и желающим повысить производительность своих приложений.
Дикинсон, К. Оптимизация игр в Unity 5 / К. Дикинсон. - ДМК Пресс, 2017. - 306 с. - ISBN 978-5-97060-432-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/1028094 (дата обращения: 30.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Крис Дикинсон

Оптимизация игр  

в 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 и методами профилирования приложений, выявлению узких мест с точки зрения производительности и анализу основных причин их возникновения.

Доступ онлайн
699 ₽
В корзину