close

Вход

Забыли?

вход по аккаунту

?

Vinogradov 0ACE4891AC

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное
образовательное учреждение высшего образования
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
ОСНОВЫ РАЗРАБОТКИ ДВУХИ ТРЕХМЕРНЫХ ПРИЛОЖЕНИЙ И ИГР
Лабораторный практикум
Санкт-Петербург
2016
Составители: В. В. Виноградов, А. В. Никитин, Н. Н. Решетникова,
Н. Д. Ульянов
Рецензент – доктор технических наук, профессор Б. С. Гуревич
В лабораторном практикуме приведен цикл лабораторных работ
по изучению мультиплатформенного инструмента двух- и трехмерного моделирования Unity3D версии 5.0 и выше, созданию приложения дополненной реальности с помощью библиотеки Vuforia для
Unity3D и управляемых жестами приложений с использованием MS
Kinect, а также разработки видеоролика с использованием программы захвата видео с экрана и обработки аудиофайлов в звуковом редакторе.
Лабораторный практикум предназначен для студентов направления 09.04.01 «Информатика и вычислительная техника», изучающих дисциплины магистерской программы «Системы мультимедиа и компьютерная графика».
Публикуется в авторской редакции.
Компьютерная верстка С. Б. Мацапуры
Сдано в набор 31.05.16. Подписано к печати 16.11.16.
Формат 60×84 1/16. Бумага офсетная. Усл. печ. л. 8,1.
Уч.-изд. л. 8,7. Тираж 50 экз. Заказ № 438.
Редакционно-издательский центр ГУАП
190000, Санкт-Петербург, Б. Морская ул., 67
© Санкт-Петербургский государственный
университет аэрокосмического
приборостроения, 2016
Введение
Unity3D – это инструмент для создания двух- и трёхмерных
приложений и игр, работающий под операционными системами
Windows и OS X. Созданные с помощью Unity приложения работают под операционными системами Windows, OS X, Windows Phone,
Android, Apple iOS, Linux, а также на игровых приставках Wii,
PlayStation 3, PlayStation 4, Xbox 360, Xbox One. Есть возможность
создавать приложения для запуска в браузерах с помощью специального подключаемого модуля Unity (Unity Web Player), а также
с помощью реализации технологии WebGL.
Установка пакета и знакомство
с интерфейсом программы Unity3D
На официальном сайте Unity3D – http://unity3d.com (рис. 1)
можно бесплатно скачать установщик программы с официального
сайта Unity3D (рис. 2): http://unity3d.com/ru/get-unity/update
Затем установщиком производится загрузка файлов на жёсткий
диск компьютера. По завершению установки, приложение попро-
Рис. 1. Главная страница сайта unity3d.com
3
Рис. 2. Страница с загрузкой установщика
сит зарегистрироваться и выбрать тип лицензии. В учебных целях
достаточно персональной лицензии, которая поставляется бесплатно. Появится следующее окно (рис. 3), если ни одного проекта не
было найдено.
В случае, если проектов нет в установленном дистрибутиве, то
можно либо загрузить произвольный проект (из сети или магазина
Asset Store), а затем открыть его через кнопку «Open» (указав путь
Рис. 3. Программа Unity3D при первом запуске
4
Рис. 4. Программа Unity3D при первом запуске,
если внутри есть проекты
к нему) или создать новый проект с помощью кнопки «New», которая расположена в правой верхней части окна (рис. 4).
В окне отображаются названия всех найденных проектов, которые есть на компьютере, а также показывается путь к файлам
проекта и версия программы, в которой был сделан проект. При
создании проекта, нужно указать название проекта и путь к нему
(рис. 5).
Рис. 5. Создание нового проекта
5
Нажав на кнопку «Asset packages» (Пакеты ресурсов), можно
выбрать необходимые пакеты ресурсов для нового проекта (рис. 6).
Краткое описание стандартных ресурсов, которые включены
в Unity:
2D – материалы для создания 2D-проекта (анимация, префабы,
скрипты и спрайты);
Cameras (Камеры) – префабы и скрипты дополнительных камер;
Characters (Персонажи) – персонаж с видом от первого лица,
персонаж с видом от третьего лица и персонаж-шар с видом от третьего лица;
CrossPlatformInput (Кроссплатформенный ввод) – префабы,
скрипты и спрайты для портирования на разные платформы;
Effects (Эффекты) – эффекты со светом, фильтры для камер,
тун-шейдинг и другое;
Environment (Окружающая среда) – деревья, вода, текстуры
для ландшафта (Terrain);
ParticleSystems (Система частиц) – создание пыли, огня, дыма,
пара;
Prototyping (Прототипы) –различные 3D-объекты для проектов;
Рис. 6. Выбор необходимых ресурсов
6
Utility (Утилиты) – различные скрипты связанные с контроллерами, камерами и другим;
Vehicles (Транспортные средства) – модели машины и самолёта,
а также скрипты, материалы, звуки и анимация, связанная с ними;
Другие пакеты в списке – это дополнительные файлы, установленные пользователем.
Затем, в зависимости от количества выбранных пакетов ресурсов, нужно подождать загрузку (рис. 7) основного окна программы
(рис. 8).
Рис. 7. Индикация загрузки пакетов ресурсов
Рис. 8. Основное окно программы
7
Примечание: количество подключаемых ресурсов влияет на размер файлов проекта, а также на скорость загрузки основного окна
программы (происходит распаковка и компиляция данных).
Знакомство с интерфейсом программы
В верхней части окна приложения располагается главное меню
(рис. 9).
Оно включает в себя пункты:
– File (Файл), содержит подпункты, отвечающие за создание,
открытие и сохранение проектов и сцен, а также настройки для
компиляции готового приложения;
– Edit (Редактирование), отвечает за вырезание/вставку выделенных объектов, переключение режимов Play/Pause/Step, настройки сцены, параметры эмуляции и др.;
– Assets (Ассеты), включает инструменты для импорта и экспорта наборов, а также позволяет создать новые материалы, текстуры, скрипты и др.;
– GameObject (Игровые объекты), позволяет создавать такие
физические объекты как системы частиц, камеры, источники света, простейшие трехмерные формы и др.;
– Component (Компоненты), отвечает за настройку характеристик
объектов: физика, сглаживание, отображение, аудиоэффекты и др.;
– Window (Окно), позволяет настроить внешний вид среды, расположение окон и позволяет получить доступ к каждому из них по
отдельности;
– Help (Помощь), содержит ссылки на форумы и руководства по
Unity, ответы на часто задаваемые вопросы и т. д.
Познакомимся с интерфейсом среды Unity3D. Основное место
на экране занимает окно вида сцены, в котором отображается модель сцены со всеми 2D и 3D объектами (рис. 10).
Ее можно осмотреть, нажав на значок с изображением руки в
верхнем левом углу окна сцены (рис. 11):
После нажатия на данный значок появляется возможность осмотреть сцену: зажатая левая кнопка мыши позволяет передвинуть
положение камеры, зажатая правая кнопка мыши – повернуть ка-
Рис. 9. Главное меню
8
Рис. 10. Окно вида сцены
меру, колесо мыши – приближение/отдаление камеры. Следующая
кнопка в виде перекрещивающихся стрелок позволяет перемещать
объект по сцене, кнопка с округлыми стрелками – вращать вокруг
своей оси, последняя кнопка позволяет масштабировать.
Перейдем к списку под названием Hierarchy (Иерархия). В нём
перечислены все объекты, добавленные в сцену (объекты, персонажи, источники света и т. д.) (рис. 12).
Рис. 11. Кнопки управления
перемещением в сцене
и модификации объекта
Рис. 12. Hierarchy
(Иерархия)
9
Рис. 13. Project (Проект)
Рис. 14. Элементы меню Create
10
Рис. 15. Окно Inspector
В меню «Project» (Проект) перечислены все заготовки и уже созданные скрипты, текстуры, шрифты, сцены, входящие в текущий
проект. Для поиска необходимых объектов сцены следует раскрыть
соответствующий раздел проекта (рис. 13).
Элементы меню «Create» (Создать) и окна «Inspector» (Инспектор) представлены соответственно на рис. 14 и 15.
Если из списка Hierarchy выбрать какой-либо объект, то в окне
Inspector отобразится вся информация о данном объекте в сцене:
положение по координатной сетке, наклоны, примененные скрипты, нанесенные текстуры, физическая модель и её настройки и др.
11
Лабораторная работа № 1
«СОЗДАНИЕ ПРОСТОЙ 3D-СЦЕНЫ
(ЛАНДШАФТ, КАМЕРА И СВЕТ)»
Цель работы: изучение инструментов создания ландшафта, постановки общего освещения, наложения текстур, добавления камеры и объектов.
Порядок выполнения работы
1. Создание поверхности ландшафта.
2. Наложение текстур на поверхность ландшафта.
3. Размещение на ландшафте 3D объектов.
4. Создание общего освещения сцены.
5. Постановка камеры.
6. Формирование отчета.
Методические указания
Для создания нового проекта в меню интерфейса откроем File
→ New Project. В открывшемся окне указываем путь к проекту («Location»), для сохранения проекта и его название («Project
name») (рис. 1.1).
Рис. 1.1. Выбор названия проекта и пути сохранения
12
При создании нового проекта, нажав на кнопку «Asset
packages», выбираем 4 следующих пакета ресурсов (рис. 1.2):
1) Characters (Персонажи) – персонаж с видом от первого лица,
персонаж с видом от третьего лица и персонаж-шар с видом от третьего лица;
2) Environment (Окружающая среда) – деревья, вода, текстуры
для ландшафта;
3) Prototyping (Прототипы) – различные 3D-объекты для проектов;
4) Vehicles (Транспортные средства) – модели машины и самолёта, а также скрипты, материалы, звуки и анимация, связанная
с ними;
После выбора необходимых ресурсов, нажимаем кнопку «Create
project».
После загрузки выбранных ресурсов открывается окно проекта,
в котором будем создавать 3D-сцену (рис. 1.3).
Для начала создадим стандартную поверхность, при помощи объекта «Terrain» (GameObject → 3D Object → Terrain или
Hierarchy → 3D Object → Terrain) (рис. 1.4).
Создадим источник освещения, для этого открываем GameObject
→ Light → Directional Light или Hierarchy → Light → Directional
Light (оба варианта показаны на рис. 1.5).
Рис. 1.2. Выбор необходимых ресурсов из списка Asset packages
13
Рис. 1.3. Окно 3D-сцены
Рис. 1.4. Стандартный объект «Terrain»
14
Рис. 1.5. Directional Light через меню GameObject и Hierarchy
Появился источник направленного освещения. Устанавливаем
и размещаем полученный источник света, направляя его на объекты 3D-сцены с помощью инструментов
в верхней
левой части окна вида сцены. Затем приступаем к настройке источника света в инспекторе (рис. 1.6).
В основных настройках можно поменять цвет исходящего света
(«Color»), задать интенсивность («Intensity»), выбрать тип теней
(«Shadow Type»), а также создать эффект солнечного блика при направлении камеры на источник света («Flare»).
Приступим к редактированию созданной поверхности «Terrain».
Для создания неровностей на поверхности в окне «Hierarchy» выбираем «Terrain». В инспекторе находим подпункт «Terrain», а
там выбираем «Raise / Lower Terrain» (рис. 1.7).
Теперь, щелкая левой клавишей мыши по поверхности ландшафта, создаем неровности: горы, холмы, впадины. Для удаления
неровности необходимо зажать на клавиатуре клавишу Shift и с помощью нажатий левой клавиши мыши убирать ненужные неровности. Для того чтобы изменить размер кисти используем настройку
«Brush Size», также можно изменить тип кисти в поле «Brushes».
За интенсивность отвечает ползунок «Opacity».
Пользуясь перечисленными выше инструментами, можно создать, например, ландшафт, представленный на рис. 1.8.
После создания рельефа наложим на ландшафт текстуру травы. В том же инспекторе находим изображение кисточки, она же
вкладка «Paint texture» (рис. 1.9).
Далее нажимаем кнопку «Edit Textures». Появляется окно добавления текстур «Add Terrain Texture» (рис. 1.10), где нажав на
кнопку «Select», можно выбрать несколько подходящих текстур.
В открывшемся окне «Select Texrure2D» (рис. 1.11) благодаря
ранее выбранным ресурсам (Assets), есть некоторое количество
15
Рис. 1.6. Настройки
источника освещения
Рис. 1.7. Редактор ландшафта
Рис. 1.8. Созданный рельеф
16
Рис. 1.9. Инструмент для наложения текстур
на поверхность
Рис. 1.10. Окно
добавления текстур
Рис. 1.11. Окно выбора
текстур
Рис. 1.12. Найденные
текстуры травы
текстур. Например, написав в поле поиска слово «Grass» (русск.
трава), увидим несколько текстур (рис. 1.12). Выбрав подходящую,
нажимаем «Add».
Вся поверхность ландшафта заполняется текстурой травы
(рис. 1.13).
Нажимая на кнопку «Edit Textures» добавляем ещё несколько
текстур и применяем их к различным частям ландшафта для создания большей реалистичности (рис. 1.14).
Для добавления деревьев, через инспектор объекта «Terrain»
выбираем вкладу «Place Trees» (рис. 1.15).
Нажимаем кнопку «Edit Trees…», далее «Add trees» и выбираем дерево. Для этого нужно нажать на кружок с точкой справа
(рис. 1.16) напротив префаба дерева («Tree Prefab»).
17
Рис. 1.13. Текстура травы на поверхности ландшафта
Рис. 1.14. Рельеф с различными текстурами
Рис. 1.15. Инструмент для добавления
деревьев на поверхность
18
Рис. 1.16. Добавление
префаба дерева
Появится окно «Select GameObject» (рис. 1.17), в котором можно
выбрать подходящую модель дерева.
Выбрав нужные модели, расставляем их на ландшафте (рис. 1.18).
Стоит учитывать, что сильно деформированный ландшафт может
создать эффект того, что деревья
«повиснут в воздухе», если их «посадить» на изгибах и резких перепадах высот. 
В настройках можно выбирать
высоту («Tree Height») и толщину
дерева («Tree Width»), также с помощью «Brush Size» можно выбрать
количество добавляемых деревьев и
их плотность изменением параметра «Tree Density» (рис. 1.19).
Добавим немного воды. Находим префаб «WaterBasicDaytime»
(Project → Assets → Standard Assets
→ Environment → Water (Basic) →
Prefabs) и переносим его на сцену,
затем изменяем размер объекта
(Inspector → Transform → Scale) на
необходимый для покрытия нужного участка поверхности (рис. 1.20).
Рис. 1.17. Выбор префаба дерева
Рис. 1.18. Ландшафт с различными моделями деревьев
19
Рис. 1.19. Настройки для деревьев
Рис. 1.20. Настройки для воды
Следующая задача – это добавление в сцену действующего персонажа («First Person Controller»). Для этого перенесем в сцену префаб
«FPSController» (Project → Assets → Standart Assets → Characters
→ FirstPersonController → Prefabs) на нашу сцену (рис. 1.21). Учитываем расположение персонажа, чтобы он находился на сцене, а
не вне её пределов, а также, чтобы коллайдер персонажа (зелёная
капсула) был немного выше поверхности модели ландшафта.
Запускаем режим игры с помощью клавиши «Play», которая
расположена в верхней части окна вида сцены. Теперь мы можем
видеть результаты проделанной работы и перемещаться по сцене,
управляя персонажем от первого лица (рис. 1.22).
Наконец необходимо сохранить получившуюся сцену (File →
Save Scene As…), выбрав место хранения и название, под которым
будет сохранена сцена.
Рис. 1.21. Контроллер персонажа
20
Рис. 1.22. Вид сцены в окне Game(игра) от первого лица
Контрольные вопросы
1. С чего начинается создание ландшафта?
2. Возможно ли удалить созданную неровность с поверхности
(Terrain)?
3. Как изменить размеры и количество деревьев?
4. Как происходит постановка общего освещения?
5. Как происходит наложение текстур?
6. Как добавляются камеры и объекты?
21
Лабораторная работа № 2
«ИМПОРТ МОДЕЛЕЙ В ПРИЛОЖЕНИЕ,
ПОСТАНОВКА ЛОКАЛЬНОГО ОСВЕЩЕНИЯ»
Цель работы: ознакомление с импортом моделей в проект
Unity3D на примере моделей 3ds Max, а также с постановкой различных видов локального освещения.
Порядок выполнения работы
1. Импорт моделей в проект Unity3D.
2. Постановка различных видов локального освещения.
3. Оформление отчета.
Методические указания
Для импорта моделей на сцену следует открыть сцену, созданную в лабораторной работе № 1. Для этого нажимаем (File → Open
Scene) и выбираем сохраненную сцену. После того, как загрузилась
сцена, приступим к импорту моделей. Unity поддерживает импорт
форматов.3ds,.max,.obj,.fbx,.dae,.ma, и.mb для трёхмерных моделей. Возьмём готовую модель простого дома в формате .fbx (рис. 2.1).
Перенесём файл с моделью простого дома формата .fbx в папку,
где находится проект (Project), а затем перетащим модель на сцену,
если нужно изменяем размер и положение модели (рис. 2.2). Возможно, что модель на сцене отобразится без текстур, но они присутствуют в папке с импортированной моделью. Тогда файл с тексту-
Рис. 2.1. Модель в формате .fbx
22
Рис. 2.2. Модель домика в сцене без текстур (слева)
и с текстурами (справа)
рами следует перенести на модель или можно применить какие-то
свои текстуры путем перетаскивания их на нужный объект.
Чтобы персонаж не проходил сквозь объект и не проваливался
в него, необходимо сделать для модели коллайдер (Collider). Коллайдер позволяет обрабатывать столкновение объекта с другим
объектом, например, в игре персонаж не должен проходить сквозь
стену, а должен столкнуться с ней.
Коллайдеры добавляются через меню Component → Physics (или
Add Component → Physics в Инспекторе). Существует несколько
видов коллайдеров:
– Box Collider – в форме параллелепипеда;
– Sphere Collider – в форме сферы;
– Capsule Collider – в форме капсулы;
– Mesh Collider – автоматически создает коллайдер по форме полигональной сетки объекта;
– Wheel Collider – коллайдер колеса автомобиля.
Различные типы коллайдеров применяются для разных типов объектов, например, Sphere Collider применятся для моделей
в форме шара.
Для того, что бы добавить коллайдер, который будет повторять
форму объекта, в разделе Hierarchy выделяем нужную нам модель
и применим к ней коллайдер сетки (Mesh Collider) Component →
Physics → Mesh Collider. Если для передачи формы и модели столкновений объекта достаточно обычных коллайдеров, то рекомендуется использовать их, так как коллайдер сетки очень требователен
к ресурсам системы и его применение отрицательно скажется на
производительности.
23
Освещение
Для реалистичности сцены создадим источники локального освещения. Основные типы источников приведены в табл. 2.1.
Таблица 2.1
Описание источников света
Источник
Описание
Directional
Lights
(Направленный свет)
Направленный
свет не имеет
определенной
позиции источника
и поэтому может
быть размещен
в любом месте
сцены
Spotlight
Пучок света
(Прожектор) получается
в форме конуса,
расширяясь
с увеличением
расстояния от
источника света
Point Light
(Точечный
источник)
Источник
испускает лучи
света во все
стороны
Area Light
(Подсветка
области)
Область света
определяется
прямоугольником
в пространстве.
Свет излучается во
всех направлениях,
но только
с одной стороны
прямоугольника
24
Изображение
Для этого выбираем источник света «Spotlight» в меню интерфейса GameObject → Light (или Hierarchy → Create → Light), устанавливаем и поворачиваем полученный источник света в нужном
направлении, например такой источник можно применять для создания уличного фонаря (рис. 2.3).
Таким же способом создается источник освещения «Point Light»,
который удобно применять в качестве светящихся лампочек (рис.
2.4) и «Area Light» удобный для подсветки определённых областей
Рис. 2.3. Результат применения двух источников
Рис. 2.4. . Результат применения источника освещения Point Light
25
на плоскостях (рис. 2.5). В основных настройках можно поменять
цвет исходящего света (Color), задать интенсивность (Intensity), и
размер «пятна» освещения («Spot Angle») для Spotlight и «Range»
для Point Light.
Расставив модели объектов и источники освещение, получаем
готовую сцену, которая будет выглядеть, например, как на рис. 2.6.
Рис. 2.5. Использование источника освещения Area Light
Рис. 2.6 Модель острова с освещением
26
Контрольные вопросы
1. Каким образом происходит импорт моделей в Unity3D?
2. Как обеспечить столкновение объектов друг с другом?
3. Какие имеются типы источников света?
4. Можно ли изменять интенсивность и цвет локального освещения?
27
Лабораторная работа № 3
«РАЗРАБОТКА ПРОСТЕЙШЕГО ИНТЕРФЕЙСА
ПРИЛОЖЕНИЯ»
Цель работы: ознакомление с начальными принципами создания и использования скриптов в Unity, разработка на основе примера приведенного ниже, собственного интерфейса приложения.
Порядок выполнения лабораторной работы
1. Ознакомление с логикой работы скрипта.
2. Загрузка скрипта в проект, подготовленный в лабораторной
работе № 2.
3. Корректировка пунктов меню и проверка работы скрипта.
4. Оформление отчета.
Методические указания
Загрузим сцену подготовленную в лабораторной работе № 2
и создадим C# скрипт для работы нашего меню. Для этого перенесём курсор в файлы проекта (Project) и нажав правую кнопку
мыши выберем «С# Script» в пункте меню «Create». Создастся
файл «NewBehaviourScript», переименуем его в «EpicMenu», а затем дважды кликнем на него, чтобы открылся обработчик кода.
По умолчанию – это редактор MonoDevelop (рис. 3.1), который идёт
в комплекте с Unity3D.
Рис. 3.1. Шаблон кода в MonoDevelop
28
В настройках движка Unity3D есть возможность подключить
другой обработчик кода, например, Microsoft Visual Studio.
Заменим шаблонный код на следующий:
// Этот скрипт вызывает эпическое меню: останавливает игру и показывает настройки
//Начало скрипта using UnityEngine; // Стандартная библиотека движка Unity
using System.Collections; // Стандартная библиотека движка Unity
using UnityEngine.SceneManagement; // Библиотека для работы со сценами
public class EpicMenu : MonoBehaviour { private bool _paused = false; // Пауза в игре
private int _window = 100; // Окна меню
void Update () // Update выполняется каждый кадр {
if (Input.GetKeyUp(KeyCode.Escape)) // При нажатии клавиши "Escape"
{ if (!_paused) { Time.timeScale = 0; // Время в игре останавливается
_paused = true; // Пауза включается
_window = 0; } // Показывать окно меню
else { Time.timeScale = 1; // Иначе игра продолжается
_paused = false; // Пауза выключается
_window = 100; } // Перестать показывать меню
} } void OnGUI ()
{ if (_window == 0) // Главное меню активировано при _window = 0 { GUI.Box (new Rect (Screen.width / 2 – 100, Screen.height / 2 –
100, 200, 180), "Меню игры");
if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.height / 2 –
80, 180, 30), "Продолжить игру"))
{ Time.timeScale = 1;
_paused = false;
_window = 100; }
if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.height / 2 –
40, 180, 30), "Новая игра"))
29
{ Time.timeScale = 1;
_paused = false;
_window = 100;
SceneManager.LoadScene (0); } // Загрузка сцены №0
if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.height / 2 –
0, 180, 30), "Настройки"))
{ _window = 1; } // Переход к Настройкам, окну №1 if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.
height / 2 + 40, 180, 30), "Выход из игры"))
{ Application.Quit (); } // Выход из игры (работает при сборке приложения)
}
// Меню "Настройки"
if (_window == 1) // Окно №1
{ GUI.Box (new Rect (Screen.width / 2 – 100, Screen.height / 2 –
100, 200, 180), "Настройки"); if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.height / 2 –
80, 180, 30), "Видео"))
{ _window = 2; } // Открытие окна №2 (сделать своё)
if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.height / 2 –
40, 180, 30), "Аудио"))
{ _window = 3; } // Открытие окна №3 (сделать своё)
if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.height / 2 –
0, 180, 30), "Управление")) { _window = 4; } // Открытие окна №4 (сделать своё)
if (GUI.Button (new Rect (Screen.width / 2 – 90, Screen.
height / 2 + 40, 180, 30), "Назад") || Input.GetKeyUp (KeyCode.Escape)) {
_window = 0; } // Переход к окну №0
}
} }
// Конец скрипта
После этого сохраняем скрипт и закрываем MonoDevelop. Далее
необходимо прикрепить скрипт перетаскиванием на камеру (Main
Camera) в Иерархии (Hierarchy). Запустим проект – при нажатии
клавиши «Escape» должно показываться меню (рис. 3.2).
30
Рис. 3.2. Запуск проекта при нажатии клавиши «Escape»
Сделаем сборку приложения. Зайдя в настройки сборки (File →
Build Settings...), помечаем галочкой нужную сохранённую сцену
(напротив неё есть номер, который понадобится, если будет много
уровней/сцен в проекте), выбираем нужную операционную систему и нажимаем «Build» (рис. 3.3), выбираем путь и название для
Рис. 3.3. Настройки сборки в Unity3D
31
Рис. 3.4. Готовое приложение Unity3D
сохранения, а затем запускаем приложение и проверяем меню на
работоспособность (рис. 3.4).
Контрольные вопросы
1. Какие языки программирования используются для создания
скриптов в Unity3D?
2. С объектом какого типа нужно ассоциировать скрипт меню?
3. Какими из имеющихся в сцене объектов управляет созданный для меню скрипт?
4. Какими средствами для мониторинга ошибок располагает
Unity3D?
5. Как настраивается расположение на экране клавиш меню?
32
Лабораторная работа №4
«ЗНАКОМСТВО С АНИМАЦИЕЙ, ФИЗИЧЕСКИМИ
СВОЙСТВАМИ И СОЗДАНИЕМ ФОНОВОЙ МУЗЫКИ»
Цель работы: изучение простой анимации в Unity3D, а также
физических свойств геометрических объектов и создание фонового
звукового сопровождения.
Порядок выполнения лабораторной работы
1. Создание простой анимации на примере открытия и закрытия
двери.
2. Задание физических свойств геометрическим объектам.
3. Создание фонового звукового сопровождения.
4. Оформление отчета.
Методические указания
Разместим в пространстве сцены три параллелепипеда («Box»), поменяв их размеры так, чтобы было похоже на стены и дверь (рис. 4.1).
Затем создадим скрипт «Door.js» (Project → Create → JavaScript)
для открытия двери и присоединим его к параллелепипеду зеленого цвета.
Рис. 4.1. Три параллелепипеда одинаковой толщины
33
Листинг скрипта:
// Скрипт открытия двери (Door.js)
// Начало скрипта
var smooth = 2.0;
var DoorOpenAngle = 90.0;
private var open: boolean;
private var defaultRot: Vector3;
private var openRot: Vector3;
// Скорость открытия
// Градусы поворота
function Start()
{
defaultRot = transform.eulerAngles;
openRot = new Vector3 (defaultRot.x, defaultRot.y + DoorOpenAngle, defaultRot.z);
}
function Update ()
{
if (open) // Открытие двери
{ transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, openRot,
Time.deltaTime * smooth); }
else // Закрытие двери
{ transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, defaultRot,
Time.deltaTime * smooth); }
if (Input.GetKeyDown(«E»)) { open = !open; } // При нажатии клавиши «E» дверь
открывается
}
// Конец скрипта
Запустим сцену и при нажатии клавиши «E» должна открываться дверь. Скрипт можно усложнить, добавив в него возможность запуска только тогда, когда управляемый пользователем игрок (аватар с тегом «Player») мог его включать и только при нахождении
в поле видимости. Для этого будем использовать триггер.
Листинг скрипта:
// Скрипт открытия двери игроком при вхождении в триггер (Door.js)
// Начало скрипта
var smooth = 2.0;
var DoorOpenAngle = 90.0;
private var open: boolean;
34
// Скорость открытия
// Градусы поворота
private var enter: boolean;
private var defaultRot: Vector3;
private var openRot: Vector3;
function Start()
{
defaultRot = transform.eulerAngles;
openRot = new Vector3 (defaultRot.x, defaultRot.y + DoorOpenAngle, defaultRot.z);
}
function Update ()
{
if (open) // Открытие двери
{ transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, openRot, Time.
deltaTime * smooth); }
else // Закрытие двери
{ transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, defaultRot, Time.
deltaTime * smooth); }
if (Input.GetKeyDown(«e») && enter) // При нажатии клавиши «E» и вхождении в
триггер дверь открывается
{ open = !open; }
}
function OnGUI()
{
if (enter)
{ GUI.Box (new Rect (Screen.width/2 – 200, Screen.height – 100, 300, 25), «Нажмите кнопку ‘E’, чтобы открыть дверь»); }
}
function OnTriggerEnter (other: Collider) // Функция входа в триггер
{ if (other.gameObject.tag == «Player») { enter = true; } }
function OnTriggerExit (other: Collider) // Функция выхода из триггера
{ if (other.gameObject.tag == «Player») { enter = false; } }
// Конец скрипта
Для того, чтобы отметить управляемого персонажа тегом
«Player», зайдём в Inspector и найдём там опцию «Tag» (рис. 4.2).
Для создания триггера выделим зеленый «Box» и присоединим
к нему ещё один коллайдер (или Add Component → Physics → Box
Collider) к ней. Не забудем указать, что это триггер – поставим галочку в чекбоксе «Is Trigger» (рис. 4.3).
35
Рис. 4.2. Изменение тега на «Player»
Рис. 4.3. Указываем галочкой в чекбоксе, что коллайдер – триггер
Входя в радиус действия коллайдера у игрока появится возможность открыть дверь нажатием клавиши. Сам коллайдер невидим
для игрока, поэтому в код добавлена подсказка, которая поясняет,
что дверь можно открыть нажатием клавиши «Е» (рис. 4.4).
36
Рис. 4.4. Подсказка при запуске тестового выполнения проекта
Физика с помощью Rigidbody
За придание объектам физических свойств отвечает вкладка
Component → Physics. В ней можно найти пункт Rigidbody (Твердое
тело), с помощью него для любого объекта можно настроить действие виртуальной гравитации. Кроме того, в этой же вкладке находятся несколько других модификаторов отвечающих за настройку физических свойств. Среди них ряд модификаторов Collider.
Они отвечают за создание твердой оболочки объекта. Применяют
их в случаях, когда производится экспорт модели из другого редактора или просто создается новый объект и ему надо придать твердость, т. е. сделать так, чтобы нельзя было пройти сквозь объект.
Для примера, в уже имеющейся сцене создадим куб: GameObject
→ 3D Object → Cube (Hierarchy → Create → 3D Object → Cube). Разместим его в произвольном месте на некотором возвышении над
поверхностью ландшафта и нажмем Play. Куб так и останется висеть в указанном месте. Выйдем из режима проигрывания сцены,
вернемся к её редактированию и применим к созданному кубу модификатор Rigidbody (Component → Physics → Rigidbody). Теперь
в инспекторе куба можно изменить настройки данного модификатора. Для того, чтобы на куб действовала гравитация у него должна
37
Рис. 4.5. Падающие кубики и сферы
быть масса. Установим значение в поле «Mass», например, равное
15 (при использовании метрической системы данный показатель
измеряется в килограммах). Создадим для разнообразия ещё несколько объектов (кубов и сфер). Запустив сцену на выполнение,
наблюдаем за вполне реалистичным падением объектов (рис. 4.5).
Простой шутер от первого лица
Для демонстрации применения элементарной физики сделаем
простенький шутер (shooter game) от первого лица (FPS). Для этого
добавим еще несколько произвольных объектов в сцену – сферы,
кубы и др. Они будут служить мишенями, по которым будет вестись огонь. Ко всем мишеням добавим модификатор «Rigidbody»
и настроим его, придав объектам произвольные массы.
Затем необходимо создать оружие и патроны. Для этого создадим сферу и применим к ней модификатор «Rigidbody». Далее создадим префаб (Prefab) в окне проекта (Project) нажимаем Create →
Prefab. Перетаскиваем из иерархии только что созданную сферу
на префаб в окне проекта. Префаб – это, своего рода, заготовка и,
если планируется использовать какой-то объект несколько раз, то
его помещают в префаб. При применении каких-либо настроек или
модификаторов в префабу все эти настройки будут распространять38
ся на все дочерние объекты этого префаба. Итак, созданный префаб-сфера будет служить снарядом. Теперь необходимо написать
скрипт, описывающий работу оружия. Для этого создаем новый
C#-скрипт и привязываем его к «Main Camera», которая является
подобъектом «First Person Controller».
// Скрипт, который клонирует префаб и отбрасывает его с нужной скоростью (Gun.cs).
// Начало скрипта
using UnityEngine;
using System.Collections;
public class Gun: MonoBehaviour
{
public Rigidbody Bullet;
Rigidbody
public float Speed = 200;
//
Переносим
сюда
префаб
с
// Скорость вылета пуль
void Update () // Проверка каждый кадр
{
if (Input.GetButtonDown(«Fire1»))
// Левая кнопка мыши
//
for (var i=0; i<2; i++)
// Включить дробовик
//
for (var i=0; i<10; i++)
// Включить пулемёт
{
Rigidbody Gun; // Rigidbody, потому нужно физическое поведение
Gun = Instantiate (Bullet, transform.position, transform.rotation) as
Rigidbody; // Instantiate (объект для вызова, его местоположение и угол поворота)
Gun.velocity = transform.TransformDirection (Vector3.forward * Speed);
// Направление объекта в ту сторону, куда смотрит пользователь + скорость
}
}
}
// Конец скрипта
Выбираем в иерархии First Person Controller → Main Camera,
проверяем настройки созданного скрипта, например желаемую
скорость снаряда. Затем необходимо назначить объект, который будет использоваться в качестве снаряда – для этого перетаскиваем из
окна проекта префаб-сферу на переменную «Bullet» (рис. 4.6).
Проверяем в режиме «Play» действие стрельбы (рис. 4.7). Помним, что массу куба и сферы-снаряда можно менять, добиваясь различных эффектов при столкновении.
39
Рис. 4.6. Настройки стрельбы
Рис. 4.7. Демонстрация стрельбы
(множество сфер сталкиваются с кубами)
Создание фоновой музыки
Для организации фонового звука необходимо задать источник
звука. Им может быть любой объект с примененным компонентом
Component → Audio → Audio Source. В инспекторе настраивается
музыкальная композиция, которая будет звучать. Предварительно музыкальный файл необходимо поместить в папку с проектом
(рис. 4.8). Для того, чтобы сделать какой-либо объект слушателем
необходимо выполнить Component → Audio → Audio Listener. First
Person Controller по умолчанию является слушателем и применять
эти действия к нему не надо.
40
Рис. 4.8. Настройка источника звука в инспекторе
Также возможна более сложная реализация, включающая
создание встроенного плеера с возможностью переключения музыкальных треков. Для этого необходимо создать пустой объект
(GameObject → Create Empty), назовем его «MP3Player» и повесим
его на «First Person Controller». Затем напишем скрипт, описывающий его работу. Удобнее всего это будет сделать на C#. Создаем
новый скрипт и называем его обязательно также, как и только что
созданный пустой объект, затем перетаскиваем скрипт на объект.
Листинг скрипта:
// Скрипт MP3Player.cs для создания проигрывателя аудиодорожек. Возможности плеера:
воспроизведение/остановка аудиотреков, переключение вперед/назад по плейлисту
// Начало скрипта
using UnityEngine;
using System.Collections;
public class MP3Player: MonoBehaviour
{
public AudioSource player;
int currentTrek = 0;
int numberTrek;
// Назначаемый источник звука
// Номер текущего трека
41
public AudioClip[] track;
в Инспекторе
// Аудиотреки, которые можно выбрать
void Awake ()
{ numberTrek = track.Length – 1; } // Номер трека, который будет играть
по умолчанию при включении плеера
void Update ()
{
if (Input.GetKeyDown(KeyCode.Z))
жатии «Z»
{ player.Play(); }
жатии «X»
if (Input.GetKeyDown(KeyCode.X))
// Включение плеера при на-
// Выключение плеера при на-
{ player.Stop(); }
if (Input.GetKeyDown(KeyCode.B))
нажатии «B»
{ if (currentTrek + 1 <= numberTrek)
{ currentTrek++;
SelectTrek(currentTrek);
player.Play(); }
}
else if(Input.GetKeyDown(KeyCode.V))
нажатии «V»
{ if (currentTrek – 1 >= 0)
{ currentTrek--;
SelectTrek(currentTrek);
player.Play(); }
else
{ currentTrek = numberTrek;
SelectTrek(currentTrek); }
}
}
// Следующий аудиотрек при
// Предыдущий аудиотрек при
void SelectTrek(int index)
// Проверка: не выходит ли номер текущего трека
за общее число треков и организуется последовательное проигрывание треков, начиная
с текущего
{ for (int cnt = 0; cnt < track.Length; cnt++)
{ if (cnt == index) { player.clip = track[cnt]; } }
}
}
// Конец скрипта
42
Рис. 4.9. Настройка плеера в инспекторе
Наконец, необходимо настроить плеер в инспекторе (рис. 4.9).
Первым делом необходимо назначить источник звука – это может
быть любой объект сцены, после назначения музыка будет звучать
именно из него. Затем указываем число композиций, которые будут воспроизводиться. После чего указываем какие именно треки
будут звучать.
43
Контрольные вопросы
1. Расскажите о процессе создания пошаговой анимации в Unity3D?
2. Как настроить анимацию таким образом, чтобы персонаж мог
управлять камерой во время облета?
3. С помощью каких настроек можно включить проигрывание
анимации с самого начала сцены?
4. Какой модификатор отвечает за применение гравитации
к объекту?
5. Какой модификатор отвечает за твердость и невозможность
пройти сквозь объект?
6. Для чего нужны префабы?
7. Расскажите о процессе создания фонового звукового сопровождения?
44
Лабораторная работа № 5
«ОЗНАКОМЛЕНИЕ С ФУНКЦИОНАЛЬНЫМИ
ВОЗМОЖНОСТЯМИ УПРАВЛЕНИЯ
ХАРАКТЕРИСТИКАМИ КАМЕРЫ»
Цель работы: изучение функциональных возможностей управления характеристиками камеры, предоставленными пакетом
Unity3D, а также исследование возможностей их применения на
тестовой модели.
Порядок выполнения лабораторной работы
1. Ознакомиться с содержанием раздела «Теоретические сведения».
2. Изучить функциональные возможности управления характеристиками камеры, предоставленные пакетом Unity3D.
3. Создать простейшую тестовую сцену в Unity3D.
4. Исследовать описанные свойства камеры на тестовой модели.
5. Сформулировать выводы.
6. Оформить отчет.
Рекомендации по содержанию тестовой сцены
– стандартный Terrain;
– глобальное освещение (Directional light);
– first Person Controller;
– стандартные примитивы или простые модели;
– более двух камер.
Методические указания
Теоретические сведения – координатное пространство камеры,
внутреннее пространство пирамиды, поле зрения, буфер глубины,
виды проецирования, рассмотрены в [1].
Виртуальная камера в Unity 3D
Камеры используются для отображения игроку игрового мира.
Поэтому в каждой сцене присутствует минимум одна камера, их
количество не ограничено. Несколько камер может использоваться
для разделения экрана для двух игроков, создания спецэффектов.
Манипулируя камерами, можно придать игре или приложению уни45
кальный вид, значительно повысить реалистичность проектов. Изображения с камеры могут визуализироваться в любой последовательности в любом месте экрана или только в указанных частях экрана.
Таким образом, камера является достаточно гибким объектом.
На рис. 5.1 показано окно проекта Unity3D с заданным объектом «Main Camera» и его характеристиками в меню «Inspector».
Пакет Unity3D предоставляет разработчику богатые возможности управления характеристиками камеры. Рассмотрим некоторые
свойства камеры (рис. 5.2) в табл. 5.1.
Рис. 5.1. Объект Main Camera в Unity3D
Таблица 5.1
Свойства камеры в пакете Unity3D
Свойство
Clear Flags
Background
Culling Mask
Projection
Perspective
46
Функция
Определяет, какие части экрана будут очищены. Это
удобно при использовании нескольких камер для
отрисовки разных элементов игры
Цвет, применяемый для фона после отрисовки всех
элементов, в случае отсутствия скайбокса
Включение или исключение слоёв объектов на
рендер этой камерой. Назначение слоёв объектам
производится через Inspector
Переключает способность камеры симулировать
перспективу
Камера будет рисовать объекты в перспективе.
Окончание табл. 5.1
Свойство
Функция
Камера будет рендерить объекты единообразно, без
ощущения перспективы. Примечание: Deferred
Orthographic
рендеринг не поддерживается в данном режиме.
Forward рендеринг всегда используется
Размер зоны видимости камеры для ортографического
Size режима
Для режима перспективы – ширина угла обзора
Field of view камеры, измеряется в градусах по локальной оси Y
Отсекающие плоскости – дистанция, на которой
Clipping Planes
камера начинает и заканчивает рендеринг
Ближайшая точка относительно камеры, которая будет
Near
рисоваться
Дальняя точка относительно камеры, которая будет
Far
рисоваться
Четыре значения, отражающие то, в какой области
Normalized
экрана будет выведено изображение с данной камеры,
View Port Rect
в экранных координатах (от 0 до 1)
Начальная позиция области по горизонтали вида
X
камеры, который будет рисоваться
Начальная позиция области по вертикали, где вид
Y
камеры будет рисоваться
W (Width)
Ширина вида камеры на экране
H (Height)
Высота вида камеры на экране
Позиция камеры в очереди отрисовки. Камеры
Depth
с большим значением будут нарисованы поверх камер
с меньшим значением
Опции для определения методов рендеринга для
Rendering Path
камеры
Use Player
Камера использует метод рендеринга, установленный
Settings
в Player Settings
Все объекты рисующиеся этой камерой будут
Vertex Lit
рендериться как Vertex-Lit-объекты
Все объекты будут рендериться с одним проходом на
Forward
материал
Все объекты будут рендериться сначала без освещения,
Deferred
а затем будет произведён рендер освещения для всех
Lighting
объектов разом, в конце очереди рендеринга
Ссылка на Render Texture, которая будет содержать
Target Texture результат рендеринга камеры. Назначение этой ссылки
отключает способность камеры рендерить на экран
HDR
Включение технологии High Dynamic Range
Target Display Which external device to render to. Between 1 and 8
47
Рис. 5.2. Свойства объекта Main Camera
в окне Inspector
Clear Flags (Очищение флагов)
Каждая камера хранит информацию о цвете и глубине, когда
рендерит свой вид. Управление этим свойством в Unity3D представлено на рис. 5.3.
По умолчанию, незаполненные части экрана будут показаны
в виде скайбокса. При использовании нескольких камер, каждая
камера будет иметь свои буферы цвета и глубины, заполняемые
при каждом рендеринге. Каждая камера будет рендерить то, что
видно с её ракурса, а путем изменения настройки Clear Flags можно выбрать набор буферов, которые будут обновлены (очищены), во
время рендеринга. Это осуществляется, выбором одного из четырёх
вариантов:
1) Skybox – это настройка по умолчанию. Пустые участки экрана
будут отображать скайбокс текущей камеры. Если текущая камера не имеет скайбокса, то скайбокс будет использован стандартный
48
Рис. 5.3. Свойство камеры Clear Flags
скайбокс из меню Render Settings (Edit->Render Settings). Если и
там не будет указан скайбокс, то будет использован цвет Background
Color. Также к камере может быть добавлен компонент Skybox.
2) Solid Color – любые пустые части экрана будут отображать текущий фоновый цвет (Background Color) камеры.
3) Depth Only (Только глубина) – если вы хотите рисовать оружие игрока не подвергая его обрезке объектами окружения, внутри
которых оно находится, установите одну камеру, рисующую окружение, с Depth 0, и ещё одну камеру, рисующую оружие – Depth 1.
Для камеры оружия выберите Clear Flags depth only. Это позволит
отобразить окружение на экране, но проигнорировать всю информацию о взаимном положении предметов в пространстве. Когда
оружие будет отрисовано, непрозрачные части будут полностью отрисованы на экране поверх ранее находившегося там изображения,
независимо от того, насколько близко оружие находится к стене.
Оружие отрисовано последним после очистки буфера глубины
предшествовавшей камеры.
4) Don’t Clear (не очищать) – в этом режиме не очищаются ни
цвет, ни буфер глубины. В результате каждый кадр рисуется поверх другого, из-за чего получится эффект размытия. Это обычно
не используется в играх, и лучше использовать вместе с пользовательским шейдером.
Clipping Planes (Плоскости отсечения)
Near и Far в Clipping Plane – свойства, определяющие, где начинается и заканчивается область отрисовки камеры. Эта область
ограничивается плоскостями, перпендикулярными направлению
камеры, и находившимися в этих позициях относительно неё. Near
Plane – это ближайшая позиция, а Far Plane – дальняя позиция.
Плоскости также определяют точность буфера глубины. Для обеспечения наивысшей точности вам следует отодвинуть Near Plane так
49
далеко, насколько возможно. Объекты начинают отрисовываться камерой на расстоянии 0,3 и заканчиваются на расстоянии 1000.
Обратите внимание, что эти плоскости вместе определяют поле
зрения камеры, которое известно как пирамида видимости. Unity
гарантирует, что объекты, полностью находящиеся за ее пределами, не будут отображаться. Это называется Frustum Culling, и это
срабатывает независимо от Occlusion Culling.
Из соображений производительности вы можете прекращать отрисовку мелких объектов раньше, чем отрисовку прочих. Для этого поместите их в separate layer и настройте дистанцию обрезки для
этого слоя, используя функцию Camera.layerCullDistances.
Culling Mask (Маска отбора)
Culling Mask используется для выборочной визуализации (рендеринга) групп объектов с использованием слоев (Layers).
Как правило, хорошей практикой является помещение пользовательского интерфейса в отдельный слой, который будет отрисовывать отдельная камера, игнорирующая все прочие слои, кроме
слоя интерфейса.
Для того, чтобы интерфейс отрисовывался поверх изображений
с других камер, нужно установить Clear Flags в значение Depth
only и выставить камере интерфейса значение Depth выше, чем
у прочих камер.
Viewport Rectangle (Позиционирование камеры)
Viewport Rect определяет части экрана, на которой будет отрисовано изображение с камеры.
Например, для того, чтобы создать два разделенных экрана в настройках каждой камеры следует установить значение X=0, W=1,
Y=0,5 и H=0,5 для первой камеры (сверху) и X=0, W=1, Y=0 и
H=0,5 для второй камеры (снизу). Результат применения приведен
на рис. 5.4.
Depth (Глубина)
Как уже говорилось выше, Unity3D позволяет создавать неограниченное количество камер. Для каждой камеры назначается различная глубина видимого пространства (Depth). Таким образом,
они будут отрисовываться в порядке от меньшей глубины к большей. Другими словами, камера с глубиной 2 будет отрисована поверх камеры с глубиной 1.
50
Рис. 5.4. Результат применения Viewport Rectangles
Projection (Проекция)
Включение ортографического режима (Orthographic) удалит все
перспективные искажения. Обычно это используется при создании
изометрических или двухмерных игр.
HDR (High Dynamic Range)
High Dynamic Range Rendering, часто сокращается до High
Dynamic Range – графический эффект, применяемый в играх для
наиболее выразительного рендеринга изображения при контрастном освещении сцены.
Контрольные вопросы
1. Сколько плоскостей отсечения используется для определения
видимого пространства 3D сцены?
2. Как регулируется область видимого пространства камеры?
3. Сколько камер может быть установлено в 3D сцене?
4. Какие реалистичные визуальные эффекты можно привязать
к камере?
51
5. Как настроить несколько камер так, чтобы была возможность
использовать любую из них как основную?
6. Назовите способы анимации камеры?
7. Возможно ли управление камерой с применением физических законов?
8. Когда применяется включение ортографического режима камеры?
52
Лабораторная работа № 6
«ИЗУЧЕНИЕ МЕХАНИЗМА УРОВНЕЙ
ДЕТАЛИЗАЦИИ»
Цель работы: изучение уровней детализации (LOD) объектов
в интерактивной трехмерной сцене, реализация статического LOD
в Unity3D и анализ его влияния на параметры рендеринга.
Порядок выполнения
1. Ознакомиться с содержанием раздела «Теоретические сведения».
2. Изучить способы подключения уровней детализации (LOD)
объектов в Unity 3D.
3. Создать простейшую тестовую сцену в Unity 3D.
4. Подготовить заданное преподавателем количество 3D моделей объектов с различным уровнем детализации в формате.fbx, используя 3D редактор.
5. Импортировать подготовленные 3D модели в Unity 3D и на их
основе создать дискретный LOD.
6. Проанализировать данные статистики для созданной 3D сцены и сделать выводы.
7. Оформить отчет.
Рекомендации по содержанию тестовой сцены
Тестовая сцена должна содержать:
– стандартный Terrain, или ландшафт, разработанный в предыдущей лабораторной работе;
– First Person Controller;
– Directional Light.
Количество уровней детализации объектов (LOD) от 2 до 4.
Число полигонов для модели нулевого уровня (LOD 0) не должно
быть менее (m+n+s)*100.
Методические указания
Теоретические сведения – статические и динамические LOD, алгоритмы дискретного, непрерывного и видозависимого LOD, борьба с эффектом «перепрыгивания», рассмотрены в [1].
53
Реализация механизма LOD в Unity3D
Unity3D имеет встроенный механизм уровней детализации,
представляющий собой дискретный статический LOD, основанный
на метрике расстояния, заданного в процентном соотношении. Для
использования этого механизма в сцену добавляются специальные
объекты, т.н. LOD Group, к которым далее присоединяются представления объекта для разных уровней детализации. Добавить
LOD Group можно через меню Component → Rendering. В настройках LOD группы выставляются фиксированные значения % от
экранной площади, при которых происходит переключение с одного уровня на другой.
Как и для любого элемента, включенного в дерево сцены, объекты, включенные в LOD Group имеют собственные параметры в окне
Inspector (см. рис. 6.1).
Перед созданием LOD необходимо добавить в сцену пустой игровой объект (GameObject → Create Empty или Ctrl+Shift+N), которому и будет привязана LOD Group. В дальнейшем, чтобы избежать
путаницы, объектам LOD Group рекомендуется давать звучные
имена, например «LOD».
Рис. 6.1. Инспектор для LOD-объекта
54
Добавляются новые уровни к группе через контекстное меню
(Insert Before), вызываемое при щелчке правой кнопки по полосе,
отображающей уровни детализации. Для того чтобы удалить уровень детализации используется пункт Delete.
Перемещая ползунки, разделяющие уровни на этой же полосе,
можно настроить % экранной площади, на которой будет отображаться тот или иной уровень детализации модели. Отметим, также, что последний уровень детализации на полосе настройки, обозначенный «Culled», соответствует полному исчезновению объекта. Этот уровень нельзя удалить с полосы, хотя и можно заставить
объект исчезать только при 0% занимаемой им экранной площади,
когда он и так невидим для камеры.
Рассмотрим работу LOD Group на примере создания простейшей
сцены с геометрическими примитивами, имеющимися в базовом
наборе игрового движка Unity3D. Скриншот сцены приведен на
рис. 6.2.
Для этого воспользуемся объектами двух уровней детализации:
1) для LOD нулевого уровня – LOD0, которому соответствует
высокодетализированное представление объекта, возьмем примитив – сферу, число вершин которой равно 525, а число полигонов
соответствует 760 треугольникам;
2) для LOD первого уровня – LOD1, т. е. низкодетализированное
представление – куб как предельное упрощение сферы, у которого
12 вершин и 24 полигона.
Рис. 6.2. Общий вид 3D-сцены
55
Таким образом, при правильной настройке механизма LOD при
приближении/удалении от объекта (или при изменении размеров
объекта, что также влияет на его экранную площадь) будем наблюдать визуальный переход от сферы к кубу, что в свою очередь значительно изменяет число вершин/треугольников в окне статистики.
На рис. 6.3–6.6 приведены кадры сцены, в которых работает
2-уровневый LOD для простых геометрических форм.
В игровом режиме (нажата кнопка Play) можно наблюдать статистику изменения количественных характеристик сцены. До при-
Рис. 6.3. Уровень 0 – максимальное количество полигонов (шар)
Рис. 6.4. Уровень 1 – промежуточное количество полигонов
56
Рис. 6.5. Уровень 2 – минимальное количество полигонов (куб)
Рис 6.6. Последний уровень детализации, объекты не визуализируются
менения LOD в тестовой сцене уровень fps довольно низкий 45.8,
65 тыс. вершин и 57 тыс. полигонов (см. рис. 6.7). После применения LOD Group наблюдается резкое изменение данных параметров. Уровень fps возрастает до 70 на нулевом уровне LOD и 118 при
включении LOD 1 уровня. Также наблюдается уменьшение числа
вершин и полигонов(рис. 6.8).
57
Рис. 6.7. Статистика до применения LOD
а) LOD 0-уровня
б) LOD 1-уровня
Рис. 6.8. Статистика после применения LOD
Контрольные вопросы
1. Что такое LOD?
2. Перечислите известные вам методы ускорения процесса визуализации интерактивной 3D-сцены?
3. Что происходит с объектом, если уровень LOD = Culled?
58
4. На какие группы делятся алгоритмы LOD?
5. Перечислите имеющиеся классификации LOD алгоритмов,
если они существуют. 
6. Назовите и недостатки статических LOD-алгоритмов. 
7. Назовите преимущества и недостатки динамических LODалгоритмов
8. Назовите преимущества и недостатки видозависимого LODалгоритма.
59
Лабораторная работа № 7
«ОЗНАКОМЛЕНИЕ С ФУНКЦИОНАЛЬНЫМИ
ВОЗМОЖНОСТЯМИ УПРАВЛЕНИЯ
ПИРАМИДОЙ ВИДИМОСТИ»
Цель работы: изучение функциональных возможностей управления пирамидой видимости в Unity3D, исследование возможностей функции Occlusion Culling на тестовой модели.
Порядок выполнения
1. Ознакомиться с содержанием раздела «Теоретические сведения».
2. Изучить функциональные возможности управления пирамидой видимости, предоставленные Unity3D.
3. В Unity3D создать тестовую сцену.
4. Исследовать возможности функции OcclusionCulling на тестовой сцене.
5. Предоставить результаты проверки сгенерированной окклюзии:
a) окно статистики (до и после применения OcclusionCulling);
б) скриншоты экрана в режиме Visualize (до и после применения OcclusionCulling).
6. Сделать выводы о проделанной работе.
7. Оформить отчет.
Рекомендации по содержанию тестовой сцены
Тестовая сцена должна содержать: – Стандартный Terrain –
Глобальное освещение (Directionallight) – First Person Controller –
Стандартные примитивы: – куб (n*n*n) ~ 20 шт. – куб (5n*n*n) ~
20 шт. – куб (n*5n*n) ~ 20 шт. – куб (n*n*5n) ~ 20 шт.
– куб (n*n*n) ~ 10 шт. Стандартные примитивы должны быть
расставлены в случайном порядке, например, так, как показано на
рис. 7.1.
Методические указания
Теоретические сведения – использование современных механизмов управления количеством объектов сцены, попадающих
в пирамиду видимости – OcclusionCulling (Удаление скрытых частей) и PVS (PotentiallyVisibleSet – потенциально видимый набор),
рассмотрены в [1].
60
Рис. 7.1. Пример расположения объектов сцены
Настройка Occlusion Culling
Для использования OcclusionCulling необходимо выполнить
ряд настроек. Первый этап – разбиение всей геометрии сцены на
части разумного размера. Также важно разбить уровни на небольшие, четко определенные области, которые закрыты другими
крупными объектами (здания, стены и т. п.) Видимость каждого меша будет включатся и выключатся в зависимости от данных
OcclusionCulling. Например, если выделить каждый объект интерьера отдельным мешем, то они будут видны или невидимы в зависимости от поворота камеры. Либо если есть объект, который содержит все элементы интерьера, тогда весь набор будет либо виден,
либо невиден. Во-первых, в Inspectorследует обозначить объекты,
которые нужно включить в OcclusionCulling как OcclusionStatic.
Наиболее быстрый путь – мультивыделение объектов, каждый раз
помечая их как OcclusionStatic или OccludeeStatic (см. рис. 7.2).
OccludeeStatic используется для прозрачных или очень маленьких
объектов, которые ничего не закрывают сами, но будут закрываться другими объектами. Это помогает уменьшить вычисления.
Для основных настроек OcclusionCulling удобнее использовать
окно OcclusionCulling (Window ->OcclusionCulling) (рис. 7.3).
В данном окне можно работать либо с OcclusionMesh, либо
OcclusionArea.
61
Рис. 7.2. Обозначение объекта для OcclusionCulling
Рис. 7.3. Окно OcclusionCulling
62
OcclusionArea
Во-первых, если не задать OcclusionAreas, то по умолчанию
OcclusionCulling будет применено ко всей сцене целиком.
Во-вторых, когда камера находится вне OcclusionArea, то OcclusionCulling не будет работать. Необходимо установить OcclusionAreas, чтобы определить места, где может находится камера.
В-третьих, слишком большие области OcclusionArea усложняют
процесс Backing. Для того, чтобы применить OcclusionСulling к динамичным объектам, создаются OcclusionArea. Размер меняется
таким образом, чтобы в ней поместились все необходимые объекты. Для того, чтобы создать OcclusionArea, нужно добавить компонент OcclusionArea пустому GameObject. GameObject (Component >
Rendering > Occlusion Area из пункта меню) (рис. 7.4 и 7.5).
Рис. 7.4. Создание Occlusion Area
63
Рис. 7.5. Окно настроек Оптимизированной площади
и результат построение Occlusion Area
Таблица 7.1
Настройки Occlusion Area
Свойство
Функция
Size
Определяет размер зоны отсечения
Позволяет выставить центр зоны отсечения. По умолчанию его
Center значение равно 0,0,0 и расположен он как правило в центре
цветного бокса
Определяет, где может находиться камера. Выставляйте этот
Is View
флажок, если вам необходимо отсечь статичные объекты
Volume
именно в этой зоне отсечения
После того, как была создана OcclusionArea, необходимо проверить, каким образом произошло разбиение бокса на клетки. Для
этого нужно выбрать Edit и в панели OcclusionCulling Preview Panel
нажать кнопкуView (рис. 7.6).
Рис. 7.6. Occlusion Culling Preview Panel
64
Occlusion Culling – Bake
Рис. 7.7. Окно настроек Bake Таблица 7.2. Типы Baking
Таблица 7.2
Настройки Backing
Свойства
Smallest
Occluder
Smallest
Hole
Функция
Размер минимального объекта, который способен скрыть
другие объекты при выполнении Occlusion Culling. Любые объекты меньшего размера, никогда не будут вызывать
Occlusion Culling, для объектов, которые они заслоняют. Например, если поставить значение параметра 5, то объекты которые выше или шире, чем 5 метров будут скрывать объекты,
скрытые за ними. Выбор правильного значения параметра
является балансом между точностью окклюзии и объемом
данных Occlusion Culling
Это значение представляет собой наименьший разрыв, через
который объекты могу просматриваться камерой. Значение
представляет собой диаметр объекта, который может
поместиться в отверстии. Если в сцене имеются небольшие
трещины, через которые камеры должна видеть, то значение
должно быть меньше
65
Окончание табл. 7.2
Свойства
Функция
Окклюзия Unity3D использует оптимизацию размера данных,
которая сокращает их объем, отбрасывая ненужные детали,
проверяя обратные стороны объектов. Значение по умолчанию
100 не удаляет обратные части объектов из набора данных,
когда значение 5 агрессивно сокращает объем данных.
Backface
Идея заключается в том, что как правило, в зону вилимости
Threshold
камеры не попадают такие поверхности, как обратная сторона
ландшафта или внутренние поверхности твердотельного
объекта. Со значением параметра меньше 100, Unity удалит
эти области из набора данных, тем самым уменьшив объем
хранимой информации
После того, как будут завершены все настройки, чтобы начать
процесс OcclusionCulling следует нажать кнопку Bake.
При включении визуализации View Volumes, с вкладкой Bake
(рис. 7.8) можно увидеть сгенерированные области.
Проверка результатов окклюзии
Для того, чтобы проверить сгенерированную окклюзию выберите OcclusionCulling (в панели Occlusion Culling Preview Panel выберите режим Visualize) и перемещайте камеру (MainCamera) в режиме SceneView (рис. 7.9, 7.10).
Рис. 7.8. Области Occlusion Culling
66
Рис. 7.9. Скриншот сцены до применения OcclusionCulling
Рис. 7.10. Скриншоты сцены после применения
функции OcclusionCulling
67
Контрольные вопросы
1. Для чего требуется применение механизмов управления количеством объектов сценой, попадающих в пирамиду видимости?
2. Что относится к основным моментам настройки функции
OcclusionCulling?
3. Когда следует использовать OccludeeStatic?
4. Что такое OcclusionArea?
5. Какие показатели определяют качество сгенерированной окклюзии?
68
Лабораторная работа № 8
«РАЗРАБОТКА ПРОСТОЙ
МНОГОПОЛЬЗОВАТЕЛЬСКОЙ ИГРЫ»
Цель работы: разработка простой многопользовательской игры
в Unity3D, создание аватара игрока и настройка системы «клиентсервер» на основе мастер-сервера Unity3D.
Порядок выполнения
1. Ознакомиться с содержанием раздела «Теоретические сведения».
2. Создать в Unity3D новый проект и пустую сцену.
3. Подготовить игровой уровень.
4. Создать аватар игрока.
5. Подключить скрипт управления аватаром «PlayerMovement»,
приведенный в разделе «Теоретические сведения».
6. Добавить компонент «Rigidbody», подключая тем самым физику к аватару.
7. Проверить работоспособность аватара, запустив сцену в режиме игры.
8. Создать многопользовательский режим взаимодействия аватаров, используя компонент NetworkManager.
9. Создать интерфейс игры на основе скрипта «Game Menu»,
приведенного в разделе «Теоретические сведения».
10. Для проверки результата запустить минимум два приложения одновременно на одном компьютере (проект необходимо собрать как File → Build Settings… → Build).
В первом приложении – создать игру, во втором – подключиться к созданной игре и проверить корректность работы. (Изменения
в игре не видны в неактивном окне).
11. Оформить отчет.
Рекомендации по содержанию тестовой сцены
Игровой уровень должен содержать:
– плоскость(Plane), выступающую в роли поверхности;
– камеру (main Camera);
– источник света (например, Directional Light);
– аватар игрока может быть промоделирован простыми геометрическими объектами.
69
Методические указания
Существует несколько способов организации многопользовательской игры, основными из которых являются построение одноранговой сети и создание системы «клиент-сервер».
Первый способ подразумевает распределение нагрузки по обработке данных игры между всеми устройствами сети, при втором основная нагрузка ложится на одно или несколько серверных
устройств, на остальных нагрузка сводится к минимуму.
В «чистых» многопользовательских играх основным является
второй способ, который не только расширяет пользовательскую
базу (так как в игру могут играть люди с более слабыми устройствами) но и позволяет эффективно решать многие задачи, трудновыполнимые в одноранговой сети (например, настройка и администрирование игры, технические работы или борьба с читерами).
В Unity3D версий 5.1 и выше встроена новая усовершенствованная сетевая система, которая обладает большей гибкостью и мощностью, чем в более ранних версиях.
В сетевой технологии Unity в игре есть Сервер и множество Клиентов. Когда нет выделенного сервера, один из клиентов играет
роль сервера, тогда этот клиент называется «Хост» (рис. 8.1).
Хост является и сервером, и клиентом в одном процессе. Хост
использует особый тип клиента, называемый LocalClient, а другие
RemoteClients. RemoteClients подключаются к серверу через интернет соединение.
Цель сетевой технологии Unity3D в том, чтобы код программы
для LocalClients и RemotrClients был одним и тем же, так чтобы разработчикам приходилось думать только об одном типе клиентов.
Рис. 8.1. Схема мультиплеерного приложения Unity
70
В Unity3D версиях 5.1 и более поздних реализован компонент
NetworkManager для управления состоянием сети мультиплеерной игры. NetworkManager предоставляет широкую функциональность в одном компоненте и делает разработку, тестирование
и запуск мультиплеерных приложений максимально простыми.
NetworkManager может быть использован практически без написания скриптов.
Для начала работы необходимо создать в Unity3D новый проект
и пустую сцену. Перед тем, как приступить к разработке аватара
игрока необходимо подготовить игровой уровень (рис. 8.2). В рамках лабораторной работы достаточно создать плоскость (Plane), выступающую в роли поверхности, камеру и источник света (например, Directional Light).
После создания уровня можно приступить к созданию аватара
игрока. Для начала создадим визуальное представление аватара,
например, куб, и разместим его на сцене.
Далее в ресурсах проекта необходимо создать типовой объект
«Player» (Assets → Create → Prefab) и перетащить куб с панели иерархии (Hierarchy) на его иконку. Затем куб можно удалить со сцены и вместо него разместить типовой объект (рис. 8.3).
Теперь приступим к созданию управления аватаром.
Рис. 8.2. Создание игрового уровня
71
Рис. 8.3. Создание типового объекта
Создадим скрипт «PlayerMovement» (Assests → Create → C#
Script). Открываем скрипт и заменяем код на следующий:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PlayerMovement : NetworkBehaviour
{
public float speedForward = 2f;
public float speedBackward = 1f;
public float speedJump = 5f;
public float speedTurn = 400f;
private NavMeshAgent navMeshAgent;
void Update()
{
InputMovement();
}
private void InputMovement()
{
//walk forward
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, 0, speedForward * Time.deltaTime);
}
72
if (Input.GetKeyDown(KeyCode.Space))
{
CmdMakeCrate();
}
}
}
//run forward
if (Input.GetKeyDown(KeyCode.LeftShift))
{
speedForward *= 2f;
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
speedForward *= 0.5f;
}
//walk backward
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, 0, -speedBackward * Time.deltaTime);
}
//Rotate
if (Input.GetKey(KeyCode.D))
transform.Rotate(0, speedTurn * Time.deltaTime, 0);
if (Input.GetKey(KeyCode.A))
transform.Rotate(0, -speedTurn * Time.deltaTime, 0);
//Jump
if (Input.GetKey(KeyCode.Space))
{
transform.Translate(0, speedJump * Time.deltaTime, 0);
}
Теперь скрипт можно добавить к типовому объекту (Component →
Scripts → Player Movement).
Далее добавляем к типовому объекту компонент «Rigidbody»
(Component → Physics → Rigidbody), подключая тем самым физику
к аватару. Настройки компонента приведены на рис. 8.4.
Проверяем работоспособность аватара, запустив сцену в режиме
игры. Если аватар «слушается» управления, то можно переходить
к разработке многопользовательского режима.
В начале лабораторной работы аватар был помещен на сцену
вручную, в многопользовательском режиме он должен появлять73
Рис. 8.4. Компонент «Rigidbody»
Рис. 8.5. Настройка компонента
NetworkManager
74
Рис. 8.6. Настройка сетевых
компонентов игрока
ся на сцене при подключении к игре нового пользователя и подчиняться только ему.
Для создания многопользовательского режима игры необходимо создать объект, отвечающий за сетевой режим. Создадим пустой объект на сцене (GameObject → Create Empty). Назовем его
NetManager. Добавим к новому объекту компонент NetworkManager
и настроим в соответствии с рис. (рис. 8.5).
В поле Player Prefab необходимо добавить префаб игрока, который создается при подключении игрока к серверу. Для этого необходимо отредактировать раннее созданный префаб игрока и добавить компоненты Network Identity и NetworkTransform и настроить в соответствии с рис. 8.6.
Компонент Network Identity отвечает за идентификацию каждого игрока на сервере. Компонент NetworkTransform отправляет
данные о перемещении объекта с клиента на сервер.
Приведенный выше скрипт «PlayerMovement» в многопользовательском режиме будет работать некорректно, так как отсутствует четкое указание скрипту управлять «своим» аватаром, а также
синхронизация между разными аватарами.
Изменим код скрипта на следующий:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PlayerMovement : NetworkBehaviour
{
public float speedForward = 2f;
public float speedBackward = 1f;
public float speedJump = 5f;
public float speedTurn = 400f;
void Update()
{
if (!isLocalPlayer)
{
return;
}
InputMovement();
}
private void InputMovement()
{
75
//walk forward
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, 0, speedForward * Time.deltaTime);
}
}
}
}
//run forward
if (Input.GetKeyDown(KeyCode.LeftShift))
{
speedForward *= 2f;
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
speedForward *= 0.5f;
}
//walk backward
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, 0, -speedBackward * Time.deltaTime);
}
//Rotate
if (Input.GetKey(KeyCode.D))
transform.Rotate(0, speedTurn * Time.deltaTime, 0);
if (Input.GetKey(KeyCode.A))
transform.Rotate(0, -speedTurn * Time.deltaTime, 0);
//Jump
if (Input.GetKey(KeyCode.Space))
{
transform.Translate(0, speedJump * Time.deltaTime, 0);
}
Теперь осталось лишь создать интерфейс. Для создания стандартного интерфейса мультиплеерной игры необходимо добавить
к объекту NetManager компонент NetworkManagerHUD (рис. 8.7).
Проверяем получившийся результат (рис. 8.8–8.9). Для проверки достаточно запустить минимум два приложения одновременно
на одном компьютере, для чего проект необходимо собрать (File →
Build Settings… → Build). Запускаем приложения, первую игру запускаем в режиме Host, вторую в режиме Client. Проверяем работу
76
Рис. 8.7. Настройка компонента
NetworkManagerHUD
Рис. 8.8. Запущено два экземпляра приложения
Рис. 8.9. Игроки в режиме Host и Client
приложения. После запуска двух игр в игре должно отобразиться
два игрока. Переключение между окнами позволяет управлять
игроками.
77
Контрольные вопросы
1. Что представляет собой аватар игрока?
2. Какие новые качества добавляет аватару компонент «Rigidbody»?
3. Какой скрипт обеспечивает управление аватаром в однопользовательском режиме работы?
4. Как проверить работоспособность аватара?
5. Какие компоненты Unity3D отвечают за появление аватаров
администратора и игроков в многопользовательской игре?
6. Что является основой для разработки пользовательского интерфейса?
7. Как проверить работу многопользовательской игры с помощью одного компьютера?
78
Лабораторная работа № 9
«РАЗРАБОТКА ИНТЕЛЛЕКТУАЛЬНОГО АВАТАРА»
Цель работы: разработка простого интеллектуального аватара
(бота) для игры, реализованной в лабораторной работе № 8.
Порядок выполнения
1. Открыть проект, созданный в лабораторной работе № 8.
2. Создать визуальное представление(заготовку)бота, отличное
от представления аватара игрока.
3. Добавить компонент «Rigidbody», отвечающий за физическое
взаимодействие объекта с окружающим миром.
4. «Научить» бота перемещаться по игровому уровню, используя поиск пути с помощью навигационной модели (см. раздел «Теоретические сведения»).
5. «Научить» бота реагировать на перемещение игрока (см. раздел «Теоретические сведения»).
6. Откорректировать характеристики аватара игрока, опираясь
на реакцию бота и сведения, приведенные в разделе «Теоретические сведения».
7. Создать скрипт «BotAI», реализующий систему принятия решений и добавить к боту.
8. Для проверки результата работы запустить игру. Если бот
преследует близко подошедшего игрока, то лабораторная работа
выполнена.
9. Оформить отчет.
Методические указания
Теоретические сведения – общий состав системы игрового искусственного интеллекта, системы восприятия, навигации, принятия решений на основе правил, рассмотрены в [1].
Открываем проект, созданный в ходе предыдущей лабораторной
работы. Создаем визуальное представление бота, отличное от такового у аватара игрока. Создаем типовой объект (Prefab), перетаскиваем модель с панели иерархии (Hierarchy) на иконку типового
объекта, удаляем модель.
Таким образом, у нас имеется заготовка бота. Теперь к нему, как
и к аватару игрока необходимо подключить компонент «Rigidbody»
(Component → Physics → Rigidbody), отвечающий за физическое
79
Рис. 9.1. Компонент «Rigidbody»
взаимодействие объекта с окружающим миром. Настройки компонента приведены на рис 9.1.
Следующий шаг – «научить» бота перемещаться по уровню используя поиск пути с помощью навигационной модели. Для этого
сначала нужно подключить компонент «NavMeshAgent» к боту
(Component → Navigation → NavMeshAgent). Затем создаем саму
модель на основе нашей поверхности. Для этого указываем в настройках поверхности атрибут Static (рис. 9.2).
Далее вызываем панель «Navigaion» (Window → Navigaion) и запускаем процесс генерации модели (кнопка Bake). Результат должен соответствовать рис. 9.3.
Рис. 9.2. Атрибут «Static»
Рис. 9.3. Сгенерированная навигационная модель
80
Создадим скрипт «BotMovement» и добавим в него следующий код:
using UnityEngine;
using System.Collections;
public class move : MonoBehaviour {
private Vector3 movementTarget;
private NavMeshAgent navMeshAgent;
private float distanceToTarget;
public float maxDistanceToTarget = 2.0f;
private Vector3 initialPosition;
// Use this for initialization
void Start () {
navMeshAgent = GetComponent<NavMeshAgent>();
initialPosition=transform.position;
}
}
}
void Update () {
distanceToTarget = Vector3.Distance(movementTarget, transform.position);
if (distanceToTarget > maxDistanceToTarget)
{
navMeshAgent.SetDestination(movementTarget);
}
else
{
navMeshAgent.SetDestination(initialPosition);
}
}
public void SetMovementTarget(Vector3 target)
{
movementTarget = target;
}
public Vector3 getInitialPosition()
{
return initialPosition;
Добавляем скрипт к боту. Теперь «научим» бота реагировать на
перемещение игрока. Добавим к боту «область реакции» представляющую собой компонент «Sphere Collider» (Component → Physics
→ Sphere Collider) настроенный как триггер (рис. 9.4).
81
Рис. 9.4. Компонент «Sphere Collider»
Далее создаем новый скрипт «BotTrigger», определяющий
присутствие аватара игрока через зону реакции и так же добавим
к боту:
using UnityEngine;
using System.Collections;
public class BotTrigger : MonoBehaviour
{
private BotAI AI;
private Transform intruder;
void Start()
{
AI = GetComponent<BotAI>();
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
AI.setDisturbedState(true);
intruder = other.transform;
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
AI.setDisturbedState(false);
}
82
}
}
public Transform getIntruder()
{
return intruder;
}
Как видно из кода скрипта, бот «реагирует» только на объекты
с тегом «Player».
И последний шаг – создание скрипта «BotAI», реализующего
систему принятия решений:
using UnityEngine;
using System.Collections;
public class BotAI : MonoBehaviour
{
private BotTrigger trigger;
private move movement;
private bool stateWounded;
private bool stateDisturbed;
void Start()
{
trigger = transform.GetComponent<BotTrigger>();
movement = transform.GetComponent<BotMovement>();
stateDisturbed = false;
}
void Update()
{
if (stateDisturbed)
{
Transform intruder = trigger.getIntruder();
movement.SetMovementTarget(intruder.position);
}
if (!stateDisturbed)
{
movement.SetMovementTarget(movement.getInitialPosition());
}
}
public void setDisturbedState(bool state)
{
stateDisturbed = state;
}
}
83
Рис. 9.5. Результат преследования
Добавляем скрипт к боту и запускаем игру (рис. 9.5). Если бот
преследует близко подошедшего игрока, то лабораторная работа
выполнена правильно.
Контрольные вопросы:
1. Что представляет собой интеллектуальный аватар – бот ?
2. Какие новые качества добавляет боту компонент «Rigidbody»?
3. Какой компонент Unity 3D задает «область реакции» бота?
4. Какой скрипт обеспечивает интеллектуальное поведение бота?
5. Как проверить реакцию бота на действия аватара игрока?
84
Лабораторная работа № 10
«РАЗРАБОТКА УСЛОЖНЕННОГО АУДИОПЛЕЕРА»
Цель работы: ознакомиться с принципами создания и использования скриптов в Unity3D, разработать аудиоплеер и скомпилировать.exe файл проекта.
Порядок выполнения
1. Ознакомиться с содержанием раздела «Теоретические сведения».
2. В Unity 3D создать тестовую сцену.
3. С использованием скриптов создать аудиоплеер.
4. Предоставить результаты работы скрипта.
5. Сделать выводы о проделанной работе
6. Оформить отчет.
Методические указания
В данной лабораторной работе описана разработка полнофункционального плеера. Описание включает: привязку источника звука, написание нового скрипта, привязку аудио треков.
Создаваемый плеер включает меню, которое будет вызываться
клавишей «P» и содержит кнопки: включение музыки, выключение
музыки, выход из меню плеера, окно с отсчётом времени до конца
трека, окно регулировки громкости и набор кнопок для выбора трека. По клавише «music on» включается музыка, по клавише «music
off» музыка выключается, по клавише «back in game» меню плеера
закрывается. Окно «last time» и поле прокрутки под ним показывают оставшееся время трека, окно «volume» показывает уровень
громкости по шкале от 1 до 10, а вертикальное поле прокрутки под
ним служит регулятором самой громкости. Десять клавиш с надписями «track», соответствуют проигрываемым трекам, при нажатии
происходит выбор трека и автоматический запуск.
Для удобства управления плеером введено управление с клавиатуры, не требующее открытия меню плеера. Для управления назначены клавиши:
– стрелки вправо и влево – переключение треков;
– стрелки вниз и вверх – регулировка громкости;
– правый Shift – запуск и остановка воспроизведения.
В первую очередь необходимо создать источник звука, для этого
выберем в разделе иерархии First Person Controller и подключим
85
источник к нему (Component → Audio → AudioSource). Он появится
в инспекторе под Audio Source, для предотвращения каких либо осложнений заранее снимите все флаги.
Необходимо написать скрипт, который будет описывать работу
меню. В окне Project нажимаем Create и выбираем язык, на котором
будет написан скрипт – С#. Имя скриптового файла задайте Player.
В скрипте необходимо объявить переменные:
– bool Menu – отображение меню плеера;
– bool on – контроль включения и выключения меню плеера
с клавиатуры;
– bool play – контроль включения и выключения воспроизведения с клавиатуры;
– public AudioClip w – пустая переменная аудио трека для выключения музыки (так как в скрипте много пунктов включения
музыки, для предотвращения ошибок вместо выключения музыки
задаётся пустой трек);
– int nt = 0 – переменная с номером трека из списка;
– public AudioClip[] q – массив для аудио треков;
– public float sliderValue = 1.0F – начальная переменная для задания поля прокрутки громкости;
– public float rValue = 1.0F – начальная переменная для задания
поля оставшегося времени воспроизведения трека;
– public float d – переменная контроля общей длины аудио трека
в секундах;
– public float t – переменная контроля текущего времени проигрывания аудио трека;
– public string[] selStrings – массив для создания выборки клавиш (списка треков).    
Напишем скрипт аудиоплеера
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
bool Menu;
bool on;
bool play;
public AudioClip w;
int nt = 0;
public AudioClip[] q;
public float sliderValue = 1.0F;
public float rValue = 1.0F;
86
public float d;
public float t;
public string[] selStrings = new string[] {"track 1", "track 2", "track 3", "track 4", "track 5", "track 6", "track 7", "track 8", "track 9", "track 10"};
Можно сразу предустановить, что изначально мы находимся
в режиме игры, поэтому можно сразу задать стартовое значение некоторых переменных.
void Start () {
GetComponent<AudioSource>().clip = w;
Menu=false;
on=true;
}
Зададим функцию Update, которая должна содержать условия
для обработки команд, поступающих с клавиатуры (кроме контроля громкости) и обновление переменных «d» и «t». Также опишем
работу цикла переключения трека по окончанию текущего, т. е.
как только заканчивается текущий трек, включается новый, а по
окончанию списка треков он начинается сначала.
void Update () {
if (Input.GetKeyDown (KeyCode.P)) {
Menu = on;
on = true;
}
if (Input.GetKeyDown (KeyCode.RightShift)) {
if (play) {
GetComponent<AudioSource> ().clip = w;
GetComponent<AudioSource> ().Play ();
play = false;
} else {
GetComponent<AudioSource> ().clip = q [nt];
GetComponent<AudioSource> ().Play ();
play = true;
}
}
if (Input.GetKeyDown (KeyCode.RightArrow)) {
if (nt < q.Length – 1) {
nt++;
GetComponent<AudioSource> ().clip = q [nt];
87
GetComponent<AudioSource> ().Play ();
} else {
nt = 0;
GetComponent<AudioSource> ().clip = q [nt];
GetComponent<AudioSource> ().Play ();
}
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
if (nt > 0) {
nt--;
GetComponent<AudioSource> ().clip = q [nt];
GetComponent<AudioSource> ().Play ();
} else {
nt = q.Length – 1;
GetComponent<AudioSource> ().clip = q [nt];
GetComponent<AudioSource> ().Play ();
}
}
d = GetComponent<AudioSource> ().clip.length;
t = GetComponent<AudioSource> ().time;
if (!GetComponent<AudioSource> ().isPlaying) {
if (nt < q.Length – 1) {
nt++;
GetComponent<AudioSource> ().clip = q [nt];
GetComponent<AudioSource> ().Play ();
} else {
nt = 0;
GetComponent<AudioSource> ().clip = q [nt];
GetComponent<AudioSource> ().Play ();
}
}
}
Далее с помощью метода OnGUI зададим три первых клавиши
меню плеера.
void OnGUI()
{
if(Menu)
{ on=false; GUILayout.BeginArea(new Rect(0, 0, 300, 30));
88
GUILayout.BeginHorizontal();
if(GUILayout.Button("music on"))
{
GetComponent<AudioSource>().clip=q[nt];
GetComponent<AudioSource>().Play();
}
if(GUILayout.Button("music off"))
{ GetComponent<AudioSource>().clip = w;
}
if(GUILayout.Button("back in game"))
{ Menu=false;
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//Далее здесь же зададим окно громкости и вертикальное поле прокрутки громкости, которое будет отсылать на контроллер громкости источника звука его новое значение с шагом изменения 0.1 и пределами от 0 до 1. Также здесь прописан контроль громкости с клавиатуры, но уже с шагом изменения громкости 0.2.
GUILayout.BeginArea(new Rect(800,0, 200, 200)); GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.Box("Volume:" + Mathf.Round(sliderValue));
sliderValue = GUILayout.VerticalSlider(sliderValue, 0.0F, 10);
if(Input.GetKeyDown(KeyCode.UpArrow))
{if (GetComponent<AudioSource>().volume < 1)
{
sliderValue=sliderValue+1;
}}
if(Input.GetKeyDown(KeyCode.DownArrow))
{ if (GetComponent<AudioSource>().volume > 0)
{
sliderValue=sliderValue-1;
}} GetComponent<AudioSource>().volume=Mathf.Round(sliderValue)/10; GUILayout.EndVertical();
GUILayout.EndArea(); //Аналогично настройке контроллера громкости задаём индикатор времени до окончания воспроизведения аудио трека.
89
GUILayout.BeginArea(new Rect(0,31, 400, 60)); GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.Box("last time:" + (d-Mathf.Round(rValue)));
rValue = GUILayout.HorizontalSlider(t, 0.0F, d);
GUILayout.EndVertical();
GUILayout.EndArea(); //По окончании работы меню плеера задаются условия для срабатывания клавиш выбора трека. Данные условия повторяют друг друга, за исключением изменяющегося названия сработавшей кнопки и соответствующего ей аудио трека, который будет запущен по нажатию, поэтому далее представлены условия для срабатывания первой клавиши, а остальные предлагается дописать самостоятельно в зависимости от того, сколько треков вы хотите вывести на выбор. GUILayout.BeginArea(new Rect(400,0, 400, 800));
if( GUILayout.Button("track 1" )){
nt=0;
GetComponent<AudioSource>().clip = q[nt];
GetComponent<AudioSource>().Play();}
GUILayout.EndArea();
}}
}
}
Текст скрипта готов. Сохраняем его в редакторе (File → Save).
Переключаемся на Unity3D, ждем некоторое время пока будет
скомпилирован только что написанный скрипт.
Перед дальнейшей работой с плеером следует внести в проект
аудио треки, которые будут далее подключены к плееру. Для этого берём любые аудио файлы, которые вы захотите (желательно
в формате.ogg) и копируем их в папку проекта или по попросту
перетаскиваем их в окно проекта в Unity3D.
После компиляции скрипта перетаскиваем его из окна проекта
в окно иерархии на First Person Controller. В инспекторе должен
появиться блок скрипта, в котором следует задать размер для переменной Q (количество аудио треков, которые будут подключены), а
затем назначить каждый трек. Остальные настройки оставить как
показано на рис. 10.1.
Теперь можно запускать игру, в которой можно увидеть созданное меню плеера (рис. 10.2).
По настройки и проверки плеера, необходимо собрать все выполненные ранее лабораторные работы в один проект. Далее необходи90
Рис. 10.1. Подключение треков
Рис. 10.2. Демонстрация меню плеера
мо проверить клавиши, на которые назначены действия скриптов
во избежание параллельного срабатывания. Затем, следует скомпилировать готовое приложение. Для этого зайдите в меню настройки компиляции (File → Build Settings) и в открывшемся окне
(рис. 10.3) выберете пункт «PC and MAC Standalone» (также в данном окне можно увидеть под какие ещё операционные системы и
платформы можно скомпилировать проект).
Для компиляции текущей сцены выберите «Add Current».
В окне «Scenes in build» появится название текущей сцены. В пун91
Рис. 10.3. Окно настройки компиляции
кте «Target Platform» выберете «Windows» с правильной разрядностью (32 или 64). Также можно произвести дополнительные настройки компиляции, нажав «Player Settings». По окончании настройки нажмите «Build», выберите место для размещения и имя
приложения. В течение пары минут Unity3D скомпилирует готовый к автономному запуску.exe файл.
Контрольные вопросы
1. С объектом, какого типа работает AudioClip?
2. Какими из имеющихся в сцене объектов управляет созданный для меню скрипт?
92
3. Как работает алгоритм переключения трека по окончанию текущего?
4. С помощью, каких команд скрипта настраиваются параметры
воспроизведения звука?
5. Под какие платформы и операционные системы можно создавать проекты?
93
Лабораторная работа № 11
«СОЗДАНИЕ ПРИЛОЖЕНИЯ ДОПОЛНЕННОЙ РЕАЛЬНОСТИ
С ПОМОЩЬЮ БИБЛИОТЕКИ VUFORIA ДЛЯ UNITY3D»
Цель работы: разработка приложения дополненной реальности
с использованием инструментов Unity3D и библиотеки Qualcomm
Vuforia для Unity3D.
Для выполнения лабораторной работы необходимы:
– доступ в интернет;
– библиотека Qualcomm Vuforia;
– наличие web-камеры.
Порядок выполнения
1. Установка библиотеки Qualcomm Vuforia.
2. Создание и распознавание мишени (маркера).
3. Создание приложения дополненной реальности (ДР).
4. Проверка приложения ДР.
5. Оформление отчета.
Методические указания
Vuforia – это платформа для создания приложений дополненной реальности для телефонов, планшетов и компьютеров с вебкамерой. Платформа предоставляет удобные средства для разработчиков, которые позволяют использовать технологию дополненной реальности в трехмерных приложениях.
Для начала работы необходимо создать в Unity3D новый проект
и подключить библиотеку Vuforia. Библиотеку Vuforia можно либо
скачать с сайта www.developer.vuforia.com, либо использовать имеющуюся в папке Lab Vuforia\библиотека для Unity3D.
Порядок скачивания библиотеки с сайта:
– Перейти на сайт https://developer.vuforia.com.
– Нажать кнопку Download.
– Нажать на ссылку Unity Extension.
– Нажать на ссылку Download Unity Extension x.x.x for Android
& iOS, где x.x.x – номер версии библиотеки Vuforiaю
Для того чтобы подключить библиотеку нужно зайти в меню
Assets → Import Package → Custom Package…(рис. 11.1). Переходим в папку, в которой находится библиотека и открываем файл
vuforia-unity-android-ios.unitypackage.
94
Рис. 11.1. Меню добавления пакетов для Unity3D
В открывшемся окне (рис. 11.2) нужно нажать кнопку «Import».
Рис. 11.2. Подключаемые файлы, содержавшиеся в пакете Vuforia
95
Для работы нужно на сайте создать файл с мишенями для
ImageTarget. Изображения для мишеней можно взять своё или скачать из интернета.
Для нормальной работы Image Target, нужно чтобы на сайте при
добавлении в мишень изображения выдавало бы не менее 2 звёздочек.
Хорошими изображениями для мишеней являются те, в которых много контрастных деталей. Именно на этих деталях и строится опорная матрица для последующего распознания мишеней.
Если не получается найти изображение подходящее для мишени, то берём любое изображение из папки …\Lab Vuforia\Image\...
Порядок создания файла с мишенями:
1. Зайти на сайт – https://developer.vuforia.com/
2. Создать свой аккаунт или получить его у преподавателя.
3. Перейти в Target Manager.
4. С помощью кнопки «Create Database» создать базу для своих
мишеней(Target).
5. Войти в созданную базу.
6. Для создания новой мишени нажать на кнопку «Add Target».
7. Выбрать тип мишеней (например, Image Target).
8. Задать параметры мишени и нажать кнопку «Add».
9. Для загрузки мишени нужно её выделить(для выделения нужно поставить галочку у нужной мишени или у нескольких мишеней).
10. Нажать кнопку «Download Selected Targets», выбрать Unity
Editor, ввести название создаваемого файла и нажать кнопку
«Create».
Также можно использовать готовые мишени с носителя:
(…\Lab Vuforia\ImageTarget.unitypackage).
Файл с мишенями подключается так же как и библиотека
Vuforia, т. е. через подключение пакетов.
Для создания приложения ДР нужно:
1. Разместить камеру ДР (ARCamera) и настроить её(В Data
Set Load Behaviour поставить галки в полях Load Data Set exam и
Activa) (рис. 11.3).
2. Создать и настроить ImageTarget (рис. 11.4).
2.1. Размещаем Target в проекте. Для этого в Assets переходим
в Qualcomm Augmented Reality – Prefabs и находим ImageTarget.
2.2. В поле Data Set выбрать нужный файл с мишенями, а в поле
Image Target выбрать мишень (рис. 11.5).
3. Разместить объект (3D модель, текст, картинку) в сцене так,
чтобы он был в поле обзора камеры, и поставить зависимость объек96
Рис. 11.3. Параметры камеры
97
Рис. 11.4. Все объекты, которые добавляются библиотекой Vuforia
Рис. 11.5. Настройка ImageTarget
та от Target (на рис. 11.6 выделено красным, как нужно поставить
зависимость объекта от Target).
Для добавления в проект 3D модели в формате *.max или *.3DS
нужно скопировать модель в папку проекта\Assets\
3D модели можно скачать с сайта http://junior3d.ru/models.html.
Модель брать в формате *.max.
Для добавления 3D текста в меню переходим в GameObject →
Create Other → 3D Text (рис. 11.7).
98
Рис. 11.6. Сцена приложения с ДР
Рис. 11.7. Расположение объекта 3D Text
99
Рис. 11.8. Расположение объекта GUI Texture
Рис. 11.9. Настройки GUI Text
100
Для добавления в проект картинки создаём объект GUI Texture.
(переходим в GameObject → Create Other → GUI Texture) (рис. 11.8).
Для добавления своих изображений в проект, их нужно скопировать в папку проекта\Assets\
У объекта GUI Texture в поле Texture выбираем нужное изображение.
Координаты меняем только в режиме Game(игра), так как их
сильное изменение может вынести их из поля зрения камеры.
Для добавления в проект текста создаём объект GUI Text.(переходим в GameObject → Create Other → GUI Text).
Для добавления своих изображений в проект, их нужно скопировать в папку проекта\Assets\
Настраиваем объект GUI Text (рис. 11.9).
Координаты меняем только в режиме Game, так как их сильное
изменение может вынести их из поля зрения камеры.
Теперь нужно проверить работоспособность приложения с дополненной реальностью. Для этого необходимо запустить приложение, навести камеру на изображение.
Контрольные вопросы
1. Как подключается библиотеки Qualcomm Vuforia?
2. Как создается и распознается мишень (маркер)?
3. Основные этапы создания приложения дополненной реальности.
4. Как проверяется приложение дополненной реальности?
101
Лабораторная работа № 12
«СОЗДАНИЕ УПРАВЛЯЕМОГО ЖЕСТАМИ ПРИЛОЖЕНИЯ
С ИСПОЛЬЗОВАНИЕМ MS KINECT»
Цель работы: ознакомление с сенсором Microsoft Kinect for
Windows и библиотекой FAAST для распознавания жестов.
Порядок выполнения лабораторной работы
1. Установить Kinect for Windоws SDK v.1.8 и Developer Toolkit
(если не установлены).
2. Подключить и ознакомиться с сенсором MS Kinect на примере
работы с приложением Shape Game.
3. Установить приложение FAAST (если не установлено).
4. Изучить функциональные возможности FAAST для управления MS Kinect.
5. Протестировать приведённый скрипт на простом приложении.
6. Написать свой скрипт для управления презентацией с помощью Microsoft Kinect и проверить его.
7. Сформулировать выводы.
8. Оформить отчет.
Методические указания
Microsoft Kinect позволяет пользователю взаимодействовать с приложением на основе жестов, телодвижений, мимики лица и голоса и
представляет собой сочетание устройства, комплекта библиотек и
драйверов, обеспечивающих программный доступ к устройству.
Возможности контроллера с использованием программных библиотек:
– построение карты глубины помещения и отделение силуэта
человека от фона;
– отслеживание объектов (идентификация отдельных персон и
их перемещения);
– распознавание и отслеживание одного или двух людей, перемещающихся в поле зрения сенсора, используя отслеживание частей скелета;
– определение расстояния от сенсора до объекта используя XYZглубину камеры, которая получает доступ к потоку цвета и потоку
глубины;
102
– захват аудио с шумо- и эхоподавлением;
– нахождение местоположения источника звука, используя луч
поиска;
– распознавание речи;
– считывание и запись видео и фото данных с камеры устройства.
Сенсор Microsoft Kinect состоит из компонентов, приведенных
на рис. 12.1:
Назначение компонентов:
– IR Emitter – инфракрасный излучатель. Его назначение испускать инфракрасные лучи, которые, отражаясь от предметов, попадают назад в сенсор;
– IR Depth Sensor – инфракрасный приёмник. Собирает отраженные лучи, преобразуя их в расстояние от сенсора до объекта(ов).
И таким образом строится, матрица расстояний – целого кадра.
Максимальное разрешение, которого составляет 640 × 480 (30 fps).
– Color Sensor – цветная камера. Захват видео с максимальным
разрешением 1280× 960 (12fps). Угол обзора камеры: 43° по вертикали и 57° по горизонтали (угол обзора инфракрасного приемника
идентичный). Можно выбрать формат картинки: RGB или YUV.
– Microphone Array – набор микрофонов. 4 встроенных микрофона позволяют определить местоположение источника звука и направление звуковых волн. Встроенный обработчик звукового сигнала включает подавление эха и уменьшение шума.
– Tilt Motor – коррекция наклона. Позволяет программно настраивать наклон сенсора в диапазоне ±27° по вертикали.
В качестве программных библиотек могут быть использованы
открытое решение, например, библиотека OpenNI или закрытое
Рис. 12.1. Устройство MS Kinect
103
решение от Microsoft Kinect SDK, а также свободно распространяемая версия плагина, подключаемого к Unity3d ZDK for Unity3D.
Если SDK не установлено, то необходимо скачать и установить
Kinect for Windоws SDK v.1.8 и Kinect for Windows Developer
Toolkit с официального сайта https://www.microsoft.com/en-us/
download/confirmation.aspx?id=40278
После подключения сенсора MS Kinect, в папке Kinect for
Windоws SDK v.1.8 открыть приложение Developer Toolkit Browser
v. 1.8 и запустить приложение Shape Game для тестирования сенсора. При нажатии кнопки Run появляется 2 окна: изображение
с камеры и непосредственно само игровое окно, в котором скелетом
схематично изображен игрок. Смысл игры заключается в том, чтобы отбивать падающие разноцветные блоки с помощью своего тела.
Таблица 12.1
Расположение сенсоров на теле человека
Sensor
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
104
Joint
Head
Neck
Torso
Waist
Left Collar
Left Shoulder
Left Elbow
Left Wrist
Left Hand
Left Fingertip
Right Collar
Right Shoulder
Right Elbow
Right Wrist
Right Hand
Right Fingertip
Left Hip
Left Knee
Left Ankle
Left Foot
Right Hip
Right Knee
Right Ankle
Right Foot
Значение сенсора
Голова
Шея
Торс
Талия
Левая ключица
Левое плечо
Локоть левой руки
Левое запястье
Левая рука
Левые кончики пальцев
Правая ключица
Правое плечо
Локоть правой руки
Правое запястье
Правая рука
Правые кончики пальцев
Левое бедро
Левое колено
Левая лодыжка
Левая нога
Правое бедро
Правое колено
Правая лодыжка
Правая нога
В зависимости от силы движения удары могут поменять направление движения блока или разбить его.
Для того, чтобы воспользоваться возможностями сенсора, в данной лабораторной работе предлагается установить и создать простейшее приложение с помощью межплатформенного программного обеспечения FAAST (Flexible Action and Articulated Skeleton
Toolkit).
FAAST распознает до четырех пользователей, которые определены как Tracker0, Tracker1, Tracker2 и Tracker3. Например, чтобы
читать с первого скелета, необходимо подключиться к «Tracker0 @
ip_address» («Tracker0 @ localhost», если работает на том же компьютере, что и клиент). Сервер автоматически запускается, когда
инструментарий подключается к датчику.
Для каждого скелета, в общей сложности 24 совместных преобразований скелета (в том числе положение и вращение) передаются
в качестве датчиков.
Суставы располагаются в порядке, указанном в табл. 12.1 и на
рис. 12.2.
Рис. 12.2. Расположение сенсоров
105
FAAST необходимо скачать по ссылке http://projects.ict.usc.
edu/mxr/faast/. После скачивания, нужно распаковать архив и
запустить FAAST.exe при включенном сенсоре – больше никаких
действий по установке не требуется.
Далее необходимо загрузить файл конфигурации. Например,
так он будет выглядеть для World of Warcraft:
# связь входного и выходного действия
# Формат:
# название_входного_действия порог тип_выходного_действия действие
left_arm_out 10 key a
left_arm_across 10 key d
lean_forwards 15 key w
lean_backwards 10 key s
left_arm_forwards 20 key tab
right_arm_forwards 20 key 1
right_arm_up 12 key 4
right_arm_across 15 key 2
right_arm_out 15 key 3
После этого необходимо откалибровать пользователя. Для этого
необходимо встать в позу Ψ, а проще говоря, встать ровно и поднять
руки вверх. После того, как опознание завершится, поверх тела будет изображен схематичный человечек из прямых линий. После
этого уже можно управлять приложением.
В качестве задания предлагается применить возможности бесконтактного интерфейса для управления приложением, выбранным произвольно. Это может быть программа, игра и т. д., в которой к горячим клавишам «привязаны» движения пользователя.
Необходимо реализовать не менее 3 команд управления.
Для примера приведён листинг скрипта, осуществляющего
управление показом презентации.
<sensor>
<tracker>Microsoft</tracker>
<mode>Full Body</mode>
<mirrormode>true</mirrormode>
<smoothing>true</smoothing>
<smoothingfactor>0.5</smoothingfactor>
<correction>0.5</correction>
<prediction>0.5</prediction>
<jitter>0.05</jitter>
106
<deviation>0.04</deviation>
</sensor>
<server>
<transformations>Global coordinates</transformations>
<automaticassignment>true</automaticassignment>
</server>
<display>
<showviewerwindow>true</showviewerwindow>
<background>Depth</background>
<foreground>Depth</foreground>
<showconsolewindow>true</showconsolewindow>
<movechildwindows>true</movechildwindows>
<savewindowlayout>false</savewindowlayout>
</display>
<gestures>
<gesture name="Gesture 111" timeout="0" enabled="true" outputloop="false" outp
uttimeout="0">
<input type="3">
<descriptor>left hand</descriptor>
<descriptor>to the left</descriptor>
<descriptor>at least</descriptor>
<descriptor>90</descriptor>
<descriptor>cm/sec</descriptor>
</input>
<output type="0">
<descriptor>press</descriptor>
<descriptor>left_arrow</descriptor>
<descriptor>for</descriptor>
<descriptor>0</descriptor>
</output>
</gesture>
<gesture name="Gesture 222" timeout="0" enabled="true" outputloop="false" outp
uttimeout="0">
<input type="3">
<descriptor>right hand</descriptor>
<descriptor>to the right</descriptor>
<descriptor>at least</descriptor>
<descriptor>90</descriptor>
<descriptor>cm/sec</descriptor>
</input>
<output type="0">
107
<descriptor>press</descriptor>
<descriptor>right_arrow</descriptor>
<descriptor>for</descriptor>
<descriptor>0</descriptor>
</output>
</gesture>
</gestures>
<plugins>
<plugin>FAAST-MovementAnalysis.dll</plugin>
</plugins>
Рекомендации по выполнению тестирования приведённого
скрипта:
1. Запустить FAAST и загрузить файл конфигурации.
2. В запущенном окне нажать Connect и выполнить калибровку
сенсора.
3. Загрузить файл скрипта.
4. В запущенном окне получить схематичное изображение человека.
5. Запустить презентацию и осуществить переход по слайдам
в соответствии с параметрами скрипта.
Контрольные вопросы
1. Основные элементы и возможности MS Kinect for Windows SDK.
2. Основные возможности приложения FAAST.
3. Расположение сенсоров (суставов) на теле человека.
4. Логика работы скрипта для управления презентацией.
108
Лабораторная работа № 13
«СОЗДАНИЕ ВИДЕОРОЛИКА С ИСПОЛЬЗОВАНИЕМ
ПРОГРАММЫ ЗАХВАТА ВИДЕО С ЭКРАНА»
Цель работы: Подготовка видеофрагментов интерактивного
приложения при помощи программы захвата экрана Movavi Screen
Capture Studio для дальнейшего видеомонтажа.
Порядок выполнения:
1. Ознакомиться с заданным интерактивным приложением
2. Сформулировать замысел(основную идею) видеоролика.
3. Составить сценарий видеоролика.
4. Согласовать с преподавателем и при необходимости откорректировать сценарий видеоролика.
5. Установить программу захвата экрана Movavi Screen Capture
Studio и настроить параметры области захвата.
6. Выполнить захват экрана интерактивного приложения.
7. Составить сводную таблицу характеристик «захваченных»
видеофрагментов:
№
пп
Имя\
формат
видеофайла
Длительность
мин\сек
Объем
Мб
Разрешение экрана
Текстовый
комментарий
Примечание
8. Оформить отчет.
Методические указания
Основное требование к сценарию – дать ответы на вопросы: чему
посвящено интерактивное приложение, какой материал привлекается, каков его объем, кто потенциальный пользователь приложения и т. п. Как правило, выделяются основные элементы и их
взаимосвязи. Интерактивное приложение предполагает определенную активность со стороны пользователя. Основной отличительной
особенностью мультимедийной продукции от традиционного кинематографа является интерактивный режим функционирования, но
в данной лабораторной работе необходимо решить обратную задачу, т. е. получить линейную последовательность кадров видеоролика для демонстрации содержания и назначения интерактивного
приложения.
109
Тогда процесс создания видеоролика подразделяется на следующие этапы:
– формулировка основного замысла и написание сценария;
– захват видеофрагментов с экрана интерактивного приложения;
– видеомонтаж + озвучивание.
Настройка параметров программы захвата видео с экрана
После установки и вызова программы Movavi Screen Capture
Studio [8], на экране компьютера появляется область захвата, которая выделена красным цветом, и меню программы (рис. 13.1).
Для захвата экрана в обычном режиме область захвата можно
настроить вручную или выбрать настройки из выпадающих меню
(рис. 13.2).
При записи игр и интерактивных приложений выбираем режим
«Игра», в котором область захвата можно настроить вручную или
выбрать среди имеющихся настроек (рис. 13.3). Так как экран компьютера поддерживает необходимое по заданию разрешение экрана, можно записывать видео, запустив исследуемое интерактивное
приложение.
Рис. 13.1. Область захвата экрана
и меню программы Movavi Screen Capture Studio
110
Рис. 13.2. Настройки программы при видеозахвате с экрана
Рис. 13.3. Меню окна программы в режиме «Игра»
111
После запуска заданного интерактивного приложения следует
нажать клавишу «F10» для начала записи нужного фрагмента, как
рекомендует информационный раздел программы (рис. 13.4).
Нажав повторно клавишу «F10» для завершения записи, получаем записанный видеофрагмент (рис. 13.5), который нас будет ожидать при выходе или сворачивании интерактивного приложения.
Записанный видеофрагмент необходимо сохранить в одном из
видео форматов. При нажатии кнопки с надписью «Конвертировать в:» появится возможность выбора формата для конвертации
(рис. 13.6).
При нажатии кнопки с двумя галочками ( ), можно детально
настроить характеристики видеофайла (рис. 13.7).
Рис. 13.4. Всплывающая подсказка Movavi Screen Capture Studio
Рис. 13.5. Записанный видеофрагмент в окне программы
112
Рис. 13.6. Выбор видео формата для конвертации
Рис. 13.7. Детальные настройки формата *.avi.
113
Далее, при нажатии кнопки «Конвертировать», начинается
конвертация видео в выбранный формат (рис. 13.8).
В табл. 13.1 приведен пример конвертации 5 минут записи с экрана при разрешении 1920 × 1080 (промежуточный объем
436 МБ) для различных кодаков.
Рис. 13.8. Конвертация записанного видеофрагмента
в формат *.avi
Таблица 13.1
Сравнение характеристик выходной конвертации
№
Формат
1
2
AVI
AVI
3
4
5
6
7
8
9
10
114
Кодек
Качество
MPEG4
наилучшее
MPEG2
наилучшее
Xvid
AVI
наилучшее
MPEG4
AVI
ffdshow
наилучшее
без
AVI
наилучшее
компресии
AVI
H.264
наилучшее
MPEG2
по умолчанию
MPEG4
по умолчанию
AVI
по умолчанию
iPod
по умолчанию
Итоговый
объём
55,3 МБ
1,95 ГБ
154 МБ
3,13 ГБ
52,2 ГБ
647 МБ
1,95 ГБ
636 МБ
647 МБ
25 МБ
Примечание
пикселизация
Контрольные вопросы:
1. Как настроить параметры области захвата ?
2. Какие управляющие клавиши предназначены для начала и
остановки записи?
3. Какие видео форматы поддерживает программа?
4. Возможность детальной настройки характеристик видеофайла.
115
Лабораторная работа № 14
«ЗАПИСЬ И ОБРАБОТКА АУДИОФАЙЛА
В ЗВУКОВОМ РЕДАКТОРЕ»
Цель работы: запись и обработка звукового сопровождения для
видеоролика с помощью звукового редактора Adobe Audition.
Порядок выполнения лабораторной работы
1. Подготовить тексты для озвучивания «захваченных» фрагментов на основе разработанного сценария видеоролика (см. ЛР № 13).
2. Надиктовать и записать с микрофона звуковые файлы (голос)
для фрагментов видеоролика.
3. Редактировать звуковые файлы с целью подавления шумов
при помощи меню Effects → Noise Reduction редактора Adobe
Audition, подобрав соответствующие Presets.
4. Подготовить и записать фоновый звук (музыкальное сопровождение, звуки природы, шум города или др.) к «захваченным»
фрагментам, опираясь на тематику видеоролика.
5. Использовать для микширования голосового комментария и
фонового звука режим Multitrack редактора Adobe Audition.
6. Сохранить результирующие звуковые файлы в формате *.wav
или *.mp3.
7. Дать обоснование полученным результатам.
8. Оформить отчет.
Методические указания
Звуковой редактор Adobe Audition предназначен для работы со
звуком, представленным в цифровой форме [9]. Это означает, что
аналоговые звуковые волны должны быть предварительно преобразованы (сэмплированы) в последовательность двоичных цифровых
отсчетов. Такое преобразование осуществляется в аналого-цифровом преобразователе (АЦП). В результате работы АЦП получается
цифровой образ звука, в английском языке именуемый Waveform
(волновая форма). Чаще всего это файлы с расширением *.wav либо
*.mp3. В редакторе Adobe Audition существуют два принципиально
различных режима работы: редактирование отдельных волновых
форм и совместное мультитрековое редактирование множества аудио
файлов. Для каждого из режимов предусмотрено свое главное меню
и свое главное окно: Waveform (рис. 14.1) и Multitrack (рис. 14.2).
116
Рис. 14.1. Окно редактора Adobe Audition в режиме «Waveform»
Для того чтобы перейти в режим редактирования волновой
формы, необходимо в меню Edit выбрать команду Waveform, либо
в главном окне нажать кнопку
.
– Строка меню
–
открывает доступ к основным функциям ввода\сохранения, редактирования, обработки и наложения эффектов и многое другое.
– Инструментальная панель – обеспечивает переключение между режимами работы и видами отображения файла (волновая и
спектральная формы).
– Окно органайзера – позволяет управлять списком загруженных аудио файлов (закладка Files) и накладывать эффекты (закладки Effects и Favorites).
– Окно волновой формы текущего загруженного файла.
– Список вариантов рабочего пространства Workspace – выполняет переключение между различными вариантами представления
рабочего пространства, позволяет их создавать и сохранять.
– Панель Transport – содержит функции воспроизведения, перемещение курсора по волновой форме и записи.
– Панель времени Time показывает текущее время от начала
волновой формы.
– Панель масштабирования Zoom – позволяет изменять размеры изображения волновой формы текущего файла.
117
– Панель управления выделением и обзором Selection/View –
позволяет просмотреть и изменить временные параметры (начало,
конец, длина) выделенной области.
– Индикатор уровня громкости Levels – показывает текущее
значение уровня громкости в каждом канале при стерео записи.
– Панель статуса\состояния – содержит параметры волновой
формы (частоту дискретизации, разрядность, количество каналов,
размер файла и др.)
Adobe Audition позволяет работать отдельно с каждым из стерео каналов. Для этого нужно выделять фрагменты определенным
образом, подвести указатель мыши не к линии, разделяющей каналы, а к верхней или нижней частям сэмпла (для работы с левым
или правым каналами соответственно). При этом указатель мыши
изменит свой вид: кроме обычной стрелочки появится символ L
(Left – левый) или R (Right – правый). После этого можно работать
со звуковой информацией отдельных каналов точно так же, как и
с целым аудио файлом.
Работа в режиме Multitrack View
Для того чтобы перейти в режим Multitrack View из режима редактирования волновой формы, необходимо в главном меню выбрать команду Multitrack, либо в окне нажать кнопку
.
Главное окно программы принимает вид, приведенный на рис. 14.2.
В верхней части окна, как обычно, располагается главное меню. Отличия заключаются в том, что в главном окне мультитрекового режима может отображаться не одна, а до 128 пар стерео треков.
По сути дела, это два различных по назначению звуковых редактора, объединенных в единый комплекс. В режиме Waveform
происходит работа с каждым звуковым фрагментом в отдельности. Здесь вырезаются ненужные части фонограммы, удаляются
щелчки и шум, формируется тембр, корректируется динамический диапазон, применяются эффекты. По мере готовности отдельных фрагментов они экспортируются в мультитрековый редактор
Multitrack. В нем фрагменты можно перемещать, располагая в необходимой последовательности. Например, если сначала должна
идти заставка, затем дикторский текст, затем музыкальная композиция, то эти фрагменты должны быть расположены по времени один за другим. Перемещая фрагменты во времени и с трека на
трек, можно добиться, чтобы фонограмма укладывалась в отведенный хронометраж. Для получения необходимого баланса регули118
Рис. 14.2. Окно редактора Adobe Audition
в режиме Multitrack (кнопка
)
руются уровни громкости фрагментов, размещенных на отдельных
треках. Можно нарисовать графики изменения громкости. Положение источников звука на стерео панораме и их перемещение также задается графическим способом независимо для каждого из треков. Редактирование, выполненное в режиме Multitrack является
неразрушающим [9].
Запись и обработка голоса
При записи звука через гарнитуры или любительские микрофоны желательно не держать микрофон прямо перед ртом, а сместить
его несколько в сторону, т. к. иначе на записанном фрагменте появится нежелательный шум от дыхания.
Создадим новый аудиофайл в меню File → New → Audio File…
(сочетание клавиш «Ctrl+Shift+N») (рис. 14.3).
Рис. 14.3. Создание нового аудиофайла
119
При этом на экране появится окно с параметрами нового файла
(рис. 14.4), где нужно установить частоту дискретизации, разрядность и количество каналов. Однако при записи с микрофона звук
будет только моно. Целесообразно оставить значение частоты дискретизации 44,1кГц и разрядность 16 бит.
В правой нижней части окна расположены кнопки, похожие на
кнопки управления магнитофоном. С их помощью осуществляется
управление отображением, записью и воспроизведением сэмплов.
На панели «Transport» (рис. 14.5) нажатием кнопки «Record» ( сочетание клавиш «Shift + Space») запускается процесс записи голоса.
За процессом записи можно следить в информационном поле
в правой нижней части главного окна программы. При записи звукового фрагмента будет показываться амплитуда входного сигнала
и уровень записываемых частот (рис. 14.6).
Звук, записанный в нестудийных условиях с любительского микрофона, требует корректировки. Необходимо устранить ошибки,
допущенные при записи голоса с микрофона:
1. Очистка от шумов.
Очистить запись от постороннего шума можно при помощи инструмента Effects → Noise Reduction / Restoration (рис. 14.7) [11].
Для удаления шума сначала нужно выделить фрагмент тишины
Рис. 14.4. Пример настройки записи
в окне «New Audio File»
Рис. 14.5. Панель «Transport»
120
в начале или в конце файла – профиль шума (Capture Noise Print)
и затем с помощью диалогового окна Noise Reduction корректировать шумовую составляющую звукового файла.
В появившемся окне (рис. 14.8) после нажатия на кнопку «Capture Noise Print», а затем на «Select Entire File», поставить галочку
Рис. 14.6. Пример записи голоса с микрофона
Рис. 14.7. Выделенный профиль шума
121
«Output Noise Only» и прослушать шум, который должен быть
удален. Затем, отключив «Output Noise Only», с помощью кнопки
вкл./выкл. в нижнем левом углу окна откорректировать шумовую
составляющую звукового сигнала, изменяя положение бегунков
«Noise Reduction» и «Reduce by», и применить к редактируемой
записи голоса (кнопка Apply).
Вкладка Effects наряду с Noise Reduction, включает следующие
инструменты [10]:
– Noise Reduction – шумоподавление на основе анализа свойств
образца шума.
– Click/Pop Eliminator – обнаружение и исправление щелчков
и/или выпадений отсчетов (очень актуально при реставрации записей со старых изрядно поцарапанных виниловых пластинок и
редактирования результатов оцифровки звука, выполненной ранее
с помощью недостаточно мощного компьютера).
– Hiss Reduction – спектральное пороговое шумоподавление,
алгоритм которого специально ориентирован на борьбу с шумами
магнитной ленты.
– Clip Restoration – устранение клиппирования сигнала.
Рис. 14.8. Диалоговое окно Noise Reduction
после сбора информации о шуме
122
2. Эквализация звука. Коррекция шума вносит искажения в тональность звукового сигнала, который становится менее естественным [11]. Улучшить звучание можно применением графического
эквалайзера в меню Effects → Filter and EQ → Graphic Equalizer
(рис. 14.9). Подбор параметров необходимо выполнять в режиме
предварительного прослушивания.
3. Компрессия звука. Компрессия звука – это сжатие или уменьшение динамического диапазона аудио сигнала [12]. Процесс компрессии звука позволяет тихий звук сделать громче. Функцию
компрессии звука можно найти в меню Effects < Amplitude and
Compression (рис. 14.10).
В меню Effects выбираем инструмент Amplitude and Compression,
выполним нормализацию звукового сигнала – Normalize (process)
[13], что позволяет установить пиковый уровень для всего звукового файла или его выделенной части. При нормализации звука до
100% достигается максимальная амплитуда, которая возможна
в цифровом звуке – 0 dB FS. Если звук передается мастеринг-инженеру, то следует нормализовать звук в диапазоне от –3 до –6 dB FS,
обеспечивая зазор для дальнейшей обработки.
Нормализуем звук до 95,8% (рис. 14.11). После этого можно
очистить звук от шума, если это необходимо.
Затем можно произвести динамическую обработку звукового сигнала – вкладка Effects → Amplitude and Compression →
Рис. 14.9. Диалоговое окно Graphic Equalizer
123
Рис. 14.10. Диалоговое окно Effects
Рис. 14.11. Установка параметра
нормализации звука до 95,8%
Dinamics Processing (рис. 14.12), чтобы подавить неприятные свистящие звуки (применить так называемый деэссер) либо изменить
громкость звука.
Горизонтальная шкала в «Dynamics Processing» показывает исходную громкость звука в dB, а вертикальная шкала показывает,
на какой уровень этот звук необходимо поднять. Пример изменения громкости звука, приведен на (рис. 14.13).
Затем при необходимости можно применить параметрический
эквалайзер для настройки низких и высоких частот (рис. 14.14).
124
Рис. 14.12. Выбор эффекта Dynamics Processing
Рис. 14.13. Настройка эффекта «Dynamics Processing»
125
Рис. 14.14. Диалоговое окно Parametric Equalizer с настройками
Пример исходного звукового сигнала и результата его компрессии приведен на рис. 14.15, а и 14.15, б соответственно.
Сравнивая сигналограммы, приведенные на рис. 14.15, а и
14.15, б, можно понять, что амплитуда увеличилась и звук стал
громче.
а)
б)
Рис. 14.15. Звуковой сигнал до и после применения компрессии
126
Рис. 14.16. Расстановка записанных фрагментов
на отдельных дорожках
Микширование аудиотреков
В режиме «Multitrack» (
) (рис. 14.16) перенесём
подготовленные звуковые файлы (из панели Files) обычным перетаскиванием и расставим их в нужном порядке на отдельных дорожках.
В режиме Multitrack из нескольких звуковых файлов можно
скомпоновать один (Mixdown) и расположить его на любом треке, а
затем сохранить в отдельный аудио файл, открыв сборку (Mixdown)
в режиме редактирования Waveform.
Контрольные вопросы
1. Можно ли записать с микрофона голос в стерео формате?
2. Перечислить инструменты подавления шумов.
3. Когда выполняется нормализация звука?
4. Когда возникает необходимость в динамической обработке
звука?
5. Перечислить основные форматы звуковых файлов.
127
Лабораторная работа № 15
МОНТАЖ ВИДЕОРОЛИКА СО ЗВУКОМ
Цель работы: Cоздание видеоролика с наложением титров, видеоэффектов и звуковым сопровождением. Подготовка видеоролика к публикации на YouTube..
Порядок выполнения
1. Исходными данными являются результаты выполнения лабораторных работ №13 и №14.
2. Ознакомиться с основными возможностями видео редактора
Movavi Video Editor [14].
3. Импортировать видеофрагменты и разместить их на дорожках временной шкалы (монтажном столе).
4. При необходимости выполнить обработку отдельных видеофрагментов (выделить и удалить лишние кадры, изменить скорость
видеофрагмента, сделать цветокоррекцию).
5. Добавить титры и субтитры.
6. Используя средства управления аудио потоком, скомпоновать звуковое сопровождение.
7. Применить видеоэффекты в переходах между кадрами.
8. Подкорректировать временное соотношение звукового и видео ряда.
9. Сохранить результат видеомонтажа в следующих форматах:
– *.avi либо *.wmv – для дальнейшей обработки;
– *.mp4 с разрешением 1920х1080 progressive, кодек H624, TV
стандарт PAL (требования YouTube) – для публикации.
10. Оформить отчет.
Методические указания
Видеоредактор Movavi Video Editor позволяет создавать видеопроекты, импортировать видеофайлы, разрезать видеофайлы на
части, добавлять титры, импортировать либо записать звуковые
дорожки, наложить эффекты в переходы между кадрами, фоновую
музыку, а также создание фильма из фотографий и любых других
графических изображений с помощью Мастера слайд-шоу и синхронизация со звуком [14]. Основное окно видеоредактора Movavi
Video Editor в режиме подготовки импорта файлов для дальнейшего монтажа приведено на рис. 15.1.
128
129
Рис. 15.1. Режим подготовки импорта видеофайлов для дальнейшего монтажа
Монтаж видеоролика
При импорте видеофайлы и изображения будут автоматически
добавлены на видео дорожку (video track), музыкальные файлы –
на звуковую дорожку (audio track) (рис.15.2). В ходе монтажа для
импортированных файлов можно улучшить качество видеофрагментов (повышать четкость изображения, улучшать яркость, контраст и другие настройки цветности, стабилизировать колеблющееся изображение и др.) и синхронизировать видео со звуком.
Видеоэффекты и переходы между кадрами
Чтобы превратить отснятый материал в настоящий фильм, простого видеомонтажа и наложения музыки недостаточно. Для создания качественного видеоролика, отображающего задуманный
автором сюжет, потребуются специальные видеоэффекты. В редакторе Movavi Video Editor более 60 готовых фильтров и эффектов для
видео, такие как старое кино, мозаика, инверсия, летающие фигуры, хромакей и многие другие. Для работы с эффектами во вкладке Фильтры, следует выбрать нужный эффект и перетащить его на
нужный видеофрагмент. При желании можно совмещать сразу несколько эффектов на одном фрагменте видео. Кроме того, редактор
Movavi Video Editor позволяет создавать анимированные переходы между видеокадрами. Тематический каталог переходов включает более 80 анимированных переходов для видеомонтажа (см.
рис. 15.3). Выбрав переход, можно посмотреть демонстрационный
ролик, показывающий, как этот переход будет выглядеть в видео, а
затем перетащить его в рабочую область и расположить между двумя редактируемыми видеофрагментами.
Существует возможность добавления одинаковых переходов
между несколькими частями видео. Для этого необходимо вызвать
окно настроек, нажав специальную кнопку на панели инструментов (рис.15.4), и затем в появившемся окне настроек, выбрать
стиль и длительность переходов, а также задать длительность для
всех видеофрагментов.
Титры и Фигуры
Редактор Movavi Video Editor поддерживает титры двух видов:
простые (статичные) и художественные. Определившись со стилем, перетащите выбранные титры на монтажный стол с помощью
мыши, затем следует передвинуть добавленные титры(субтитры)
130
131
Рис. 15.2. Редактирование видеофрагментов
132
Рис. 15.3. Тематический каталог переходов между видеокадрами
Рис. 15.4. Окно настроек стиля
и длительности переходов
по шкале времени, чтобы поставить их в нужное место. Ввод собственного текста, доступен в режиме редактирования титров. Возможно изменение расположения и размера титров, растягивая
и перемещая рамку по периметру окна с помощью мыши. Кроме
того, существует возможность добавления к видео различных графических фигур (поясняющие стрелки, геометрические фигуры с
текстом и т.д.). Графические фигуры можно редактировать точно
так же, как титры.
Когда фильм полностью готов, нажимаем кнопку «Сохранить».
Редактор Movavi Video Editor позволяет сохранить видео в любом
популярном формате (табл. 15.1), сделать его совместимым с мобильным устройством или подготовить видеоролик для загрузки в сеть.
Таблица 15.1
Видеоформаты Movavi Video Editor
Видеоформаты
3GPP (.3gp), 3GPP2 (.3g2)
Audio Video Interleave (.avi)
Flash (.flv), Flash (.swf);
Matroska (.mkv)
Поддерживаемые кодеки
H.263, H.264, MPEG-4
H.264, MPEG-4, MJPEG
FLV1, H.264
H.264, MPEG-4, MJPEG, Theora,
VP9
DivX
MPEG-2, MPEG-4, H.264, WMV V8
DivX Video (.divx)
HD Video (.m2ts, .mkv, .mov, .mp4,
.mpg, .wmv)
MPEG Transport Stream (.m2ts, .ts, MPEG-2, H.264
.mts, .m2t)
MPEG (.mpg, .mpeg, .mpe, .m1v,
MPEG-1, MPEG-2, H.264
.mod, .tod)
MPEG-4 (.mp4), MPEG-4 (.m4v)
MPEG-4, H.264, H.263, MJPEG,
ProRes
133
Окончание табл. 15.1
Видеоформаты
MXF – Material eXchange Format
(.mxf)
OGV – Ogg Video (.ogv)
QuickTime (.mov), QuickTime(.qt)
RM – RealMedia (.rm, .rmvb)
WebM (.webm)
WMV – Windows Media Video
(.wmv)
WTV – Windows Recorded TV Show
(.wtv)
Поддерживаемые кодеки
MPEG-2, DV
Theora, MPEG-4
H.264, MPEG-4, AIC, MJPEG,
ProRes, Sorenson 1/3, PNG
Real Video 2/3/4, Cooker
VP8, VP7, VP9
WMVV8, WMVV7, WMV9,WMV9
Advanced profile, MPEG-4
H.264, MPEG-2
Системные требования к характеристикам компьютера для
Movavi Video Editor:
Видеокарта NVIDIA® серии 8, Intel® HD Graphics 2000 или
выше или AMD Radeon R600 и выше с установленным драйвером
Разрешение экрана 1280x768, 32-битный цвет
512 MБ оперативной памяти для Windows XP и Windows Vista,
2 ГБ для Windows 7, Windows 8 и Windows 10
250 МБ свободного места на диске для установки, 500 МБ – для
работы программы Movavi Video Editor.
Подготовка видео к публикации на Youtube
Рекомендуемые параметры видео для публикации на YouТube [15]:
– Разрешение: 1920х1080;
– Соотношение сторон: 16:9, чтобы полностью занимать окно
проигрывателя YouТube;
– Кодек: H.264; Контейнер: mp4;
– Частота кадров: 30fps и выше;
– Bitrate Encoding: CBR 10Mbps и выше;
– Звук: формат AAC, 192kbps, 48kHz, stereo.
Получение подробной информации о характеристиках видео
и аудио с помощью программы MediaInfo
MediaInfo позволяет получать техническую информацию из видео- или аудио-файлов [16]. С помощью MediaInfo можно получить
следующую информацию:
– Основная: название, автор, режиссер, альбом, номер звуковой
дорожки, дата, продолжительность и т.д.;
134
– Видео: кодек, отношение сторон, частота кадров, скорость потока и т.д.;
– Аудио: кодек, каналы, язык, скорость потока и т.д.;
– Текст: язык субтитров;
– Части: количество частей, список частей.
– MediaInfo поддерживает следующие форматы (контейнеры):
– Видео: MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG1, MPEG-2, MPEG-4, DVD (VOB) и т.д.;
– (Кодеки: DivX, XviD, MSMPEG4, ASP, H.264/AVC, H.265/
HEVC, FFV1);
– Аудио: OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF
и т.д.;
– Субтитры: SRT, SSA, ASS, SAMI и т.д.
– С помощью MediaInfo можно:
– Анализировать множество видео- и аудио-форматов;
– Использовать разные методы представления полученной информации (текст, лист, дерево, HTML и др.);
– Изменять эти методы представления;
– Возможности экспорта информации в: текст, CSV, HTML;
– Использовать для работы графический интерфейс, командную
строку или DLL;
– Интеграция в оболочку MS-Windows (drag’n’drop и контекстное меню);
– На рис. 15.5 представлено стартовое окно MediaInfo.
Рис. 15.5. Стартовое окно MediaInfo
135
Рис. 15.6. Информация о видеофайле
На рис. 15.6 представлено информация о загруженном видео.
В окне программы доступна подробная информация о просматриваемом файле. Из рис. 15.6 видно, что видеоряд хранится в формате WMV, звуковая дорожка состоит из двух каналов и хранится
в формате WMA. Соотношение сторон – 16:9, что соответствует широкоэкранному монитору. Из 204 мегабайт файла звуковая дорожка занимает всего 9.85 мегабайт.
136
Контрольные вопросы
1. Можно ли изменить скорость видеофрагмента.
2. Перечислить основные форматы видео файлов.
3. Рекомендуемые параметры видео для публикации на YouTube.
4. Какие форматы видео файлов используются для публикации
на YouTube.
Требования к оформлению отчета
1. Титульный лист.
2. Цель работы.
3. Индивидуальное задание.
4. Описание основных этапов выполнения работы с необходимыми комментариями (сценарии, фрагменты настроек программ,
скриншоты экрана, программный код и др.).
5. Результаты работы (таблицы значений, скриншоты экрана).
6. Выводы по результатам работы.
Рекомендуемая литература
1. Основы работы в Unity3D (Ч. 2): метод. указ. к вып. лаб. работ // сост.: А. В. Никитин, Н. Н. Решетникова, Е. А. Полушкина,
О. В. Косенко, А. А. Твердов. СПбГУАП, 2015. 72 с.
2. Основы работы в Unity3D: метод. указ. к вып. лаб. работ //
сост.: А. Н. Жирнов, А. В. Коновалов, А. А. Преображенский. Под
редакцией А. В. Никитина. СПбГУАП, 2014. 64 с.
3. Официальный сайт Unity URL: http://unity3d.com/ (дата обращения 24.06.2016).
4. Руководство Unity URL: http://docs.unity3d.com/ru/current/
Manual/index.html (дата обращения 24.06.2016).
5. Руководство по написанию скриптов для Unity URL: http://
unity3d.com/support/documentation/ScriptReference/index.html;
(дата обращения 24.06.2016).
6. Официальный сайт сенсора MS Kinect URL: https://dev.
windows.com/en-us/kinect (дата обращения 24.06.2016).
7. Официальный сайт портала разработчиков Vuforia URL:
https://developer.vuforia.com/ (дата обращения 24.06.2016).
8. Movavi Screen Capture Studio. Запись видео с экрана со
звуком URL: http://www.movavi.ru/movavi-screen-capture/ (дата
обращения 24.06.2016).
137
9. Петелин Р. Ю., Петелин Ю. В. Музыкальный компьютер. Секреты мастерства. СПб.: БХВ-Санкт-Петербург, Арлит, 2001. 608 с.
10. Петелин Р. Ю., Петелин Ю. В. в статье «Устранение помех»
URL: http://www.petelin.ru/ (дата обращения 24.06.2016).
11. Эквализация – wikisound. URL: http://wikisound.org/ (дата
обращения 24.06.2016).
12. Компрессия – wikisound. URL: http://wikisound.org/ (дата
обращения 24.06.2016).
13. Нормализация
звука.
URL:
http://noiws.ru/sound_
normalization.html (дата обращения 24.06.2016).
14. Movavi Video Editor. Пошаговые инструкции и статьи о видео. URL: https://www.movavi.ru/support/how-to/ (дата обращения 24.06.2016).
15. Как загружать видео на Youtube – справка – Youtube URL:
https://support.google.com/youtube/topic/16547?hl=ru&ref_
topic=4355169 (дата обращения 24.06.2016).
16. MediaInfo URL: https://mediaarea.net/ru/MediaInfo (дата
обращения 24.06.2016).
138
СОДЕРЖАНИЕ
Введение.................................................................................... Установка пакета и знакомство с интерфейсом программы Unity3D... Лабораторная работа № 1. «Создание простой 3D-сцены
(ландшафт, камера и свет)».......................................................... Лабораторная работа № 2. «Импорт моделей в приложение,
постановка локального освещения»............................................... Лабораторная работа № 3. «Разработка простейшего интерфейса
приложения»............................................................................. Лабораторная работа №4. «Знакомство с анимацией, физическими
свойствами и созданием фоновой музыки». .................................... Лабораторная работа № 5. «Ознакомление с функциональными
возможностями управления характеристиками камеры»................. Лабораторная работа № 6. «Изучение механизма уровней
детализации»............................................................................. Лабораторная работа № 7. «Ознакомление с функциональными
возможностями управления пирамидой видимости»........................ Лабораторная работа № 8. «Разработка простой многопользовательской игры»........................................................................... Лабораторная работа № 9. «Разработка интеллектуального
аватара».................................................................................... Лабораторная работа № 10. «Разработка усложненного
аудиоплеера»............................................................................. Лабораторная работа № 11. «Создание приложения дополненной
реальности с помощью библиотеки Vuforia для Unity3D»................. Лабораторная работа № 12. «Создание управляемого жестами
приложения с использованием MS Kinect»..................................... Лабораторная работа № 13. «Создание видеоролика
с использованием программы захвата видео с экрана»...................... Лабораторная работа № 14. «Запись и обработка аудиофайла
в звуковом редакторе»................................................................. Лабораторная работа № 15. Монтаж видеоролика со звуком ........... 3
3
12
22
28
33
45
53
60
69
79
85
94
102
109
116
128
Требования к оформлению отчета.................................................. 137
Рекомендуемая литература.......................................................... 137
139
Документ
Категория
Без категории
Просмотров
10
Размер файла
15 239 Кб
Теги
vinograd, 0ace4891ac
1/--страниц
Пожаловаться на содержимое документа