Разрабокта расширения для игрового движка Unity

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 11.02.2017
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

5.2.2.2 MaterialSettings

Данный метод позволяет передать в шейдер объекта ту информацию об источнике, которая является уникальной для данного типа. В случае Point Light это позиция источника и его тип, радиус, матрицы трансформации для cookie и карты теней, текстура cookie.

Позиция источника передается в виде четырех координат, первые три из которых соответствуют положению источника на сцене, а последняя определяет его тип. Радиус источника передается в виде числа с плавающей запятой.

Матрица трансформации cookie является перемножением трёх матриц: переноса, поворота и масштабирования. Стандартная функция SetTRS () перемножает матрицы в порядке "перенос, поворот, масштабирование", что не подходит для данного случая, так как поворот осуществляется относительно нуля координат. Из-за этого каждая матрица создаётся отдельно и после этого перемножается с другими таким образом, чтобы сначала повернуть объект, и лишь потом перенести и масштабировать. Матрица трансформации карты теней использует те же компоненты, но итоговая матрица не умножается на матрицу поворота.

Матрица трансформации карты теней получается перемножением матриц переноса и масштабирования, так как не зависит от вращения источника освещения.

5.2.2.3 IsInsideArea

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

5.2.3 Spot Light

Класс Spot Light наследуется от Point Light. С точки зрения расчетов освещения этот тип источника освещения отличается от точечного только тем, что освещает объекты, расположенные в пределах конкретного сектора, заданного углом (

Таблица 3). Если угол равен 360 градусам, то Spot Light полностью идентичен Point Light.

Таблица 3

Уникальные атрибуты класса Point Light

Имя атрибута

Тип

Значение по умолчанию

Модификатор доступа

Отображение в инспекторе

Angle

float

30

public

Да

Рассмотрим только те методы, которые отличаются от родительского класса.

5.2.3.1 ShadowMap

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

5.2.3.2 IsInsideArea

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

5.2.4 Directional Light

Directional light моделирует источник освещения, удаленный на бесконечное расстояние от объекта, свет которого распространяется равномерно вдоль бесконечного числа лучей, направленных под заданным углом. Дополнительных атрибутов этот источник не имеет, так как угол поворота, как и положение в пространстве, задается компонентом Transform, прикрепленным ко всем объектам на сцене. Directional light имеет значение type, равное 0, а ширина и высота карты теней соответствуют габаритам области видимости камеры.

5.2.4.1 ShadowMap

Общий алгоритм построения карты теней Directional Light похож на Point Light. Однако, в данном случае нет необходимости проверять нахождение источника внутри объекта. Кроме того, перенос вспомогательных точек осуществляется вдоль вектора, направленного под углом, заданным источником. Таким образом, точки переносятся параллельно друг другу.

5.2.4.2 MaterialSettings

Набор передаваемых значений данным типом источника существенно меньше набора Point Light. В шейдеры передается лишь информация о позиции источника в пространстве (требуется для определения, располагается объект ниже, выше или на одном уровне с источником и матрица трансформации карты теней.

5.2.4.3 IsInsideArea

Directional Light освещает всю область сцены. Поэтому проверка заключается в определении, находится ли данный объект в видимой камерой области.

Пример теней, сформированных данным классом, представлен на Ошибка! Источник ссылки не найден..

5.2.5 Area Light

В данной работе Area Light представляет собой равномерно освещенную область, заданную прямоугольником. Свет направлен параллельно взгляду наблюдателя, соответственно, данный тип источника не формирует тени объектов. Индивидуальные атрибуты этого класса представлены в

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

Таблица 4

Уникальные атрибуты класса Area Light

Имя атрибута

Тип

Значение по умолчанию

Модификатор доступа

Отображение в инспекторе

AreaWidth

float

5

public

Да

AreaHeight

float

5

public

Да

Значение переменной type для Area light равно 2.

5.2.5.1 ShadowMap

Так как объекты, освещенные Area Light, не отбрасывают тени, то карта теней представляет собой белую текстуру 1x1 пиксель.

5.2.5.2 MaterialSettings

Area Light кроме общих атрибутов также передает в шейдер значения ширины и высоты освещаемой области.

5.2.5.3 IsInsideArea

Объект считается обрабатываемым Area Light, если хотя бы одна его вершина находится внутри образованного источником прямоугольника. Таким образом, необходимо проверить, что разность координат x данной точки и положения источника меньше половины заданной ширины, а разность координат y, соответственно, высоты.

Тем не менее, данный метод используется для предотвращения обработки лишних объектов в ShadowMap (), и, учитывая, что Area Light не формирует теней, таким образом его реализация может быть сведена к возврату константного значения true.

5.3 Плановость

Для реализации системы планов используется встроенная в Unity система наследования. Для всех объектов, принадлежащих данному плану, он является родителем в иерархии Unity. Таким образом, возможно использовать встроенные функции, чтобы получить их количество и список.

Каждому объекту-плану прикрепляется скрипт менеджера освещения. Сначала этот компонент собирает информацию об источниках и освещаемых объектах этого плана. Для этого при помощи встроенной функции Unity в два массива записываются все компоненты Renderer и LightSource, прикрепленные к объектам-наследникам. После этого каждый кадр менеджер передает шейдерам всех объектов информацию об Ambient Light. Далее для каждого освещаемого объекта выбираются ближайшие восемь источников освещения. Для каждого из этих источников вызывается метод MaterialSettings, описанный ранее, который передает все необходимые параметры материалу. Затем в шейдер передаются параметры, наличие которых не зависит от реализации источника. Ими являются цвет, интенсивность и карта теней. Последняя перед этим формируется вызовом соответствующего метода источника.

5.4 Шейдер

Шейдеры Unity получают информацию об источниках света, например, об их положении или цвете, через встроенные переменные, объявленные в специальных cginc-файлах. К сожалению, значения в эти переменные записываются специальным потоком, доступа к которому у пользователей нет. При этом, изменять значения этих переменных так же не представляется возможным. Поэтому для работы с созданными в данной работе источниками потребуется описать необходимые переменные отдельно и передавать значения вручную из скрипта менеджера. Более того, несмотря на то, что язык Cg поддерживает работу с массивами, на данный момент функция передачи переменной из скрипта в какую-нибудь ячейку этого массива отсутствует. Равно как невозможно передавать обычному шейдеру целую структуру. Соответственно, необходимо объявить несколько экземпляров переменных подобного типа, отличающихся лишь порядковым номером. Для того, чтобы не приходилось при создании нового шейдера заново объявлять этот набор данных, их описание вынесено в отдельный cginc файл. Список и описание переменных приведено в

Таблица 5.

Таблица 5

Описание переменных cginc файла, необходимых для работы системы

Имя переменной

Тип

Описание

_AmbientColor

float4

Цвет окружающего света для данного плана

_LightPosition0

float4

Координаты источника освещения

_LightCol0

half4

Цвет источника освещения

_LightIntensity0

float

Интенсивность источника освещения

_LightRange0

float

Радиус источника освещения

_LightWidth0

float

Параметр ширины Area light

_LightHeigth0;

float

Параметр высоты Area light

_LightTex0

sampler2D

Текстура, задающая освещенность в разных участках освещаемой области

_LightTRSMatrix0

float4x4

Матрица, необходимая для преобразования cookie-текстуры

_Shadow0

sampler2D

Карта теней данного источника

_ShadowMatrix0

float4x4

Матрица для преобразования карты теней

Также, в данном файле реализованы функции расчета освещения объекта. Эти функции включают вертексное освещение источником Point light и фрагментное освещение Point light, Directional light и Area light. Для всех расчетов используется модель затенения Ламберта. Согласно этой модели результирующее освещение точки вычисляется по формуле , где I - результирующее значение отраженного света, L - направление источника, N - нормаль поверхности, C - цвет источника освещения, IL - интенсивность источника. Это значение интенсивности перемножается со значениями карты теней и Cookie в данной точке, и складывается с аналогичным освещением от других источников, включая окружающее освещение. Затем получившаяся сумма умножается на значение цвета данной точки поверхности, зависящее от текстуры объекта [18].

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

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

5.5 Интерфейс

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

5.5.1 Point Light

Редактор Point Light строит на сцене окружность с центром в точке положения источника. Эта окружность имеет радиус и цвет равные радиусу и цвету Point Light, что дает наглядно видеть, какая область освещается этим источников. Справа на окружности располагается управляющий элемент, перетаскивая который, можно изменять радиус источника в окне редактора.

5.5.2 Spot Light

Редактор Spot Light аналогичен редактору Point Light за исключением того, что дополнительными линиями ограничивается освещаемый сектор. Управляющий элемент располагается на окружности заданного радиуса, на равном расстоянии между ограничивающими сектор линиями.

5.5.3 Directional Light

Редактор Directional Light не позволяет изменять какие-либо атрибуты источника, так как поворот можно задавать встроенной системой управления компонентами Unity. Данный компонент рисует пять параллельных линий от точки расположения источника. Эти линии имею цвет равный цвету Directional Light. Кроме того, они направлены под соответствующим углом так, чтобы можно было понять, в каком направлении движется свет от источника.

5.5.4 Area Light

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

5.6 Документация

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

Документация включает в себя:

- Перечень компонентов системы с описанием их назначения, порядка добавления на сцену и настройки;

- Перечень доступных для использования классов и их публичных атрибутов и методов;

- Перечень и назначение описанных в cginc файле переменных и функций.

Компоненты описываются по следующей структуре:

1. Название;

2. Назначение;

3. Описание всех атрибутов;

4. Примеры использования.

Описание классов состоит из общей информации об их назначении и описании публичных атрибутов и методов по следующей структуре:

1. Название метода или атрибута;

2. Назначение;

3. Для метода: описание всех входных параметров;

4. Пример использования в виде фрагмента написанного кода.

Описание шейдерных функций по своей структуре соответствует описанию методов классов.

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

Карта сайта документации

Заключение

Результатом работы является расширение для игрового движка 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)

3. Unity Technologies Industries. URL: http://unity3d.com/unity/industries (дата обращения: 16.03.2016)

4. Hurwitz M. Bare Necessities. URL: http://www.icgmagazine.com/web/bare-necessities/ (дата обращения: 20.05.2016)

5. Lyubimov M.2D Light System. URL: https: // www.assetstore. unity3d.com/en/#! /content/20461 (дата обращения: 20.05.2016)

6. Ysa M.2D Dynamic Lights and Shadows - 2DDL PRO. URL: https: // www.assetstore. unity3d.com/en/#! /content/25933 (дата обращения: 20.05.2016)

7. Penkin A. Light2D - GPU Lighting System URL: https: // www.assetstore. unity3d.com/en/#! /content/30953 (дата обращения: 20.05.2016)

8. Moran D. J. Light2D. URL: https: // www.assetstore. unity3d.com/en/#! /content/48539 (дата обращения: 20.05.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.

15. Unity Scripting Reference URL: http://docs. unity3d.com/ScriptReference/ (дата обращения: 24.05.2016)

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)

Приложения

Приложение А. Абстрактный класс источника освещения

Приложение Б. Реализация класса PointLight2D

Приложение В. Реализация класса SpotLight2D

Приложение Г. Реализация класса DirectionalLight2D

Приложение Д. Реализация класса AreaLight2D

Приложение Е. Реализация класса Utility2D

Приложение Ж. Реализация класса ShadowCaster

Приложение И. Реализация класса LightManagerScript

Приложение К. Реализация класса PointLightEditor

Приложение Л. Реализация класса SpotLightEditor

Приложение М. Реализация класса DirectionalLightEditor

Приложение Н. Реализация класса AreaLightEditor

Приложение П. Реализация файла Light2D. cginc

Приложение Р. Реализация шейдера аддитивного наложения текстуры на карту теней

Приложение С. Реализация базового шейдера для работы с системой

Приложение Т. Ссылка на интернет ресурс с пользовательской документацией системы

Размещено на Allbest.ru


Подобные документы

  • Разработка компьютерной игры "Эволюция" с помощью игрового движка Unit. Сравнение критериев игры-аналога и разрабатываемой игры. Разработка графического интерфейса пользователя. Настройки камеры в редакторе Unity. Структура файла сохранения игры.

    дипломная работа [3,6 M], добавлен 11.02.2017

  • Разработка игрового "движка" с использованием языка C++ для написания кода, графического пакета DirectX9 для вывода графики. Использование физического "движка" PhysX для взаимодействия объектов. Технико-математическое описание задачи, листинг программы.

    дипломная работа [4,5 M], добавлен 02.09.2013

  • Разработка игрового проекта на игровом движке Unity 3D в среде программирования MS Visual Studio 2017. Блок-схема алгоритма работы приема сообщений с сервера на клиенте с упрощенным описанием выполняемых команд. Реализация пользовательского интерфейса.

    курсовая работа [1,5 M], добавлен 10.07.2017

  • Особливості Unity у створенні віртуального робочого середовища. Моделювання у віртуальному середовищі навчальних проектів у вигляді лабораторних робіт з фізики, які спрямовані на покращення і спрощення навчального та практичного процесу навчання.

    курсовая работа [74,0 K], добавлен 30.08.2014

  • Платформа Unity 3D как средство разработки компьютерных деловых игр. Рассмотрение реализации взаимодействия между подсистемой проведения деловых игр и модулем визуализации. Формирование игровых уровней на примере компьютерной игры "Проезд перекрестка".

    дипломная работа [2,8 M], добавлен 22.08.2017

  • Изучение существующих подходов к использованию компьютерных игр в образовательном процессе. Разработка и реализация проекта игрового обучающего приложения на мобильной платформе. Выбор платформы и средств реализации игрового обучающего приложения.

    дипломная работа [3,4 M], добавлен 12.08.2017

  • Игровые технологии; назначение, классификация и цель создания мобильных игр. Развлекательные, коммуникативные, терапевтические, диагностические функции игровой деятельности. Создание мобильного программного приложения "Angry Crane" в среде Java Android.

    курсовая работа [1,5 M], добавлен 09.12.2014

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

    дипломная работа [2,2 M], добавлен 16.06.2011

  • Исследование основных требований к пользовательскому интерфейсу. Краткая характеристика используемой операционной системы Windows 7 и языка программирования. Особенность создания удобного управления в игре. Главные требования к аппаратному обеспечению.

    курсовая работа [453,0 K], добавлен 02.06.2017

  • Разработка адресных и технических требований к игре. Написание сценария. Общая концепция разработки приложения. Разработка схем алгоритмов приложения. Игровые технологии. Выбор среды и программированного языка. Описание пользовательского интерфейса.

    курсовая работа [1,6 M], добавлен 14.06.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.