Обзор аналогов игрового движка Unity: 2D Light System, 2D Dynamic Lights and Shadows, Light2D - GPU Lighting System, Light2D, 2DVLS (2D Volumetric Lights and Shadows) и Seasons After Fall Rendering System. Игровой движок Ethanon. Система освещения Unity.
Аннотация к работе
В частности, встроенная система освещения не позволяет двухмерным объектам служить полноценным препятствием для света и отбрасывать тени на другие объекты. Если куб является полноценным препятствием для света, то четырехугольник отбрасывает тень только от тех источников, которые не лежат в одной плоскости с ним, а спрайт и вовсе игнорируется системой расчета теней. В трехмерном пространстве это обусловлено физическим расчетом освещаемых областей, так как четырехугольник, в отличие от куба, не имеет толщины, однако в двухмерном пространстве объемные фигуры представлены плоскими 2D объектами, поэтому необходимо обеспечить возможность взаимодействия со светом двухмерных объектов, идентичную взаимодействию трехмерных в 3D пространстве. Примеры инструментов для работы с 2D освещением существуют, но, как правило, они либо определяют форму объекта через специальные компоненты Unity - коллайдеры, которые служат для обработки столкновений, и не всегда их применение возможно у данного объекта, либо, создавая области тени, отбрасываемой каким-либо объектом, не освещают сам объект. Цель работы: Разработать и реализовать систему освещения для работы с двухмерными объектами в виде расширения редактора Unity.Объект под источником также не отбрасывает теней, но освещается. Объект, находящийся на одном уровне с источником (имеющий то же значение координаты z), не освещается, но является препятствием для прохождения света, отбрасывая тень на все, что находится за ним. С точки зрения расчетов, интенсивность света затухает подобно Point light по мере удаления от области, освещаемой источником. Так, если точке в пространстве соответствует белая область Cookie, она освещается полностью, если черная, находится в тени, независимо от того, действительно ли попадает эта точка в тень от какого-то объекта. Проводя лучи от источника освещения к этим точкам, можно по наличию пересечения с контуром какого-либо объекта судить, находится ли эта точка в тени.Результатом работы является расширение для игрового движка Unity, позволяющее двухмерным объектам отбрасывать тени и использовать шейдеры. Система состоит из 12 скриптов, написанных на языке C# , одного файла с расширением .cginc и двух шейдеров на языке Cg. Система позволяет любому объекту с прикрепленным к нему компонентом LIGHTOBSTACLE служить препятствием для созданных источников света. Абстрактный класс LIGHTSOURCESCRIPT позволяет пользователям создавать собственные типы источников освещения, не меняя логику работы менеджера освещения.
План
4.1 Планы
Введение
Игровой движок Unity очень популярен среди разработчиков видеоигр, особенно среди начинающих, изза простоты освоения и бесплатности. Несмотря на то, что движок ориентирован на трехмерные приложения, он поддерживает работу с двухмерной графикой. Однако не все компоненты редактора одинаково хорошо работают в 3D и 2D. В частности, встроенная система освещения не позволяет двухмерным объектам служить полноценным препятствием для света и отбрасывать тени на другие объекты.
Ко всем объектам прикреплен одинаковый материал с одинаковым шейдером. Если куб является полноценным препятствием для света, то четырехугольник отбрасывает тень только от тех источников, которые не лежат в одной плоскости с ним, а спрайт и вовсе игнорируется системой расчета теней. В трехмерном пространстве это обусловлено физическим расчетом освещаемых областей, так как четырехугольник, в отличие от куба, не имеет толщины, однако в двухмерном пространстве объемные фигуры представлены плоскими 2D объектами, поэтому необходимо обеспечить возможность взаимодействия со светом двухмерных объектов, идентичную взаимодействию трехмерных в 3D пространстве.
1. Актуальность работы
В последнее время Unity развивается стремительными темпами, привлекая все больше новых разработчиков. На базе этого движка были созданы такие популярные игры, как Ori and the Blind Forest (разработчик: Moon Studios), Cities: Skylines (разработчик: Colossal Order), Dungeon of the Endless (разработчик: Amplitude Studios) [1], а также мобильная версия Hearthstone: Heroes of Warcraft (разработчик: Blizzard Entertainment) [2]. Кроме того, Unity используется для создания приложений, связанных с архитектурой, обучением, визуализацией данных, электронными книгами и многими другими отраслями [3]. Так при съемках фильма Книга джунглей (2016, режиссер: Джон Фавро) приложение на базе Unity Engine использовалось для визуализации в режиме реального времени перемещения по сцене и работы с освещением [4].
Примеры инструментов для работы с 2D освещением существуют, но, как правило, они либо определяют форму объекта через специальные компоненты Unity - коллайдеры, которые служат для обработки столкновений, и не всегда их применение возможно у данного объекта, либо, создавая области тени, отбрасываемой каким-либо объектом, не освещают сам объект.
2. Цели и задачи работы
Цель работы: Разработать и реализовать систему освещения для работы с двухмерными объектами в виде расширения редактора Unity.
Задачи
- Рассмотреть аналоги разрабатываемой системы;
- Сформировать список требований;
- Изучить основы освещения;
- Реализовать основные источники освещения;
- Реализовать систему расчета теней, как отбрасываемых объектами, так и внутренних;
- Обеспечить графический интерфейс для управления системой в окне редактора Unity;
- Составить документацию для пользователей системы.
3. Обзор аналогов
В качестве аналогов разрабатываемой системы были рассмотрены: - Готовые системы, опубликованные в Unity Asset Store: - 2D Light System (Автор: Михаил Любимов);
- 2DDL PRO - 2D Dynamic Lights and Shadows (Автор: Martin Ysa);
- Light2D - GPU Lighting System (Автор: Alexander Penkin);
- Light2D (Автор: Dan John Moran);
- 2DVLS (на данный момент эта система не доступна) (Автор: Pico Games);
- Реализованные системы освещения: - Seasons After Fall Rendering System (разработчик: Swing Swing Submarine);
- Игровой движок Ethanon 2D;
- Система освещения Unity.
К сожалению, большинство вышеупомянутых систем требуют покупки для их использования. Поэтому, обзор функционала некоторых из них выполнялся на основе комментариев пользователей, видео-демонстраций и тестовых сцен. игровой движок unity
3.1 2D Light System
Данная система является самой мощной из рассмотренных. Она поддерживает три типа источников освещения: Point Light, Spot Light и Directional Light, а также Ambient Light. Тени отбрасываются не только стандартными 2D объектами, но и системой частиц. Также в данном продукте реализован эффект преломления света при прохождении через прозрачные области. Для формирования тени система использует альфа-канал объекта, а не систему коллайдеров. Поддерживаются мягкие тени. Основными недостатками пользователи этого продукта называют: отсутствие поддержки со стороны разработчика, работа только в плоскость xy, невозможность управлять порядком прорисовки теней объектов [5].
3.2 2D Dynamic Lights and Shadows
Данная система формирует тени объектов путем трассировки лучей от источника света к определенным точкам на сцене. Эти точки задаются как формой освещаемой области (источник представляет собой восьмиугольник, отображенный при помощи специального шейдера), так и вершинами объектов. Существенный минус этой системы заключается в том, что эти углы определяются так называемыми коллайдерами [6]. Система коллайдеров Unity используется в первую очередь для определения столкновений объектов. В данном случае это значит, что не все объекты, имеющие данный компонент, должны служить препятствием для света, и не все препятствия, в свою очередь, должны обладать данным компонентом.
3.3 Light2D - GPU Lighting System
Данная система обладает следующими функциями: - Поддержка Normal mapping;
- Оптимизация для мобильных устройств;
- Отсутствие необходимости в использовании коллайдеров для формирования тени;
- Свободное изменение формы источника света;
- Точечный, линейный, окружающий источники;
- Поддержка системы частиц.
Для формирования освещенной области используются спрайты. Освещение формируется с использованием дополнительной камеры, которая должна быть в 1-1,5 раза больше основной. В то же время, работа с перспективной камерой поддерживается лишь частично [7].
3.4 Light2D
Тени, формируемые этой системой, зависят от формы коллайдера объекта. В то же время, система имеет достаточно удобный пользовательский интерфейс для настройки параметров источников освещения. Кроме того, в данном продукте реализована система автоматического объединения источников, имеющих одинаковый материал, что сокращает число необходимых вычислений [8].
3.5 2DVLS (2D Volumetric Lights and Shadows)
Основная идея этой системы заключается в задании геометрии объекта вручную. Это несколько похоже на систему коллайдеров, описанную ранее, но их работе такая система не мешает. Пользователь создает и перемещает вершины многоугольника, которые, соединяясь последовательно, формируют контур объекта. В данном продукте реализованы точечный источник света и источник произвольной формы. Работают они по сходному алгоритму, но форма первого представляет из себя правильный многоугольник с заданным количеством граней, а область освещения второго типа задается тем же способом, что и силуэт освещаемых объектов. Кроме того, источники могут изменять угол освещаемого сектора, тем самым моделируя Spot Light. Освещение объектов рассчитывается при помощи аддитивного шейдера, используемого полигоном источника [9].
3.6 Seasons After Fall Rendering System
Французская компания Swing Swing Subrarine представила систему освещения для своей игры Seasons After Fall на конференции Game Connection Paris. Основным компонентом системы являются так называемые планы (слайсы). Суть данной системы заключается в разделении сцены на несколько планов по аналогии с живописью (задний план, передний план и т.д.) (Ошибка! Источник ссылки не найден.). Ключевой особенностью является то, что каждый план имеет собственное освещение, эффекты, действующие на весь план, и собственное значение окружающего света. Источники освещения и тени формируются на основе их собственной системы формирования спрайтов. Освещение слайса формируется объединением двух карт освещения - передней и задней. Такая система позволяет использовать неограниченное количество источников. С другой стороны, она не позволяет использовать карты нормалей [10].
3.7 Игровой движок Ethanon 2D
Ethanon 2D - Полноценный игровой движок, сфокусированный на поддержке высококачественного освещения. Из источников освещения представлены только точечные. Поддерживается работа с тенями от 2D объектов и импортированных 3D. Настройка ширины затеняемой области производится отдельно и не зависит от формы объекта [11].
3.8 Система освещения Unity
Система освещения Unity состоит из источников освещения, системы запекания света, системы шейдеров и системы глобального освещения. Все отображаемые объекты имеют свой компонент-рендерер, к которому прикреплен материал. Материал представляет собой шейдер, параметры которого можно настраивать. Шейдеры могут быть написаны пользователями, а могут быть выбраны из стандартных. Для объявления переменных и описания функций расчета освещения используются специальные файлы с расширением .cginc. Источники освещения являются объектами с прикрепленным к ним специальным компонентом. Unity поддерживает следующие типы источников освещения: - Point light
- Spot light
- Directional light
- Area light
Каждый из них обладает собственным набором атрибутов. Информация об источниках передается в шейдеры автоматически специальным потоком, однако у пользователей нет доступа к исходным кодам движка, изза чего управлять этим процессом затруднительно.
Таким образом, разрабатываемая система должна включать в себя как минимум следующие функции: - Поддержка источников освещения, подобных источником редактора Unity
- Система расчета теней для всех типов 2D объектов
- Расчет теней в режиме реального времени в окне редактора
- Работа в плоскости XY
- Работа без привязки к системе коллайдеров
- Графический интерфейс для настройки компонентов системы
- Поддержка шейдеров для расчета освещения объектов
Помимо этого, в расширении будет реализована система планов на подобии системы Swing, swing, submarine и специальная система для задания формы тени, отбрасываемой объектами. Для удобства использования система должна быть тщательно документирована.
4. Компоненты разрабатываемой системы
Сцена в редакторе Unity представляет собой набор объектов, к каждому из которых прикреплены какие-либо компоненты. Разрабатываемые пользователями компоненты представлены в виде скриптов, написанных на одном из двух языков программирования - C# или JAVASCRIPT. Любой отображаемый на сцене объект имеет свой компонент-рендерер, отвечающий за его рендеринг. Данный компонент одним из своих атрибутов имеет материал, к которому прикреплен определенный шейдер. Шейдер отвечает за то, как непосредственно объект будет отрисовываться на сцене, и как он будет взаимодействовать со светом. Шейдеры в Unity могут быть написаны, используя следующие языки (иногда реализация одного шейдера состоит из нескольких частей, написанных на разных языках программирования): HLSL, GLSL, Cg.
Рассмотрим предполагаемую сцену Unity при использовании разрабатываемой системы. Сцена по аналогии с системой, предложенной компанией Swing Swing Submarine, разделена на так называемые планы. Каждому из них принадлежит множество объектов и источников освещения. К объектам привязаны материалы, к которым прикреплены шейдеры. Менеджеры планов собирают информацию о своих источниках освещения и передают ее в качестве параметров в шейдеры.
Теперь подробнее о каждом компоненте системы.
Вывод
Результатом работы является расширение для игрового движка Unity, позволяющее двухмерным объектам отбрасывать тени и использовать шейдеры. Система состоит из 12 скриптов, написанных на языке C# , одного файла с расширением .cginc и двух шейдеров на языке Cg. Исходные коды представленны в приложении.
Система позволяет любому объекту с прикрепленным к нему компонентом LIGHTOBSTACLE служить препятствием для созданных источников света. Также предусмотрена возможность рассчитывать в шейдерах освещенность поверхностей используя карты нормалей. Абстрактный класс LIGHTSOURCESCRIPT позволяет пользователям создавать собственные типы источников освещения, не меняя логику работы менеджера освещения.
Система поддерживает возможность произвольно задавать силуэт двухмерных объектов для формирования тени. Форма тени может быть задана отдельной текстурой для симулирования отверстий и других особенностей формы невидимых с данного ракурса граней объектов. Сцена в редакторе делится на планы, что позволяет отдельно управлять освещением групп объектов.
Добавление компонентов производится из меню редактора, а их настройка поддерживается графическим интерфейсом, отображаемым непосредственно на сцене. Все доступные пользователю компоненты, классы, их методы и атрибуты документированы, и их описание размещено на специальном сайте в сети Интернет.
Дальнейшая работа предполагает публикацию расширения в магазине Unity Asset Store, расширение функционала и поддержку пользователей.
Список литературы
1. Unity Technologies Made with Unity. URL: http://madewith.unity.com/ (дата обращения: 16.03.2016)
2. Unity Technologies Card Life: Blizzard goes mobile with its online card battle game, Hearthstone: Heroes of Warcraft. URL: http://unity3d.com/ru/showcase/case-stories/hearthstone (дата обращения: 16.03.2016)
9. Fletcher J. VLS2D. URL: https://github.com/reveriejake/vls2d (дата обращения: 20.05.2016)
10. Fouletier B., Martin G. Game Connection Paris - Swing Swing Submarine on Modern 2D Techniques. URL: http://www.youtube.com/watch?v=BUGBXTHRAVM (дата обращения: 20.05.2016)
11 Santee A., Fernandes B. About Ethanon Engine. URL: http://doc.ethanonengine.com/ (дата обращения: 20.05.2016)
12. Lengyel E. Mathematics for 3D game programming and computer graphics. - Cengage Learning, 2005.
13. Gregory J. Game engine architecture. - CRC Press, 2009.
14. Engel K., Hadwiger M., Kniss J., Rezk-Salama C. Real-time volume graphics. - CRC Press, 2006.
16. Jimenez J.J., Feito F.R., Segura R.J. Robust and Optimized Algorithms for the Point?in?Polygon Inclusion Test without Pre?processing //Computer Graphics Forum. - Blackwell Publishing Ltd, 2009., V. 28., N. 8., pp. 2264-2274.
17. Wood K. Arbitrary Quadrilaterals in OPENGL ES 2.0. URL: http://www.bitlush.com/posts/arbitrary-quadrilaterals-in-opengl-es-2-0 (дата обращения: 02.05.2016)
18. DESLAURIERS M. Shaders. Lesson 6: Normal Mapping. URL: https://github.com/mattdesl/lwjgl-basics/wiki/SHADERLESSON6 (дата обращения: 16.03.2016)