Как называлась первая vr игра unity
Перейти к содержимому

Как называлась первая vr игра unity

  • автор:

О ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ И ОПЫТЕ ЕЕ ПРИМЕНЕНИЯ В ОБУЧЕНИИ СТУДЕНТОВ Текст научной статьи по специальности «Компьютерные и информационные науки»

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Силина Александра Андреевна, Скорнякова Анна Юрьевна

Характеризуется исторический аспект технологии виртуальной реальности и опыт ее применения в системе среднего профессионального образования при реализации игровых технологий, приводятся примеры использования виртуальной реальности в учебном процессе. Отмечаются причины ее распространения на сферу образования, предложены пути развития VR как средства разработки игровых технологий студентами на примере среды разработки Unity 3D . Представлена рабочая программа «Разработка виртуальной и дополненной реальности» для обучающих по направлениям 09.02.05 Прикладная информатика по отраслям и 09.02.07 Информационные системы и программирование.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Силина Александра Андреевна, Скорнякова Анна Юрьевна

Использование межплатформенной среды разработки Unity-3D и технологии виртуальной реальности для создания VR-туров по объектам культурного наследия

ВОЗМОЖНОСТИ ТЕХНОЛОГИЙ ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ ДЛЯ РАЗРАБОТКИ ИГРОВЫХ ПРИЛОЖЕНИЙ
РАЗРАБОТКА VR. ОСОБЕННОСТИ СОВМЕСТИМОСТИ С НЕЙРОТЕХНОЛОГИЯМИ
ОСОБЕННОСТИ ИММЕРСИВНЫХ ТЕХНОЛОГИЙ, ПРИМЕНЯЕМЫХ ПРИ ПРОЕКТИРОВАНИИ МЕБЕЛИ
СОВРЕМЕННЫЕ ТЕХНОЛОГИИ ВИЗУАЛИЗАЦИИ АРХИТЕКТУРНЫХ ОБЪЕКТОВ
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ABOUT VIRTUAL REALITY AND THE EXPERIENCE OF ITS APPLICATION IN STUDENT TRAINING

The historical aspect of virtual reality technology and the experience of its application in the system of secondary vocational education in the implementation of gaming technologies are characterized, examples of the use of virtual reality in the educational process are given. The reasons for its spread to the field of education are noted, ways for the development of VR as a means of developing game technologies by students are proposed using the example of the Unity 3D development environment. The work program «Development of Virtual and Augmented Reality» for students in the areas of 09.02.05 Applied Informatics by Industry and 09.02.07 Information Systems and Programming.

Текст научной работы на тему «О ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ И ОПЫТЕ ЕЕ ПРИМЕНЕНИЯ В ОБУЧЕНИИ СТУДЕНТОВ»

DOI: 10.24412/2222-7520-2022-1 -50-61

Силина Александра Андреевна

ГБПОУ «Пермский техникум промышленных и информационных технологий

им. Б.Г. Изгагина», г. Пермь, Россия 614099, г. Пермь, Комсомольский проспект, 91 e-mail: sashasil ina93@gmail.com

Скорнякова Анна Юрьевна

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

ФГБОУ ВО «Пермский государственный гуманитарно-педагогический

университет», г. Пермь, Россия 614990, г. Пермь, ул. Сибирская, 24 e-mail: skornyakova_anna@pspu.ru

О ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ И ОПЫТЕ ЕЕ ПРИМЕНЕНИЯ

В ОБУЧЕНИИ СТУДЕНТОВ

Alexandra A. Silina

State Budget Vocational Educational Institution «Perm Technical School of Industrial and Information Technologies named after V.I. B. G. Izgagin » 614099, Perm, Komsomolsky prospect, 91 e-mail: sashasil ina93@gmail.com

Anna Y. Skornyakova

Candidate of Pedagogical Sciences, Associate Professor, Acting Chief of the Department of Informatics and Computer Engineering

Federal State Budget Educational Institution of Higher Education ‘Perm State Humanitarian Pedagogical University’ 614990, Russia, Perm, 24, Sibirskaya Str. e-mail: skornyakova_anna@pspu.ru

© Силина А.А., Скорнякова А.Ю., 2022

ABOUT VIRTUAL REALITY AND THE EXPERIENCE OF ITS APPLICATION IN STUDENT TRAINING

Аннотация: характеризуется исторический аспект технологии виртуальной реальности и опыт ее применения в системе среднего профессионального образования при реализации игровых технологий, приводятся примеры использования виртуальной реальности в учебном процессе. Отмечаются причины ее распространения на сферу образования, предложены пути развития VR как средства разработки игровых технологий студентами на примере среды разработки Unity 3D. Представлена рабочая программа «Разработка виртуальной и дополненной реальности» для обучающих по направлениям 09.02.05 Прикладная информатика по отраслям и 09.02.07 Информационные системы и программирование.

Ключевые слова: виртуальная реальность, VR-приложение, среднее образование, игровые технологии, среда разработки приложений, Unity 3D.

Abstract: the historical aspect of virtual reality technology and the experience of its application in the system of secondary vocational education in the implementation of gaming technologies are characterized, examples of the use of virtual reality in the educational process are given. The reasons for its spread to the field of education are noted, ways for the development of VR as a means of developing game technologies by students are proposed using the example of the Unity 3D development environment. The work program «Development of Virtual and Augmented Reality» for students in the areas of 09.02.05 Applied Informatics by Industry and 09.02.07 Information Systems and Programming.

Key words: virtual reality, VR application, secondary education, game technology, application development environment, Unity 3D.

Технология виртуальной реальности (VR) является одной из самых перспективных и быстроразвивающихся в сфере информационных технологий. Спектр ее применения достаточно широк, начиная с развлекательных приложений и заканчивая программным обеспечением для интерфейса кабины военных истребителей. Многие разработчики сосредоточены на внедрении данной технологии в образовательную сферу, поскольку она представляет собой некое связывающее звено между двумя мирами — реальным и виртуальным. В то же время технология полной виртуальной реальности вызывает у родителей ряд обоснованных угроз, ведь уже были случаи, когда ребенок с головой окунался в виртуальный выдуманный мир. Первое устройство виртуальной реальности появилось в середине XX в., но не получило широкого распространения. Было сложно даже представить, что VR может быть интегрирована в образовательный процесс, такая задумка казалась слишком футуристичной и дорогостоящей задачей.

В 1935 г. американский фантаст и футурист Стэнли Вейнбаума написал рассказ «Очки Пигмалиона», в котором главный герой знакомится

с профессором — изобретателем очков, позволяющих создавать оптическую, слуховую, вкусовую, кинестетическую и обонятельную иллюзию реальности. Это, пожалуй, первое, концептуальное представление о виртуальной реальности [5]. Первая известная система имитации реальности создана кинематографистом Мортоном Хейлитом в 1956 г., в 1962 г. на нее был получен патент. Машина виртуальной реальности из 50-х представляла собой достаточно вместительную будку, в которую были интегрированы кинопроекторы, воспроизводящие кино на стереоскопическом экране, стереозвук, виброкресло для имитации вибрации (например, тонущего корабля или обвала в горах), установка для имитации различных запахов и эмулятор атмосферных явлений, например, ветра и дождя. По мнению создателя устройства, Хайтинга, Sensorama должна была стать будущим киноиндустрии, но, как известно, не стала. Устройство осталось спорным аттракционом, для которого было создано всего шесть короткометражных фильмов. Будка была громоздкой и дорогой, что лишило Sensorama шансов на серьезное инвестирование и масштабирование [3].

«Пионером» VR-технологии, связанной с компьютерами, принято считать американского ученого Айвена Сазерленда, более известного в качестве одного из основателей Интернета. В 1965 г. Сазерленд описал концепцию компьютерной имитации мира с воздействием на пользователя через специальный шлем, создающий настолько реалистичную иллюзию, что человек не способен был отличить имитацию от действительности, при этом пользователю давалась возможность взаимодействовать с объектами в виртуальной реальности. В 1968 г. Сазерленд совместно со своим учеником и коллегой Бобом Спроуллом разработали первый компьютерный шлем виртуальной реальности, назвав его «Дамоклов меч», в связи с характерными особенностями стационарного крепления. Устройство по текущим меркам было достаточно простым и отображало на экране только примитивные SD-модели в виде незамысловатых объемных геометрических форм. «Дамоклов меч» был оснащен отслеживанием движений головы, в зависимости от которых менялась перспектива на экране. Устройство было исключительно лабораторным, в первую очередь из-за своей высокой массы, которая требовала крепление к потолку [11].

Сазерленд завершил первый этап развития VR, до появления полноценных серийных систем оставалось еще полтора десятилетия военных разработок и лабораторных изысканий. Между тем, именно он и его предшественники определили направления развития VR. Тем не менее подпитывая интерес писателями-фантастами, виртуальная реальность завоевала популярность в первой половине 1990-х гг.: роман Нила Стивенсона «Снежная катастрофа» 1992 г., фильм «Человек-газонокосилка», в котором был механизм VR от компании VPL [12].

В настоящем мире виртуальная реальность была обещана пользователям компьютерных игр повсюду. В торговых центрах, виртуальные кабинки позволяли людям играть. Nintendo назвала свою систему трехмерных видеоигр «Virtual Boy», удобно игнорируя тот факт, что гарнитуры доставляли головные

боли. Исследования продолжались в академических и частных лабораториях, но VR просто перестала существовать как жизнеспособная потребительская технология. В 2012 г. соучредитель «id Software» и поклонник виртуальной реальности Джон Кармак с особым удивлением пришел на выставку видеоигр E3: он позаимствовал прототип гарнитуры, созданной 19-летним энтузиастом виртуальной реальности по имени Палмер Лаки, и взломал ее, чтобы запустить VR-версию игры Doom. Клейкая лента и ремень, оторванный от пары лыжных очков Oakley, единственное, что держало его на голове, но это работало. Когда люди надевали гарнитуру, оказывались в окружении трехмерной графики, которую обычно видели на телевизоре или мониторе. Они не просто играли в Doom — были внутри нее.

Дальнейшее развитие технологии вириальной реальности происходило стремительно. Сейчас VR приобретает популярность в связи с интеграцией специальных шлемов, изначально использовавшихся для игровой индустрии. В 2016 г. была выпущена первая волна специализированных потребительских VR-гарнитур, хотя все три были фактически периферийными устройствами, а не полными системами: Oculus Rift и HTC Vive, каждый из которых был подключен к мощным ПК, а система PlayStation VR работала на игровой консоли PlayStation 4. В 2018 г. на рынке появились первые «автономные» гарнитуры. Они не подключаются к компьютеру и не зависят от смартфона для обеспечения отображения и обработки [12].

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

— приложение «The Body VR», позволяющее погрузиться в глубины человеческого тела и наглядно наблюдать за работой микроорганизмов [9];

— Universe Sandbox 2. — настоящий космический симулятор, в котором ученики могут наглядно увидеть, как работает гравитация, климат и физические взаимодействия в космосе [4];

— 3D Organon VR Anatomy. — первый в мире атлас анатомии человека в VR. В нем собрано более 4 000 реалистичных анатомических моделей [1].

Причин распространения технологий виртуальной реальности на сферу образования можно выделить несколько:

1) снижение цены на техническое оснащение;

2) стремительный рост количества программного обеспечения под VR;

3) рост объема инвестиций в VR;

4) увеличение числа крупных компаний, работающих в сфере VR;

5) внедрение VR-технологий в ряде сфер: нефтегазовая промышленность, машиностроение, энергетика, металлургия, телекоммуникации, реклама и многое другое.

Россия в этом плане стремится идти в ногу со временем. Начиная с 2018 г., запущен целый ряд крупных образовательных VR-проектов: «Образование-2024», «Цифровая школа», «Современная цифровая образовательная среда», «Цифровая экономика Российской Федерации».

Для подготовки студентов среднего профессионального образования ГБПОУ «Пермский техникум промышленных и информационных технологий им. Б.Г. Изгагина» согласно современным стандартам WorldSkills Russia для освоения образовательной программы и соответствия уровня освоения общих и профессиональных компетенций требованиям ФГОС СПО для сдачи демонстрационного экзамена в рамках промежуточной и итоговой государственной аттестации была составлена рабочая программа «Разработка виртуальной и дополненной реальности» для обучающих по направлениям 09.02.05 Прикладная информатика по отраслям и 09.02.07 Информационные системы и программирование. Перечень разделов, тем, последовательность их изучения, вид занятий и количество часов представлены в таблице (табл. 1). Перечень разделов и тем курса представлен в таблице (табл. 2).

Название раздела, темы Количество часов Формы работы

Всего Теория Практика

1. Введение в дополненную реальность 2 1 1 Формирование проектных групп. Инструктаж по ТБ. Групповая работа

2. Создание трехмерной модели 5 1 4 Групповая работа. Решение кейса

3. Создание АЯ-приложения 7 1 6 Групповая работа. Решение кейса

4. Сдача экзамена 5 5 В виде демонстрационного экзамена

Название раздела/темы Формы работы и оценки результата

Раздел 1. Лекции

Введение Рассматриваются следующие темы:

в дополненную • знакомство с дополненной реальностью;

реальность • понятия АЯ, мобильное приложение, трехмерный объект, объектно-ориентированное программирование; • принцип работы дополненной реальности

Обучающиеся работают в компьютерном классе, применяют

полученный теоретический материал на практике, в ходе выполнения

• создание простого проекта на основе готовых объектов;

• учатся управлению структурными элементами.

Название раздела/темы Формы работы и оценки результата

Кейс 1. «Создание первого проекта»

Раздел 2. Лекции

Создание Раздел включает в себя следующие темы:

трехмерной • создание 3D-объекта;

модели • разработка сцен сцена, моделей, анимации, наложение текстур

Обучающиеся работают в компьютерном классе, применяют

полученный теоретический материал на практике, в ходе выполнения

• создание элементов окружения для дополненной реальности;

• работа с текстурированием элементов окружения дополненной

• анимирование основных элементов окружения Кейс 2 «Создание окружения для дополненной и виртуальной

Предусмотрено выполнение учащимися индивидуальных и групповых

проектов по данной теме

Раздел 3. Лекции

Создание мобильного Рассматриваемые темы: • объектно-ориентированное программирование;

приложения • разработка мобильного приложения в среде Unity c элементами дополненной реальности.

Обучающиеся работают в компьютерном классе, применяют

полученный теоретический материал на практике, в ходе выполнения

• создание главного меню мобильного приложения;

• создание сцены для дополненной реальности;

• программирование игры для реалистичности Кейс 3. «Создание приложения в дополненной и виртуальной

Предусмотрено выполнение учащимися индивидуальных и групповых

проектов по данной теме.

Раздел 4. Практические занятия

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

Цель охарактеризованного выше курса — подготовка студентов среднего профессионального образования к демонстрационному экзамену, образцы заданий и основные критерии оценивания согласно ФГОС СПО и Профстандарта к которому представлены в единой системе актуальных требований (ЕСАТ) [2].

Приведем разбор задания образца КОД 1.1 на проверку уровня сформированности компетенции «Разработка виртуальной и дополненной реальности».

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

i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Минимальное количество моделей:

Описание модуля 1: Дизайн AR-приложения. Команда за отведенное время должна предоставить дизайн-документ и минимальный прототип приложения.

Описание модуля 2: Разработка AR-приложения. Выполнение модуля состоит из следующих частей: художественный дизайн, программирование, оптимизация, сборка. Части можно выполнять параллельно в зависимости от навыков и состава команды.

Инструкция для выполнения модуля 1.

Дизайн-документ — это детальное описание разрабатываемой компьютерной игры.

Он состоит из титульного листа, описания приложения, схемы экранов, блок-схемы работы приложения, скетчей, референсов, описания работы UI/UX и режима переключения игры в дополненную (виртуальную) реальность.

Пример описания приложения. При запуске приложения появляется главное меню, где есть кнопки «Обучение», «Играть» и «Выход».

Нажав на кнопку «Обучение», игрок попадает на экран с подробной инструкцией о прохождении.

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

Цель игры: игрок должен собрать дом согласно чертежу.

Пример составления схемы экранов (рис. 1). При составлении алгоритма работы окон приложения необходимо воспользоваться сайтом Draw.io [8]. Студенту нужно посмотреть на описание проекта и решить, какие экраны будут открываться при нажатии на каждую кнопку.

Пример крупноблочного алгоритма (рис. 2). Алгоритм работы приложения состоит из блоков начала, события, действия, решения пользователя и условия. Он описывает последовательность развития самой игры от начала запуска, когда только приложение было открыто, до момента победа или поражения.

Пример описание UI/UX.

UX (user experience) — функционал интерфейса. В него входит навигация по проекту, функционал меню и результат взаимодействия со страницами. Это не только «костяк» — его структура, но и коммуникация: диалоговые окна, функционал кнопок, настройки поиска и форм.

Рис. 1. Схема экранов приложения

Рис. 2. Пример крупноблочного алгоритма работы приложения

UI — это «user interface», пользовательский интерфейс — оформление приложения: сочетания цветов, шрифты, иконки и кнопки.

Описание UI/UX в дизайн-документе может выглядеть следующим образом.

Главное меню состоит из кнопок «Начать», «Обучение» и «Выход»: «Обучение» — находится чуть выше центра экрана для перехода на сцену с инструкцией пользования приложением; «Начать» — находится посередине экрана (кнопка синего цвета, крупного размера, чтоб у игрока было желание нажать на нее для перехода в сцену игры).

Зайдя в сцену игры, перед пользователем появляется сцена с тремя частями дома. Игра имеет горизонтальное положение, чтобы было удобнее работать двумя руками.

Если игрок собрал все части в правильном порядке, ему выводится экран «Победа» — ярко-красная надпись, написана большим шрифтом, показывающая значимость победы. Эта кнопка выводится посередине экрана. Вторая кнопка -«Меню». Она сделана идентично кнопке «Играть заново», возвращает обратно на сцену «Главное меню».

Если игрок не собрал все части в правильном порядке, ему выводится экран «Поражение». Эта надпись ярко-синяя, написана большим шрифтом, показывающая горечь поражения.

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

На этом составление дизайн-документа завершается и обучающий переходит к модулю 2 — дизайн и разработка.

Для формирования художественного оформления проекта и создания трехмерных моделей необходимо воспользоваться программной трехмерной графикой Blender [7]. Это профессиональное свободное и открытое программное обеспечение для создания трехмерной компьютерной графики, включающее в себя средства моделирования, скульптинга, анимации, симуляции, рендеринга, постобработки и монтажа видео со звуком, компоновки с помощью «узлов», а также создания 2D-анимаций.

В Blender создаются все объекты для VR/AR-приложения, в зависимости от тематики задания есть главная модель и ее дополняющие. К ним выстраивается циклическая анимация по ключевым кадрам.

Для сохранения работы все модели по отдельности необходимо сохранить в формате .fbx.

Моделям нужно придать реалистичность. Для этого служит программа Adobe Substance Painter [6]. Ее интерфейс сильно напоминает Adobe Photoshop, но отличается тем, что служит «раскраской» для ЭЭ-объектов. Используя уже готовые заготовки материалов, можно создать реалистичный вид модели.

Первая часть модуля выполнена, теперь нужно открыть Unity 3D [10] для

соединения трехмерных моделей и программного кода будущего приложения.

Unity — межплатформенная среда разработки компьютерных игр, разработанная американской компанией Unity Technologies. Unity позволяет создавать приложения, работающие на более чем 25 различных платформах, включающих персональные компьютеры, игровые консоли, мобильные устройства, интернет-приложения и др.

Согласно дизайн-документу, уже расписаны основные экраны игры, которые межплатформенный движок может превратить в реальность.

При открытии Unity необходимо удалить стандартную камеру и поставить необходимый плагин для работы в AR. Лицензия, камера дополненной реальности и сами метки предварительно создаются и выгружаются с сайта Vuforia [13]. Зайдя под своим логином и паролем, пользователь бесплатно может установить необходимые дополнения к своему проекту.

Затем уже в Unity создается главное меню приложения. Для этого в иерархии объектов через нажатие «UI» — «Button» размещаются необходимые кнопки «Играть», «Правила» и «Выход».

Для функциональной работы и перехода на необходимые сцены нужно прописать следующий алгоритм на языке программирования C# для перехода между сценами:

using System.Collections; using System.Collections .Generic; using UnityEngine;

using UnityEngine.SceneManagemant; public class MainMenu : MonoBehaviour

public void Exit()

public void Play()

public void Rules()

Согласно экзаменационному заданию, по нажатию на кнопки объекты должны переноситься в дополненную реальность. Для этого в Unity создается GameObject (пустой объект) и на него привязывается программный код. Следуя алгоритму, пользователь нажимает на экран и видит элементы в AR-режиме.

Перед сборкой проекта его работоспособность проверятся нажатием на «Play». К камере устройства подносится метка и на ней возникают модели, созданные в Blender (рис. 3).

Рис. 3. Проверка работы проекта

Если приложение работает корректно, то нажатием на «File» — «Bild Settings» происходит сборка на необходимую платформу.

Таким образом, студент может следовать четким инструкциям для выполнения задания дополненной реальности и набрать на демонстрационном экзамене максимальное количество баллов.

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

1. Атлас по анатомии [Электронный ресурс]. — URL: https://www.3dorganon.com/ (дата обращения: 19.09.2022).

2. Единая система актуальных требований [Электронный ресурс]. — URL: https://esat.worldskills.ru/ (дата обращения: 11.12.2022).

3. История развития виртуальной реальности [Электронный ресурс]: ст. / Центр современного искусства МАРС. — URL: https: //centermars .ru/blogmars/stati/istoriya-razvitiya-virtualnoy-realno sti/ (дата обращения: 19.09.2022).

Камера

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

Свойства

Свойство: Функция:
Clear Flags Определяет, какие части экрана будут очищены. Это удобно при использовании нескольких камер для отрисовки разных элементов игры.
Background Цвет, применяемый для фона после отрисовки всех элементов, в случае отсутствия скайбокса.
###Маска отрезания Включение или исключение слоёв объектов на рендер этой камерой. Назначение слоёв объектам производится через Inspector.
Projection Переключает способность камеры симулировать перспективу.
X Камера будет рисовать объекты в перспективе.
X Camera will render objects uniformly, with no sense of perspective. NOTE: Deferred rendering is not supported in Orthographic mode. Forward rendering is always used.
Size (когда выбран ортографический режим) Размер зоны видимости камеры для ортографического режима.
Field of view (когда выбран режим перспективы) Ширина угла обзора камеры, измеряется в градусах по локальной оси Y.
###Clip Planes (Плоскости отреза) Дистанция, на которой камера начинает и заканчивает рендеринг.
X Ближайшая точка относительно камеры, которая будет рисоваться.
X Дальняя точка относительно камеры, которая будет рисоваться.
Normalized View Port Rect Четыре значения, отражающие то, в какой области экрана будет выведено изображение с камеры, в экранных координатах (от 0 до 1).
X Начальная позиция области по горизонтали вида камеры, который будет рисоваться.
Y Начальная позиция области по вертикали, где вид камеры будет рисоваться.
W (Ширина) Ширина вида камеры на экране.
H (Высота) Высота вида камеры на экране.
Depth Позиция камеры в очереди отрисовки. Камеры с большим значением будут нарисованы поверх камер с меньшим значением.
###Способ рендера Опции для определения методов рендеринга для камеры.
X Камера использует метод рендеринга, установленный в Player Settings.
Вершинное освещение Все объекты рисующиеся этой камерой будут рендериться как Vertex-Lit-объекты.
X Все объекты будут рендериться с одним проходом на материал.
Deferred Lighting (только в Unity Pro) Все объекты будут рендериться сначала без освещения, а затем будет произведён рендер освещения для всех объектов разом, в конце очереди рендеринга.
Target Texture Ссылка на Render Texture, которая будет содержать результат рендеринга камеры. Назначение этой ссылки отключает способность камеры рендерить на экран.
HDR Включение технологии High Dynamic Range.
Target Display Defines which external device to render to. Between 1 and 8.

Детали

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

Вы можете создать несколько камер и назначить каждой свою глубину(Depth). Камеры будут отрисовываться от низшей глубины до высшей глубины. Другими словами, камера с Depth 2 будет отрисована поверх камеры с Depth 1. Вы можете настроить значение свойства Normalized View Port Rectangle для изменения позиции и размера изображения с камеры на экране, например для создания нескольких экранов в одном, или для создания зеркала заднего вида.

Способ рендера

Unity поддерживает различные способы рендеринга. Вы должны выбрать один из них, в зависимости от содержимого вашей игры и целевой платформы / аппаратного обеспечения. Различные методы рендеринга поддерживают различные возможности и дают различную производительность, особенно в аспекте применения теней и источников света. Метод рендеринга, используемый в вашем проекте, выбирается в Player Settings. Дополнительно свой метод рендеринга может быть выбран для каждой камеры.

См. способы рендеринга для получения всех подробностей.

Clear Flags

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

Skybox

Это настройка по умолчанию. Пустые участки экрана будут отображать скайбокс текущей камеры. Если текущая камера не имеет скайбокса, то скайбокс будет использован стандартный скайбокс из меню Render Settings ( Edit->Render Settings ). Если и там не будет указан скайбокс, то будет использован цвет Background Color . Также к камере может быть добавлен компонент Skybox. Если вы хотите создать новый скайбокс, см. это руководство.

Solid color

Любые пустые части экрана будут отображать текущий фоновый цвет ( Background Color ) камеры.

Только глубина

Если вы хотите рисовать оружие игрока не подвергая его обрезке объектами окружения, внутри которых оно находится, установите одну камеру, рисующей окружение, с Depth 0, и ещё одну камеру, рисующую оружие — Depth 1. Для камеры оружия выберите Clear Flags depth only . Это позволит отобразить окружение на экране, но проигнорировать всю информацию о взаимном положении предметов в пространстве. Когда оружие будет отрисовано, непрозрачные части будут полностью отрисованы на экране поверх ранее находившегося там изображения, независимо от того, насколько близко оружие находится к стене.

Оружие отрисовано последним после очистки буфера глубины предшествовавшей камеры.

Не очищать

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

Clip Planes (Плоскости отреза)

Near и Far Clip Plane — свойства, определяющие, где начинается и заканчивается область отрисовки камеры. Эта область ограничивается плоскостями, перпендикулярными направлению камеры, и находившимися в этих позициях относительно неё. Near Plane — это ближайшая позиция, а Far Plane — дальняя позиция.

Плоскости также определяют точность буфера глубины. Для обеспечения наивысшей точности вам следует отодвинуть Near Plane так далеко, насколько возможно.

Обратите внимание, что эти плоскости вместе определяют поле зрения камеры, которое известно как фрустум. Unity гарантирует, что объекты, полностью находящиеся за пределами фрустума, не будут отображаться. Это называется Frustum Culling и это срабатывает независимо от Occlusion Culling.

Из соображений производительности вы можете прекращать отрисовку мелких объектов раньше, чем отрисовку прочих. Для этого поместите их в separate layer и настройте дистанцию обрезки для этого слоя, используя функцию Camera.layerCullDistances.

Маска отрезания

Culling Mask используется для выборочного рендеринга групп объектов посредством использования слоёв. Больше информации об использовании слоёв можно найти здесь.

Normalized Viewport Rectangles

Normalized Viewport Rectangles предназначено для определения части экрана, на которой будет отрисовано изображение с камеры. Вы можете, к примеру, вставить изображение карты в нижний правый угол экрана, а вид с камеры на выпущенной ракете — в верхний левый угол. Немного поработав над дизайном, используя Viewport Rectangle , вы сможете создать кое-какие уникальные системы.

Очень просто создать раздельный экран для двух игроков, используя Normalized Viewport Rectangle . После создания двух камер, установите обеим камерам свойство H в значение 0.5 и для одной из них свойство Y в значение 0.5, а для другой — в значение 0. В результате, первая камера будет рисовать изображение в верхней половине экрана, а вторая камера — в нижней половине экрана.

Создание экрана для двух игроков с помощью Normalized ViewportRectangle

Orthographic

Переключив камеру в ортографичесий ( Orthographic ) режим, вы устраните всю перспективу из отрисовываемого ей изображения. Это полезно для создания двумерных и изометрических игр.

Заметьте, что туман отрисовывается при этом равномерно, так что может выглядеть не так, как вы ожидали. Прочтите справко по компоненту Render Settings для получения подробностей.

Перспективная камера. Ортографическая камера. Изображение объектов не уменьшается при увеличении дистанции.

Текстура рендера

Эта возможность доступна лишь в расширенных лицензиях Unity. Она позволяет отрисовывать изображенеи с камеры в текстуру (Texture), которая может быть применена к другому игровому объекту. Это делает простым создание спортивной арены с видеомониторами, камеры наблюдения, отражений и т.д.

Использование рендертекстуры для создания монитора

Target display

A camera has up to 8 target display settings. The camera can be controlled to render to one of up to 8 monitors. This is supported only on PC, Mac and Linux. In Game View the chosen display in the Camera Inspector will be shown.

Советы

  • Камеры могут быть вызваны, назначены дочерним объектом и заскриптованы как любой другой игровой объект
  • Для эффекта ускорения в гоночной игры используйте повышенный Field of View .
  • Камеры можно использовать в симуляции физики, если к ним добавить компонент Rigidbody .
  • Нет ограничения на количество камер в сцене.
  • Ортографические камеры отлично подходят для создания 3D пользовательских интерфейсов
  • Если вы наблюдаете артефакты глубины (мелькают близкорасположенные поверхности), попробуйте выставить Near Plane в максимально возможное значение.
  • Камеры не могут рендерить одновременно на экран и в Render Texture, только в одно из них.
  • Pro-лицензия предоставляет функцию названную Render-to-Texture, которая позволяет рендерить камеру в текстуру, для еще более уникальных эффектов.
  • Unity поставляется с предустановленными скриптами для управления камерой, их можно найти в Components->Camera Control . Поэкспериментируйте с ними чтобы узнать об их возможностях.

Фотореалистичная графика на уровне ААА в Unity

Такое мнение сформировалось по ряду причин. Первая из них отсылает нас к 2015 году, когда в Unity был доступен лишь встроенный конвейер рендеринга с рядом ограничений. На тот момент добиться сопоставимого с Unreal Engine визуала было очень сложно. Другой причиной является порог входа в Unity: он довольно низкий, а начинающим программистам и дизайнерам совсем не очевидна концепция компонентной системы Unity, что порождает довольно много слухов по сей день.

Сегодня с уверенностью можно сказать, что на качество графики, независимо от выбранного движка, влияют настройки средств визуализации, ведь параметры постобработки в Unreal Engine и Unity одинаковы.

Всем под кат! Далее мы расскажем, как добиться фотореалистичной графики в Unity.

Вместо оглавления:

Основные механизмы улучшения графики

Постобработка (post processing) — метод обработки в компьютерной графике, который добавляет дополнительные эффекты к буферу изображения перед его отрисовкой на экране с целью улучшения качества изображения.

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

По компоновке, доступности и удобству использования Unreal выгодно отличается от Unity. Главное преимущество Unreal Engine в том, что постпроцессинг включается по умолчанию, как только вы создаете проект. В Unity постпроцессинг нужно включать отдельно, через специальное окно менеджера пакетов. Для базовой настройки эффектов в Unity доступно несколько конвейеров рендеринга с поддержкой сценариев с предопределенными шаблонами. При использовании HDRP качество изображения, достигаемое в Unity с учетом определенных настроек, о которых пойдет речь ниже, не отличить от качества изображения в Unreal Engine.

В Unity есть три готовых конвейера рендеринга, которые отличаются между собой производительностью для разных типов платформ и устройств, а также различными возможностями. Также в Unity можно создать собственный конвейер.

Настройка встроенного конвейера

При использовании стандартного конвейера рендеринга в Unity вы можете скачать специальный пакет Post Processing через Package Manager. Мы будем использовать универсальный конвейер рендеринга URP версии Unity 2020.3.16f1 LTS (версия с долговременной поддержкой). Но если вы используете встроенный конвейер рендеринга, то его необходимо настроить:

  • Выберем Window → Package Manager и скачаем пакет Post Processing. В папке Assets мы создадим папку Graphics, а в ней создадим папку PostProcess. Теперь нажмем по свободной области правой кнопкой мыши, выберем Create → Post-Process Profile. Создастся файл с соответствующим именем.
  • В иерархии создадим пустой объект. Нажмем правой кнопкой и выберем GameObject → Create Empty, назовем его PostProcessingBox (PPB). Добавим компонент PostProcessLayer на объект камеры, а компонент Post Process Volume к созданному ранее объекту PPB. К нему также добавим компонент Box Collider и активируем параметр isTrigger. Теперь, при условии нахождения камеры внутри границ объекта PPB, PostProcessing будет активен.
  • Создадим специальный слой рендеринга PostProcess. В верхней части выбранного объекта выделим Layer с параметром Default и перейдем в AddLayer. В любом из пронумерованных слоев создадим слой PostProcess.
  • На компоненте PostProcessLayer, который мы добавили к камере ранее, в параметре Layer выберем созданный нами слой PostProcess. Затем добавим этот же слой к объекту PPB. Для того чтобы повысить качество картинки и использовать AO (Ambient Occlusion) по максимуму, необходимо изменить путь визуализации в конвейере рендеринга с прямого на отложенный и включить поддержку HDR. Это можно сделать в настройках проекта, в окне «Качество» (Quality).

Направленный свет Directional Light является аналогом солнечного света. Он может освещать всю сцену, оставаясь единственным источником освещения. Это в свою очередь приводит к проблеме сглаживания перспективы, т.к. теневая карта покрывает большую часть или всю сцену целиком. Cкриншот «бородатой» картинки прилагается.

Пиксели теневой карты, расположенные ближе к перспективной камере (B), выглядят увеличенными, с характерной ступенчатой структурой по сравнению с пикселями, которые находятся дальше (A). Причина ступенчатости теней кроется в непропорциональном масштабировании теневой карты камерой с перспективной проекцией.

Более высокое разрешение теневой карты может уменьшить ступенчатый эффект, однако при этом используется больше памяти и пропускной способности при рендеринге. Замечу, что такой подход приводит к пустой трате ресурсов, т.к. в Unity реализован механизм каскада теней, который заключается в использовании нескольких теневых карт в зависимости от расстояния объектов на сцене до камеры.

Если углубиться в процесс рендеринга, то можно обнаружить, что процесс выборки теневой карты UnitySampleShadowmap() находится в UnityShadowLibrary.cginc. В этой статье мы не будем рассматривать язык Cg, но для тех, кто с ним знаком, добавим, что процесс обработки жестких теней в шейдере выполняется за один проход рендера в отличие от прохода для мягких теней, который выполняется несколько раз. Чуть ниже мы настроим мягкие тени для универсального конвейера с учетом теневых карт без написания кода на Cg.

Подробнее о направленном свете в Unity написано здесь.

Настройка универсального конвейера

Универсальный конвейер рендеринга (URP, ранее LWRP) — это готовый конвейер рендеринга Unity с поддержкой сценариев. С помощью URP можно быстро и легко создать оптимизированную графику на различных платформах, от мобильных до высокопроизводительных консолей и ПК.

Примечание. Проекты, созданные с использованием URP, несовместимы с конвейером визуализации высокой четкости (HDRP), а также со встроенным конвейером визуализации, поэтому, перед тем как начать разработку, вы должны решить, какой конвейер рендеринга будете использовать.

Для начала создадим новый проект в Unity Hub. Нажав на кнопку New, мы увидим различные шаблоны, которые Unity предлагает для начала работы. Выберем URP из предложенных шаблонов (Templates) и нажмем на кнопку Create.

URP будет автоматически установлен и настроен.
Unity-проект откроется и в окне иерархии (Hierarchy). Мы увидим простую сцену с объектами главной камеры, освещением постпроцессинга и 3D-моделями, подготовленными в качестве примера.

Нас интересует Post-process Volume, но перед тем как продолжить, проверим, какое цветовое пространство выбрано в Unity.

При наложении постэффектов смешивание выполняется в цветовом пространстве или фрейм-буфере. При использовании гамма-рендеринга смешиваются нелинейные цвета. Такое смешивание выполняется достаточно быстро, но результат не соответствует модели освещения реального мира. При использовании линейного пространственного рендеринга наложение выполняется в линейном пространстве и полученный результат выглядит более реалистичным.

Перейдем в File → Build Settings → Player Settings → Other Settings → Rendering и убедимся, что в параметре Color Space* выбрано цветовое пространство Linear. Если выбрано пространство Gamma, то необходимо переключиться на Linear.

Подготовка к работе с эффектами универсального конвейера

Вернемся к объекту сцены Post-process Volume. Выберем его и перейдем на вкладку «Инспектор» (Inspector). Здесь отображаются базовые параметры компонента Volume.

Компонент Volume можно добавить к любому GameObject, включая камеру, но Unity рекомендует создавать отдельные GameObject для каждого Volume в сцене.
Компонент Volume сам по себе не содержит фактических данных. Он ссылается на профиль в параметре Profile, который содержит значения для интерполяции. Эффекты в профиле Volume по умолчанию скрыты. Чтобы просмотреть, добавить или изменить эти эффекты, нужно нажать на кнопку Add Override (переопределение).

URP в настоящее время не поддерживает настраиваемые эффекты постобработки. Если в вашем проекте используются настраиваемые эффекты постобработки, их нельзя воссоздать в URP.

Перед тем как добавить новый эффект, настроим базовый параметр Mode, который отвечает за область применения текущего компонента постпроцессинга. По умолчанию указано значение Global: все объекты на сцене будут проходить через постпроцессинг. Но мы переключимся на Local и посмотрим, как контролировать постпроцессинг в нужной нам области.

В интерфейсе появится параметр Blend Distance и кнопка добавления коллайдера.

Нажмем на нее и выберем из выпадающего списка Box. Компонент Box Collider будет добавлен в нижнюю часть вкладки «Инспектор».

Для параметра Size установим значение «10 10 10».

Чтобы увидеть текущую границу постпроцессинга, нужно выбрать параметр Gizmos на вкладке Scene. Границы постпроцессинга будут выделены зеленым полупрозрачным кубом. В параметре Blend Distance выставим значение «3». Поскольку к любому объекту в иерархии можно добавить компонент Volume, мы можем применять различные эффекты постпроцессинга для отдельных участков сцены. Эти эффекты будут интерполировать между собой на расстоянии, заданном параметром Blend Distance.

При этом иерархия может содержать как глобальные, так и локальные компоненты постпроцессинга.

Работа с эффектами универсального конвейера

Вернемся к теневым картам и настроим их для нашего универсального конвейера.

Для этого в шапке Unity нажмем на кнопку Edit и выберем Project Settings. Откроется соответствующая вкладка. Выберем из списка параметр Quality и в графе Rendering нажмем на выбранный ассет UniversalRP-HighQuality. В нижней вкладке Project подсветится нужный компонент, нажмем на него и перейдем на вкладку «Инспектор» (Inspector).

В открывшейся вкладке настроим параметр Shadows:

  • в Сascade Count укажем 3;
  • в Split 1 укажем 12;
  • в Split 2 укажем 15;
  • в Depth Bias поставим 1;
  • в Normal bias поставим 0.8;
  • ставим галочку на Soft Shadows.

В результате получим более четкие тени на переднем и заднем планах с учетом каскада.

Давайте добавим новый эффект. Нажмем на кнопку Add Override, в открывшейся панели выберем post-processing, далее выберем Panini projection.

Объект Main Camera имеет параметр Field Of View (поле зрения). По умолчанию этот параметр выставлен в 60 градусов, поэтому объекты по углам сцены в окне Game приобретут эффект дисторсии (растяжения).

Вместо проекции Panini projection можно воспользоваться настройкой физической камеры, включив свойство Physical camera в компоненте Camera. Настройка этой системы выходит за рамки данной статьи.

Вы уже могли заметить, что в эффектах отсутствует затенение Ambient Occlusion, которое, в отличие от прямого освещения, добавляет реалистичности и объема объектам на сцене. Для применения эффекта выберем вкладку Project и перейдем в папку Settings, где лежит профиль для Volume, который мы настраивали выше. Выберем ForwardRenderer.asset и перейдем на вкладку Inspector. Нажмем на кнопку AddRendererFeature и в открывшемся окошке выберем компонент Screen Space Ambient Occlusion. Теперь на вкладке «Инспектор» появится добавленный компонент New Screen Space Ambient Occlusion.

Оптимальных параметров для настройки этого объекта нет, они подбираются индивидуально. Мы предлагаем следующие настройки параметров:

  • Source — выберем Depth Normals. Параметр Normal Quality при этом блокируется, он будет доступен только при выборе Depth (в некоторых сценариях с помощью этого параметра можно улучшить качество затенения);
  • Intensity — 1.58;
  • Direct Lighting Strength — 0.217;
  • Radius — 0.1;
  • Sample Count — 4.

Вернемся к настройке постпроцессинга. Выберем PostProcessValue и перейдем на вкладку «Инспектор». Нажмем на длинную кнопку Add Override (через нее мы будем добавлять все остальные постэффекты) и выберем хроматическую аберрацию (Chromatic Aberration). Аберрацию обычно используют для получения эффекта искажения цвета, которое создает реальная камера, когда ее объектив не может объединить все цвета в одну точку. (Эффект, в частности, с завидной регулярностью наблюдается в костюмах главного героя серии игр Crysis.) Если выкрутить параметр Intensity на 1, сможем насладиться этим эффектом во всей красе.

Не забываем вернуть значение Intensity в 0.1.

В нашей иерархии, как вы уже успели заметить, присутствуют различные 3D-модели, которые относятся к строительству, поэтому можно немного пофантазировать и представить, что мы видим все происходящее через строительные очки, которые создают эффект аберрации.

Теперь добавим эффект небольшой размытости отдаленных объектов (Depth Of Field).

  • выставим параметр Mode на Gaussian;
  • Start в 0;
  • End в 160;
  • Max Radius в 1;
  • включим Hight Quality Sampling.

Давайте придадим нашей картинке еще более правдоподобный вид.

Добавим эффект Color Adjustments и настроим его следующим образом:

  • Post Exposure — 0.2;
  • Contrast 10 — Saturation -20.

Теперь повысим яркость в нашей сцене для получения большего динамического диапазона в работе над светом. Перейдем в панель Lighting. Нажмем на кнопку Window в шапке Unity, выберем Rendering → Lighting, в открывшейся вкладке выберем вторую закладку Environment, в разделе Environment Lighting установим значение Intensity Multiplier на 2.

Поскольку мы работаем с запеченным освещением, необходимо нажать на кнопку Generate Lighting внизу вкладки. Unity автоматически начнет запекать карту освещения. Перед этим рекомендуем сделать сцену чуть более яркой, установив значение Indirect Intensity на 2.

Теперь в окне Hierarchy выберем объект Directional Light и вернемся к вкладке «Инспектор». Установим значение Intensity на 2.

Вернемся в Post-Process Volume и добавим семь эффектов:

  • Color Adjustments;
  • Film Grain;
  • Color Curves;
  • Vignette;
  • Bloom;
  • Motion Blur;
  • Lift Gamma Gain.

Vignette — стандартная маска-виньетка, которая затеняет кадр по краям. Для этого эффекта активируем два параметра и установим следующие значения:

  • Intensity — 0.3;
  • Smoothness — 0.4.

Теперь настроим параметры в эффекте Bloom, который отвечает за свечение и блики (например, когда вы смотрите на очень яркий объект вблизи), и посмотрим на результат:

  • Threshold — 2;
  • Intensity — 5;
  • Scatter — 0.05;
  • Dirt Texture — Default-Particle;
  • Dirt Intensity — 10.

Эффект Motion Blur размывает кадр по направлению вашего движения. В играх часто можно заметить этот эффект при быстром движении в определенном направлении.

Давайте настроим Motion Blur:

  • Quality medium;
  • Intensity — 1;
  • Clamp — 0.03.

Так будет выглядеть картинка с эффектом Motion Blur при резком движении камеры вперед:

Попробуем поиграть с нашими настройками цветов. В Color Adjustments установим Post Exposure в значение 0.4, а Contrast в значение 10 и опустим Saturation в значение -18.

Теперь в фильтре Film Grain установим Type Thin в значение 2, в параметре Intensity установим 0.2 и в Response выставим 1. Минимальный шум необходим, особенно в темных участках, т.к. мы постоянно его воспринимаем, но не всегда отдаем себе в этом отчет.

В Color Curves выберем параметр Master и нажмем на Override, чтобы поработать с кривыми. Для того чтобы добиться кинематографичности, нам необходимо подрезать информацию в нижней части спектра. Теория цветокоррекции и кривых выходит за рамки этой статьи, поэтому просто создадим ключ в нижней части кривой, сделав двойной клик по кривой, как показано на снимке, и установим для ключа значения 0.044 и 0.066.

Предлагаем вам поиграться с параметрами настройки Lift Gamma Gain самостоятельно.

Сравним наш текущий результат с изначальным.

Бонус!

Вы также можете поработать с HDRP, там есть volumetric light и красивый fog. Вкупе с PBR-текстурированием можно получить реалистичный результат, но оставим HDRP для нашей следующей статьи.

Скриншот для затравки:

Заключение

Мы узнали о том, как создавать постэффекты и как ими управлять. Смогли сделать качественный визуал, за который не стыдно. В сцену можно было добавить PBR, 3D-модели с системой LOD, использовать VFX Graph для частиц и получить отличные результаты. Пусть это будет вашим домашним заданием.

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

Конвейеры Unity стали гораздо более быстрыми и оптимизированными, но по-прежнему не позволяют добавлять кастомных эффектов, только пресеты для URP. Этот минус обещают исправить, ну а мы подождем.

SPIN-код автора: 1418-2378

Бонус: превью эффектов post processing

Ниже приведены примеры всех визуальных эффектов, доступных в Post Processing.

Окклюзия окружения (Ambient occlusion (AO)) — математическая модель затенения, применяемая в компьютерной графике. Используется для вычисления параметра интенсивности света. Окклюзия окружения затемняет складки и дыры и делает графику в компьютерных играх более реалистичной.

Отражения в экранном пространстве — используется для имитации незначительных отражений, таких как мокрый пол или металлические поверхности.

Глубина резкости — имитирует объектив камеры, в котором фокус находится в определенной точке, а все, что находится за пределами этой точки, размыто.

Размытие в движении — размывает объекты, которые движутся мимо. Используется, например, для уменьшения внимания к окружению, когда вы фокусируетесь на бегущем персонаже или на машине, проезжающей мимо.

Свечение и блики — имитирует свет от яркого источника, а также воспроизводит блики, которые возникают, когда реальная камера фокусируется на ярком свете.

Цветовая градация — изменяет и улучшает цвет конечного изображения. Используется для создания настроения или исправления неправильной окраски каких-либо объектов.

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

Зернистость — добавляет эффект зернистости пленки на экран, имитируя присутствие мелких частиц в металлическом серебре пленки. Визуально выглядит как шум на изображении.

Виньетка — затемняет и обесцвечивает изображение по краям.

Искажение объектива — искажает изображение, имитируя аберрацию оптических систем реальной камеры.

Автоэкспозиция — динамически регулирует экспозицию изображения в соответствии с диапазоном уровней яркости изображения.

Eye Adaptation (Auto Exposure) — эффект привыкания глаз к условиям освещения (например, при переходе из темных зон в светлые).

Избавиться от этого можно и уменьшением поля зрения, но мы не хотим смотреть в замочную скважину, поэтому уберем эффект растяжения с помощью свойства Distance. Поставим галочку в поле Distance и установим параметр на 0.5.

Создание панорамных видео в Unity

Большинство статей моего блога рассчитано на разработчиков игр. Если вы один из них, то можете задаться вопросом, чем вас может заинтересовать создание панорамных видео (360° videos). Виртуальная реальность — очень успешная отрасль, на различных платформах каждый год выпускается всё больше игр. Многие игроки узнают о VR-играх через трейлеры, которые, к сожалению, записаны в 2D.

Если вы хотите сделать ещё один шаг вперёд, то можете создать дополнительный трейлер в панорамном видео, чтобы продемонстрировать весь потенциал вашей игры. Хотя для игры в VR обычно требуется дорогая гарнитура, панорамные видео нативно поддерживаются YouTube без необходимости дополнительного оборудования. А если у вас есть телефон, то вы можете очень просто превратить его в VR-гарнитуру с помощью Google Cardboard.

Это может обеспечить людям гораздо более сильное погружение и дать почувствовать, в чём смысл вашей игры. Такие фильмы, как «Оно» (см. трейлер ниже) и «Заклятие» полностью воспользовались этим: для них создали VR-игры (с трейлерами в панорамном видео), обеспечившие более интерактивный опыт.

Наконец, панорамные видео отлично подходят для образовательных целей, это можно увидеть на примере All Discovered Exoplanets: A Narrated 360 VR Journey.

Разбираемся с панорамными видео

Скорее всего, вы знакомы с YouTube и с тем, как он работает. Однако панорамные видео знакомы не столь многим. Большинство видео записывается на камеру, фиксирующую только небольшую часть окружения. Панорамные видео же одновременно записывают всё, что происходит во всех направлениях. Обычно для этого требуются специальные камеры, называемые всенаправленными камерами. Они или используют кривые зеркала для отражения окружающего мира в традиционную камеру (почти так же, как объектив «рыбий глаз») или имеют несколько камер, смотрящих в разные направления. Одной из таких камер является GoPro Omni (см. ниже), которая по сути является устройством, содержащим шесть стандартных камер с объективами «рыбий глаз».

Легко понять, почему оборудование, необходимое для записи панорамных видео, обычно более дорогое по сравнению с традиционными камерами. Однако это не единственная причина, ограничивающая их распространение. Для правильного воспроизведения панорамных видео требуется специальное ПО и оборудование. Экраны, как и камеры, предназначены для воссоздания только небольшой части окружений. YouTube смог обойти это ограничение, позволив зрителям «поворачивать» видео, чтобы можно было осматриваться. Если вы смотрите панорамное видео с телефона или планшета, то обычно двигаете его в пространстве, чтобы увидеть разные части «сферы» на 360°.

YouTube поддерживает два типа панорамных видео: моно и стерео (последние часто называют видео в виртуальной реальности). Разница между ними заключается в том, что стереовидео предназначено для VR-гарнитур и может передать ощущение глубины, которое невозможно почувствовать в традиционных видео. Это реализуется наличием не одного, а двух видео, по одному для каждого глаза. Эти два видео одновременно записываются двумя камерами, расстояние между которыми сравнимо с расстоянием между глазами. В результате этого VR-видео могут «обмануть» мозг и он будет воспринимать истинное расстояние, как в повседневной жизни.

В таблице показаны требования, которые имеют эти два типа видео.

Название 360° video Virtual Reality Video
Моно Стерео
2D 3D
Ссылка Поддержка Поддержка
Частота кадров 24, 25, 30, 48, 50, 60 25, 30, 50, 60
Формат Равнопромежуточный
Соотношение сторон 2:1
Выше-ниже равнопромежуточного
Соотношение сторон 1:1
Разрешение Рекомендуемое: 7168 x 3584, до 8192 x 4096 От 5120 x 5120 до 8192 x 8192

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

Проецирование видео

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

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

Однако чаще всего в панорамных видео используется равнопромежуточная проекция (см. ниже).

Пространственный звук

Панорамные видео, как моно, так и стерео, могут поддерживать пространственный звук. В стандартных видео есть два аудиоканала (левый и правый), которые используются для создания ощущения направления при прослушивании в стереонаушниках. Пространственный звук позволяет кодировать истинное направление источника звука, а не просто лево/право. Это значит, что при наличии соответствующего оборудования можно ощущать полное погружение и понимать направления окружающих звуков.

Несмотря на своё название, VR-видео не так хороши, как «настоящие» VR-игры, потому что даже если VR-гарнитура способна отслеживать движения головы, видео отрендерено из фиксированной точки. Невозможно переместиться и увидеть, что находится за объектом, как это было бы в VR-игре. Это может немного дезориентировать, особенно в сочетании с пространственным звуком. Когда вы долго работаете над VR-проектом (игрой или видео), то можете к этому привыкнуть. Важно провести достаточно подробный плейтестинг, чтобы гарантировать удобство готового продукта и найти ограничения, вызывающие дискомфорт у игроков или зрителей.

Панорамное видео не обязательно должно иметь пространственный звук. YouTube поддерживает два формата:

  • First-Order Ambisonics
  • First-Order Ambisonics with Head-Locked Stereo

Хоть FOA использует 4 канала, YouTube поддерживает и шестиканальную версию, в которую просто добавлены традиционные левый и правый стереоканалы. Этот формат называется FOA with Head-Locked Stereo.

Особое внимание нужно уделить кодированию панорамного видео (стерео или моно), потому что не все форматы поддерживают 4 или 6 аудиоканалов. YouTube рекомендует следующее:

  • Формат: MP4, MOV
  • Кодек: H.264, ProRes, DNxHR

Как создать панорамное видео в Unity

Одной из множества функций, добавленных в Unity 2018.1, стала возможность делать скриншоты из камеры в формате, совместимом с панорамными видео YouTube. Эта функция вкратце описана в посте на веб-сайте Unity: Stereo 360 Image and Video Capture. К сожалению, в нём нет ссылки на сцену для тестирования.

Теория

Чаще всего ролики по играм записываются во время выполнения игры. Это подходит для стандартных видео, но обычно не подходит для панорамных. Основная причина заключается в том, что для рендеринга панорамной игры требуется гораздо большая площадь, из-за чего частота кадров сильно падает. Более стандартным подходом является рендеринг и экспорт каждого кадра в фоновом режиме, чтобы в дальнейшем их можно было отредактировать в стороннем ПО, например, ffmpeg или Premiere Pro. Именно этим мы и займёмся в нашем туториале.

Рендеринг панорамной сцены в Unity — довольно простой процесс, состоящий из трёх этапов:

  • Рендеринг сцены в текстуру кубической карты (предпочтительный в Unity формат для панорамных текстур)
  • Преобразование кубической карты в равнопромежуточную проекцию (предпочтительный для панорамных видео YouTube формат)
  • Сохранение равнопромежуточной проекции в PNG

Если вы знакомы с Unity, то, вероятно, знаете, что предпочтительный способ хранения панорамных текстур — это кубическая карта, которая является способом упаковки шести разных изображений без деформаций (см. ниже). Кубические карты часто используются для скайбоксов (skybox) и зондов отражений (reflection probes), поэтому есть вероятность, что вы уже с ними сталкивались.

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

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

Последним этапом будет экспорт равнопромежуточной текстуры в файл PNG. После рендеринга всех кадров видео можно объединить их при помощи программы наподобие ffmpeg или Premiere Pro.

Код

Первым шагом будет создание скрипта (в представленных ниже фрагментах он называется Camera360 ) и прикрепление его к камере, которая должна выполнять рендеринг. Однако код будет меняться в зависимости от того, хотим ли мы отрендерить видео в моно (360°/mono/2D) или в стерео (VR/stereo/3D).

Моно

Давайте начнём с моноверсии:

public class Camera360 : MonoBehaviour < public Camera Camera; public RenderTexture EyeCubemap; public RenderTexture EquirectTexture; void Update () < Camera.RenderToCubemap(EyeCubemap, 63, Camera.MonoOrStereoscopicEye.Mono); EyeCubemap.ConvertToEquirect(EquirectTexture, Camera.MonoOrStereoscopicEye.Mono); >>

Показанный выше скрипт рендерит каждый кадр в render texture под названием Equirect , которая будет содержать панорамный скриншот, сохранённый в равнопромежуточной проекции.

Значение 63 , использованное в методе RenderToCubemap , означает, что мы хотим делать скриншоты со всех шести граней куба.

И EyeCubemap , и EquirectTexture можно создать или в редакторе, или в коде.

Стерео

Код стереоверсии очень похож, но требует дополнительного шага:

 void Start () < Camera.stereoSeparation = 0.064f; // 64mm >void Update ()

Для рендеринга стереоизображения нужно отрендерить две кубические карты. stereoSeparation задаёт расстояние между этими кубическими картами. Стандартное значение — 64 мм, что примерно равно расстоянию между левым и правым глазом.

Создание и сохранение текстур

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

К сожалению, экспорт render texture в файл PNG — не такой простой процесс, каким он должен быть. Первая проблема заключается в том, что Unity не позволяет напрямую получать доступ к отдельным пикселям RenderTexture . Сначала render texture нужно скопировать в объект Texture2D .

Фрагмент кода ниже выполняет именно эту задачу, при помощи метода ReadPixels копирует пиксели из текущей активной render texture.

public string FileName; void Update () < . // Creates buffer Texture2D tempTexture = new Texture2D(EquirectTexture.width, Equirect.height); // Copies EquirectTexture into the tempTexture RenderTexture currentActiveRT = RenderTexture.active; RenderTexture.active = EquirectTexture; TempTexture.ReadPixels(new Rect(0, 0, EquirectTexture.width, EquirectTexture.height), 0, 0); // Exports to a PNG var bytes = tempTexture.EncodeToPNG(); System.IO.File.WriteAllBytes(FileName, bytes); // Restores the active render texture RenderTexture.active = currentActiveRT; >

При условии, что FileName содержит правильный путь к файлу PNG, представленный выше код выполнит всё необходимое. Нужно будет внести только одно небольшое изменение: сделать так, чтобы скрипт снова и снова не перезаписывал один и тот же файл. Для этого достаточно просто добавить к имени файла счётчик, чтобы многократного переписывания frame.png он выполнял запись в frame_0.png , frame_1.png , и так далее.

Проблемы

У этого решения есть и проблемы. Самая важная из них заключается в том, что некоторые эффекты постобработки могут работать не так, как задумано.

Производительность

Рендеринг панорамных кадров в Unity — очень затратная задача. В предложенном мной решении сцена рендерится 6 или 12 раз (в зависимости от формата видео — моно или стерео). Постобработка, необходимая для соединения изображений и сохранения каждого кадра на диск, может снизить производительность в 10-15 раз. Если вы рендерите видео в высоком качестве (8192×8192 пикселя), то каждый отдельный кадр может иметь размер более 100 МБ. Очевидно, что если вы не обладаете очень мощной машиной, то не сможете одновременно выполнять игру в реальном времени и экспортировать панорамные кадры.

Постобработка

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

Аналогично этому, эффекты размытия и bloom тоже вызывают ошибки по краям, демонстрируя существование швов. Простых решений этой проблемы нет, потому что ни один из созданных Unity стеков постобработки не предназначен для работы с панорамными изображениями.

Тем не менее, эффекты размытия и bloom всё равно можно применять в умеренной форме. Если вам необходимы эти эффекты, то лучше всего будет применить их в постпродакшене при помощи Premiere Pro.

Line Renderers

Огромная проблем панорамных изображений заключается в том, что могут некорректно отображаться line renderers. Если линия настроена так, что она постоянно должна смотреть на камеру, то при рендеринге её в панорамном изображении Unity просто отбросит её. Это чрезвычайно раздражает, потому что реальных причин для этого нет.

Unity разработала альтернативную версию line renderer под названием XRLineRenderer, которая работает корректно. Хоть она и не поддерживает все функции стандартного компонента Line Renderer, большинство функций вам реализовать удастся

У XRLineRenderer также имеется возможность создания простых эффектов свечения, что может снизить важность описанных в предыдущем разделе проблем.

  • «Что нового в Unity 2020.1?»
  • «Создание roguelike в Unity с нуля»
  • «Обучение умных игровых соперников в Unity методом «игра с самим собой» средствами ML-Agents»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *